Skip to content

Commit

Permalink
Deletes temp keys used in filter. Fixes bug in ModelSet slicing.
Browse files Browse the repository at this point in the history
  • Loading branch information
iamteem committed May 28, 2010
1 parent 640cf31 commit 9621adf
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 7 deletions.
18 changes: 14 additions & 4 deletions redisco/models/modelset.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ def __repr__(self):
return "%s" % s

def __iter__(self):
for id in self._set.members:
for id in self._set:
yield self._get_item_with_id(id)

def __len__(self):
return len(self._set)

def __contains__(self, val):
return val.id in self._set.members
return val.id in self._set

##########################################
# METHODS THAT RETURN A SET OF INSTANCES #
Expand Down Expand Up @@ -149,14 +149,18 @@ def _set(self):
if hasattr(self, '_cached_set'):
return self._cached_set
if self._zfilters:
self._cached_set = NonPersistentList(self._add_zfilters())
self._cached_set = self._add_zfilters()
return self._cached_set
s = Set(self.key)
self._expire_or_delete = []
if self._filters:
s = self._add_set_filter(s)
if self._exclusions:
s = self._add_set_exclusions(s)
self._cached_set = self._order(s.key)
n = self._order(s.key)
self._cached_set = list(self._order(s.key))
for key in filter(lambda key: key != self.key, self._expire_or_delete):
del self.db[key]
return self._cached_set

def _add_set_filter(self, s):
Expand All @@ -170,6 +174,7 @@ def _add_set_filter(self, s):
indices.append(index)
new_set_key = "~%s" % ("+".join([self.key] + indices),)
s.intersection(new_set_key, *[Set(n) for n in indices])
self._expire_or_delete.append(new_set_key)
return Set(new_set_key)

def _add_set_exclusions(self, s):
Expand All @@ -183,6 +188,7 @@ def _add_set_exclusions(self, s):
indices.append(index)
new_set_key = "~%s" % ("-".join([self.key] + indices),)
s.difference(new_set_key, *[Set(n) for n in indices])
self._expire_or_delete.append(new_set_key)
return Set(new_set_key)

def _add_zfilters(self):
Expand Down Expand Up @@ -236,6 +242,8 @@ def _set_with_ordering(self, skey):
start=start,
num=num,
desc=desc)
self._expire_or_delete.append(old_set_key)
self._expire_or_delete.append(new_set_key)
return List(new_set_key)

def _set_without_ordering(self, skey):
Expand All @@ -247,6 +255,8 @@ def _set_without_ordering(self, skey):
store=new_set_key,
start=start,
num=num)
self._expire_or_delete.append(old_set_key)
self._expire_or_delete.append(new_set_key)
return List(new_set_key)

def _get_limit_and_offset(self):
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env python
import os

version = '0.1.dev16'
version = '0.1.dev17'

try:
from setuptools import setup
Expand Down
9 changes: 7 additions & 2 deletions tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,9 +426,14 @@ def test_slicing(self):
self.assertEqual("Lionel Luthor", a[4].full_name())

a = Person.objects.all()[:6]
self.assertEqual(7, len(a))
self.assertEqual(6, len(a))
self.assertEqual(Person.objects.get_by_id('1'), a[0])
self.assertEqual("Lex Luthor", a[6].full_name())
self.assertEqual("Martha Kent", a[5].full_name())

a = Person.objects.all()[2:6]
self.assertEqual(4, len(a))
self.assertEqual(Person.objects.get_by_id('3'), a[0])
self.assertEqual("Martha Kent", a[3].full_name())

def test_get_or_create(self):
Person.objects.create(first_name="Granny", last_name="Goose")
Expand Down

0 comments on commit 9621adf

Please sign in to comment.