Fixed infinite recursion bug in _geo_indices()

Fixes #213  Thanks to joshink for the bug report
This commit is contained in:
Ross Lawley 2011-06-30 10:32:05 +01:00
parent d51d95a28e
commit 8e1d701c27
2 changed files with 19 additions and 2 deletions

View File

@ -754,11 +754,16 @@ class BaseDocument(object):
return set_data, unset_data return set_data, unset_data
@classmethod @classmethod
def _geo_indices(cls): def _geo_indices(cls, inspected_classes=None):
inspected_classes = inspected_classes or []
geo_indices = [] geo_indices = []
inspected_classes.append(cls)
for field in cls._fields.values(): for field in cls._fields.values():
if hasattr(field, 'document_type'): if hasattr(field, 'document_type'):
geo_indices += field.document_type._geo_indices() field_cls = field.document_type
if field_cls in inspected_classes:
continue
geo_indices += field_cls._geo_indices(inspected_classes)
elif field._geo_index: elif field._geo_index:
geo_indices.append(field) geo_indices.append(field)
return geo_indices return geo_indices

View File

@ -662,6 +662,18 @@ class DocumentTest(unittest.TestCase):
BlogPost.drop_collection() BlogPost.drop_collection()
def test_geo_indexes_recursion(self):
class User(Document):
channel = ReferenceField('Channel')
location = GeoPointField()
class Channel(Document):
user = ReferenceField('User')
location = GeoPointField()
self.assertEquals(len(User._geo_indices()), 2)
def test_hint(self): def test_hint(self):
class BlogPost(Document): class BlogPost(Document):