From 5949970a9562dd44e4282087f7a92ce0767a8f3e Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Tue, 11 Sep 2012 15:14:37 +0000 Subject: [PATCH] Fixed index inheritance issues firmed up testcases (MongoEngine/mongoengine#123) (MongoEngine/mongoengine#125) --- docs/changelog.rst | 5 +++++ mongoengine/queryset.py | 6 ++++-- tests/test_document.py | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 2d10507d..2820ed5f 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -2,6 +2,11 @@ Changelog ========= + +Changes in 0.7.4 +================ +- Fixed index inheritance issues - firmed up testcases (MongoEngine/mongoengine#123) (MongoEngine/mongoengine#125) + Changes in 0.7.3 ================ - Reverted EmbeddedDocuments meta handling - now can turn off inheritance (MongoEngine/mongoengine#119) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 6f913fc7..5a1aa718 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -501,8 +501,10 @@ class QuerySet(object): """ if isinstance(spec, basestring): spec = {'fields': [spec]} - if isinstance(spec, (list, tuple)): - spec = {'fields': spec} + elif isinstance(spec, (list, tuple)): + spec = {'fields': list(spec)} + elif isinstance(spec, dict): + spec = dict(spec) index_list = [] direction = None diff --git a/tests/test_document.py b/tests/test_document.py index 48ff8223..d2969fe6 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -420,6 +420,9 @@ class DocumentTest(unittest.TestCase): 'indexes': ['name'] } + self.assertEqual(Animal._meta['index_specs'], + [{'fields': [('_types', 1), ('name', 1)]}]) + Animal.drop_collection() dog = Animal(name='dog') @@ -441,6 +444,9 @@ class DocumentTest(unittest.TestCase): 'allow_inheritance': False, 'indexes': ['name'] } + + self.assertEqual(Animal._meta['index_specs'], + [{'fields': [('name', 1)]}]) collection.update({}, {"$unset": {"_types": 1, "_cls": 1}}, multi=True) # Confirm extra data is removed @@ -658,6 +664,12 @@ class DocumentTest(unittest.TestCase): 'allow_inheritance': True } + self.assertEqual(BlogPost._meta['index_specs'], + [{'fields': [('_types', 1), ('addDate', -1)]}, + {'fields': [('tags', 1)]}, + {'fields': [('_types', 1), ('category', 1), + ('addDate', -1)]}]) + BlogPost.drop_collection() info = BlogPost.objects._collection.index_information() @@ -681,6 +693,13 @@ class DocumentTest(unittest.TestCase): title = StringField() meta = {'indexes': ['title']} + self.assertEqual(ExtendedBlogPost._meta['index_specs'], + [{'fields': [('_types', 1), ('addDate', -1)]}, + {'fields': [('tags', 1)]}, + {'fields': [('_types', 1), ('category', 1), + ('addDate', -1)]}, + {'fields': [('_types', 1), ('title', 1)]}]) + BlogPost.drop_collection() list(ExtendedBlogPost.objects) @@ -711,6 +730,8 @@ class DocumentTest(unittest.TestCase): description = StringField() self.assertEqual(A._meta['index_specs'], B._meta['index_specs']) + self.assertEqual([{'fields': [('_types', 1), ('title', 1)]}], + A._meta['index_specs']) def test_build_index_spec_is_not_destructive(self): @@ -791,6 +812,9 @@ class DocumentTest(unittest.TestCase): 'allow_inheritance': False } + self.assertEqual([{'fields': [('rank.title', 1)]}], + Person._meta['index_specs']) + Person.drop_collection() # Indexes are lazy so use list() to perform query @@ -809,6 +833,10 @@ class DocumentTest(unittest.TestCase): '*location.point', ], } + + self.assertEqual([{'fields': [('location.point', '2d')]}], + Place._meta['index_specs']) + Place.drop_collection() info = Place.objects._collection.index_information() @@ -834,6 +862,10 @@ class DocumentTest(unittest.TestCase): ], } + self.assertEqual([{'fields': [('addDate', -1)], 'unique': True, + 'sparse': True, 'types': False}], + BlogPost._meta['index_specs']) + BlogPost.drop_collection() info = BlogPost.objects._collection.index_information()