From c09bfca6342a60ee20f931c16731282969c378bc Mon Sep 17 00:00:00 2001 From: "Terence D. Honles" Date: Wed, 15 Aug 2018 12:36:13 -0700 Subject: [PATCH 1/2] add __repr__ to Q and QCombination --- mongoengine/queryset/visitor.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mongoengine/queryset/visitor.py b/mongoengine/queryset/visitor.py index bcf93a13..3ae053b8 100644 --- a/mongoengine/queryset/visitor.py +++ b/mongoengine/queryset/visitor.py @@ -131,6 +131,10 @@ class QCombination(QNode): else: self.children.append(node) + def __repr__(self): + op = ' & ' if self.operation is self.AND else ' | ' + return '(%s)' % op.join([repr(node) for node in self.children]) + def accept(self, visitor): for i in range(len(self.children)): if isinstance(self.children[i], QNode): @@ -151,6 +155,9 @@ class Q(QNode): def __init__(self, **query): self.query = query + def __repr__(self): + return 'Q(**%s)' % repr(self.query) + def accept(self, visitor): return visitor.visit_query(self) From b3b4d992fefaf3ae3e61465818c1dc3e6bdd9256 Mon Sep 17 00:00:00 2001 From: "Terence D. Honles" Date: Mon, 27 Aug 2018 19:24:24 -0700 Subject: [PATCH 2/2] add Q repr tests --- tests/queryset/visitor.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/queryset/visitor.py b/tests/queryset/visitor.py index 6f020e88..6186e726 100644 --- a/tests/queryset/visitor.py +++ b/tests/queryset/visitor.py @@ -296,6 +296,18 @@ class QTest(unittest.TestCase): obj = self.Person.objects(Q(name__not=re.compile('^Gui'))).first() self.assertEqual(obj, None) + def test_q_repr(self): + self.assertEqual(repr(Q()), 'Q(**{})') + self.assertEqual(repr(Q(name='test')), "Q(**{'name': 'test'})") + + self.assertEqual( + repr(Q(name='test') & Q(age__gte=18)), + "(Q(**{'name': 'test'}) & Q(**{'age__gte': 18}))") + + self.assertEqual( + repr(Q(name='test') | Q(age__gte=18)), + "(Q(**{'name': 'test'}) | Q(**{'age__gte': 18}))") + def test_q_lists(self): """Ensure that Q objects query ListFields correctly. """