From 87c965edd347138fd071da0cd5fa82a2377f7205 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Thu, 10 Jan 2013 11:08:07 +0000 Subject: [PATCH] Fixing PY3.3 test cases --- mongoengine/queryset.py | 12 +++++++++--- tests/test_document.py | 17 +++++++++++------ tests/test_queryset.py | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 160201e9..bff05fcf 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -7,10 +7,11 @@ import operator from collections import defaultdict from functools import partial -from mongoengine.python_support import product, reduce +from mongoengine.python_support import product, reduce, PY3 import pymongo from bson.code import Code +from bson.son import SON from mongoengine import signals @@ -388,7 +389,12 @@ class QuerySet(object): if self._mongo_query is None: self._mongo_query = self._query_obj.to_query(self._document) if self._class_check: - self._mongo_query.update(self._initial_query) + if PY3: + query = SON(self._initial_query.items()) + query.update(self._mongo_query) + self._mongo_query = query + else: + self._mongo_query.update(self._initial_query) return self._mongo_query def ensure_index(self, key_or_list, drop_dups=False, background=False, @@ -704,7 +710,7 @@ class QuerySet(object): mongo_query = {} merge_query = defaultdict(list) - for key, value in query.items(): + for key, value in sorted(query.items()): if key == "__raw__": mongo_query.update(value) continue diff --git a/tests/test_document.py b/tests/test_document.py index 9fc79f5d..3e8d8134 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -8,6 +8,7 @@ import sys import unittest import uuid import warnings +import operator from nose.plugins.skip import SkipTest from datetime import datetime @@ -452,7 +453,8 @@ class DocumentTest(unittest.TestCase): info = collection.index_information() info = [value['key'] for key, value in info.iteritems()] - self.assertEqual([[(u'_id', 1)], [(u'_types', 1), (u'name', 1)]], info) + self.assertEqual([[('_id', 1)], [('_types', 1), ('name', 1)]], + sorted(info, key=operator.itemgetter(0))) # Turn off inheritance class Animal(Document): @@ -473,7 +475,8 @@ class DocumentTest(unittest.TestCase): info = collection.index_information() info = [value['key'] for key, value in info.iteritems()] - self.assertEqual([[(u'_id', 1)], [(u'_types', 1), (u'name', 1)]], info) + self.assertEqual([[(u'_id', 1)], [(u'_types', 1), (u'name', 1)]], + sorted(info, key=operator.itemgetter(0))) info = collection.index_information() indexes_to_drop = [key for key, value in info.iteritems() if '_types' in dict(value['key'])] @@ -482,14 +485,16 @@ class DocumentTest(unittest.TestCase): info = collection.index_information() info = [value['key'] for key, value in info.iteritems()] - self.assertEqual([[(u'_id', 1)]], info) + self.assertEqual([[(u'_id', 1)]], + sorted(info, key=operator.itemgetter(0))) # Recreate indexes dog = Animal.objects.first() dog.save() info = collection.index_information() info = [value['key'] for key, value in info.iteritems()] - self.assertEqual([[(u'_id', 1)], [(u'name', 1),]], info) + self.assertEqual([[(u'_id', 1)], [(u'name', 1),]], + sorted(info, key=operator.itemgetter(0))) Animal.drop_collection() @@ -3412,8 +3417,8 @@ class ValidatorErrorTest(unittest.TestCase): try: User().validate() except ValidationError, e: - expected_error_message = """ValidationError(Field is required: ['username', 'name'])""" - self.assertEqual(e.message, expected_error_message) + expected_error_message = """ValidationError(Field is required""" + self.assertTrue(expected_error_message in e.message) self.assertEqual(e.to_dict(), { 'username': 'Field is required', 'name': 'Field is required'}) diff --git a/tests/test_queryset.py b/tests/test_queryset.py index b09eafb4..5234cea2 100644 --- a/tests/test_queryset.py +++ b/tests/test_queryset.py @@ -47,7 +47,7 @@ class QuerySetTest(unittest.TestCase): self.assertEqual(QuerySet._transform_query(age__gt=20, age__lt=50), {'age': {'$gt': 20, '$lt': 50}}) self.assertEqual(QuerySet._transform_query(age=20, age__gt=50), - {'age': 20}) + {'$and': [{'age': {'$gt': 50}}, {'age': 20}]}) self.assertEqual(QuerySet._transform_query(friend__age__gte=30), {'friend.age': {'$gte': 30}}) self.assertEqual(QuerySet._transform_query(name__exists=True),