solution for #949
This commit is contained in:
parent
c642eee0d2
commit
63d55cb797
@ -44,6 +44,9 @@ def query(_doc_cls=None, _field_operation=False, **query):
|
|||||||
if len(parts) > 1 and parts[-1] in MATCH_OPERATORS:
|
if len(parts) > 1 and parts[-1] in MATCH_OPERATORS:
|
||||||
op = parts.pop()
|
op = parts.pop()
|
||||||
|
|
||||||
|
if len(parts) > 1 and not parts[-1]:
|
||||||
|
parts.pop()
|
||||||
|
|
||||||
negate = False
|
negate = False
|
||||||
if len(parts) > 1 and parts[-1] == 'not':
|
if len(parts) > 1 and parts[-1] == 'not':
|
||||||
parts.pop()
|
parts.pop()
|
||||||
|
@ -1328,7 +1328,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(1, BlogPost.objects.count())
|
self.assertEqual(1, BlogPost.objects.count())
|
||||||
|
|
||||||
def test_reverse_delete_rule_cascade_on_abstract_document(self):
|
def test_reverse_delete_rule_cascade_on_abstract_document(self):
|
||||||
"""Ensure cascading deletion of referring documents from the database
|
"""Ensure cascading deletion of referring documents from the database
|
||||||
does not fail on abstract document.
|
does not fail on abstract document.
|
||||||
"""
|
"""
|
||||||
class AbstractBlogPost(Document):
|
class AbstractBlogPost(Document):
|
||||||
@ -1350,7 +1350,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(3, BlogPost.objects.count())
|
self.assertEqual(3, BlogPost.objects.count())
|
||||||
self.Person.objects(name='Test User').delete()
|
self.Person.objects(name='Test User').delete()
|
||||||
self.assertEqual(1, BlogPost.objects.count())
|
self.assertEqual(1, BlogPost.objects.count())
|
||||||
|
|
||||||
def test_reverse_delete_rule_cascade_self_referencing(self):
|
def test_reverse_delete_rule_cascade_self_referencing(self):
|
||||||
"""Ensure self-referencing CASCADE deletes do not result in infinite
|
"""Ensure self-referencing CASCADE deletes do not result in infinite
|
||||||
@ -1411,8 +1411,8 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(1, BlogPost.objects.count())
|
self.assertEqual(1, BlogPost.objects.count())
|
||||||
self.assertEqual(None, BlogPost.objects.first().category)
|
self.assertEqual(None, BlogPost.objects.first().category)
|
||||||
|
|
||||||
def test_reverse_delete_rule_nullify_on_abstract_document(self):
|
def test_reverse_delete_rule_nullify_on_abstract_document(self):
|
||||||
"""Ensure nullification of references to deleted documents when
|
"""Ensure nullification of references to deleted documents when
|
||||||
reference is on an abstract document.
|
reference is on an abstract document.
|
||||||
"""
|
"""
|
||||||
class AbstractBlogPost(Document):
|
class AbstractBlogPost(Document):
|
||||||
@ -1474,7 +1474,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(1, BlogPost.objects.count())
|
self.assertEqual(1, BlogPost.objects.count())
|
||||||
self.assertRaises(OperationError, self.Person.objects.delete)
|
self.assertRaises(OperationError, self.Person.objects.delete)
|
||||||
|
|
||||||
def test_reverse_delete_rule_pull(self):
|
def test_reverse_delete_rule_pull(self):
|
||||||
"""Ensure pulling of references to deleted documents.
|
"""Ensure pulling of references to deleted documents.
|
||||||
"""
|
"""
|
||||||
@ -1511,9 +1511,9 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
"""
|
"""
|
||||||
class AbstractBlogPost(Document):
|
class AbstractBlogPost(Document):
|
||||||
meta = {'abstract': True}
|
meta = {'abstract': True}
|
||||||
authors = ListField(ReferenceField(self.Person,
|
authors = ListField(ReferenceField(self.Person,
|
||||||
reverse_delete_rule=PULL))
|
reverse_delete_rule=PULL))
|
||||||
|
|
||||||
class BlogPost(AbstractBlogPost):
|
class BlogPost(AbstractBlogPost):
|
||||||
content = StringField()
|
content = StringField()
|
||||||
|
|
||||||
@ -1538,7 +1538,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(post.authors, [me])
|
self.assertEqual(post.authors, [me])
|
||||||
self.assertEqual(another.authors, [])
|
self.assertEqual(another.authors, [])
|
||||||
|
|
||||||
def test_delete_with_limits(self):
|
def test_delete_with_limits(self):
|
||||||
|
|
||||||
class Log(Document):
|
class Log(Document):
|
||||||
@ -3009,7 +3009,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
def test_distinct_ListField_EmbeddedDocumentField_EmbeddedDocumentField(self):
|
def test_distinct_ListField_EmbeddedDocumentField_EmbeddedDocumentField(self):
|
||||||
class Continent(EmbeddedDocument):
|
class Continent(EmbeddedDocument):
|
||||||
continent_name = StringField()
|
continent_name = StringField()
|
||||||
|
|
||||||
class Country(EmbeddedDocument):
|
class Country(EmbeddedDocument):
|
||||||
country_name = StringField()
|
country_name = StringField()
|
||||||
continent = EmbeddedDocumentField(Continent)
|
continent = EmbeddedDocumentField(Continent)
|
||||||
@ -3026,7 +3026,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
europe = Continent(continent_name='europe')
|
europe = Continent(continent_name='europe')
|
||||||
asia = Continent(continent_name='asia')
|
asia = Continent(continent_name='asia')
|
||||||
|
|
||||||
scotland = Country(country_name="Scotland", continent=europe)
|
scotland = Country(country_name="Scotland", continent=europe)
|
||||||
tibet = Country(country_name="Tibet", continent=asia)
|
tibet = Country(country_name="Tibet", continent=asia)
|
||||||
|
|
||||||
@ -3041,9 +3041,9 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
country_list = Book.objects.distinct("authors.country")
|
country_list = Book.objects.distinct("authors.country")
|
||||||
|
|
||||||
self.assertEqual(country_list, [scotland, tibet])
|
self.assertEqual(country_list, [scotland, tibet])
|
||||||
|
|
||||||
continent_list = Book.objects.distinct("authors.country.continent")
|
continent_list = Book.objects.distinct("authors.country.continent")
|
||||||
|
|
||||||
self.assertEqual(continent_list, [europe, asia])
|
self.assertEqual(continent_list, [europe, asia])
|
||||||
|
|
||||||
def test_distinct_ListField_ReferenceField(self):
|
def test_distinct_ListField_ReferenceField(self):
|
||||||
@ -4592,6 +4592,19 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEquals(Animal.objects(folded_ears=True).count(), 1)
|
self.assertEquals(Animal.objects(folded_ears=True).count(), 1)
|
||||||
self.assertEquals(Animal.objects(whiskers_length=5.1).count(), 1)
|
self.assertEquals(Animal.objects(whiskers_length=5.1).count(), 1)
|
||||||
|
|
||||||
|
def test_last_field_name_like_operator(self):
|
||||||
|
class EmbeddedItem(EmbeddedDocument):
|
||||||
|
type = StringField()
|
||||||
|
|
||||||
|
class Doc(Document):
|
||||||
|
item = EmbeddedDocumentField(EmbeddedItem)
|
||||||
|
|
||||||
|
Doc.drop_collection()
|
||||||
|
|
||||||
|
doc = Doc(item=EmbeddedItem(type="axe"))
|
||||||
|
doc.save()
|
||||||
|
|
||||||
|
self.assertEqual(1, Doc.objects(item__type__="axe").count())
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user