From 6d353dae1e52b54f244fb1c6459b5d314e9d522d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastien=20G=C3=A9rard?= Date: Mon, 18 Feb 2019 21:08:04 +0100 Subject: [PATCH] refactored iteritems/itervalues to improve 2/3 compat #2003 --- mongoengine/base/datastructures.py | 5 +++-- mongoengine/base/document.py | 17 +++++++++-------- mongoengine/base/fields.py | 7 ++++--- mongoengine/base/metaclasses.py | 13 +++++++------ mongoengine/context_managers.py | 6 ++++-- mongoengine/dereference.py | 15 ++++++++------- mongoengine/document.py | 3 ++- mongoengine/errors.py | 9 +++++---- mongoengine/fields.py | 5 +++-- mongoengine/queryset/base.py | 5 +++-- mongoengine/queryset/transform.py | 3 ++- tests/document/indexes.py | 28 ++++++++++++++-------------- tests/document/inheritance.py | 4 +++- tests/document/instance.py | 9 ++++----- tests/queryset/queryset.py | 3 ++- tests/test_dereference.py | 27 ++++++++++++++------------- 16 files changed, 87 insertions(+), 72 deletions(-) diff --git a/mongoengine/base/datastructures.py b/mongoengine/base/datastructures.py index 808332b9..fafc08b7 100644 --- a/mongoengine/base/datastructures.py +++ b/mongoengine/base/datastructures.py @@ -2,6 +2,7 @@ import weakref from bson import DBRef import six +from six import iteritems from mongoengine.common import _import_class from mongoengine.errors import DoesNotExist, MultipleObjectsReturned @@ -363,7 +364,7 @@ class StrictDict(object): _classes = {} def __init__(self, **kwargs): - for k, v in kwargs.iteritems(): + for k, v in iteritems(kwargs): setattr(self, k, v) def __getitem__(self, key): @@ -411,7 +412,7 @@ class StrictDict(object): return (key for key in self.__slots__ if hasattr(self, key)) def __len__(self): - return len(list(self.iteritems())) + return len(list(iteritems(self))) def __eq__(self, other): return self.items() == other.items() diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index 6a4c6bd9..8587f17f 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -5,6 +5,7 @@ from functools import partial from bson import DBRef, ObjectId, SON, json_util import pymongo import six +from six import iteritems from mongoengine import signals from mongoengine.base.common import get_document @@ -83,7 +84,7 @@ class BaseDocument(object): self._dynamic_fields = SON() # Assign default values to instance - for key, field in self._fields.iteritems(): + for key, field in iteritems(self._fields): if self._db_field_map.get(key, key) in __only_fields: continue value = getattr(self, key, None) @@ -95,14 +96,14 @@ class BaseDocument(object): # Set passed values after initialisation if self._dynamic: dynamic_data = {} - for key, value in values.iteritems(): + for key, value in iteritems(values): if key in self._fields or key == '_id': setattr(self, key, value) else: dynamic_data[key] = value else: FileField = _import_class('FileField') - for key, value in values.iteritems(): + for key, value in iteritems(values): key = self._reverse_db_field_map.get(key, key) if key in self._fields or key in ('id', 'pk', '_cls'): if __auto_convert and value is not None: @@ -118,7 +119,7 @@ class BaseDocument(object): if self._dynamic: self._dynamic_lock = False - for key, value in dynamic_data.iteritems(): + for key, value in iteritems(dynamic_data): setattr(self, key, value) # Flag initialised @@ -513,7 +514,7 @@ class BaseDocument(object): if not hasattr(data, 'items'): iterator = enumerate(data) else: - iterator = data.iteritems() + iterator = iteritems(data) for index_or_key, value in iterator: item_key = '%s%s.' % (base_key, index_or_key) @@ -678,7 +679,7 @@ class BaseDocument(object): # Convert SON to a data dict, making sure each key is a string and # corresponds to the right db field. data = {} - for key, value in son.iteritems(): + for key, value in iteritems(son): key = str(key) key = cls._db_field_map.get(key, key) data[key] = value @@ -694,7 +695,7 @@ class BaseDocument(object): if not _auto_dereference: fields = copy.deepcopy(fields) - for field_name, field in fields.iteritems(): + for field_name, field in iteritems(fields): field._auto_dereference = _auto_dereference if field.db_field in data: value = data[field.db_field] @@ -715,7 +716,7 @@ class BaseDocument(object): # In STRICT documents, remove any keys that aren't in cls._fields if cls.STRICT: - data = {k: v for k, v in data.iteritems() if k in cls._fields} + data = {k: v for k, v in iteritems(data) if k in cls._fields} obj = cls(__auto_convert=False, _created=created, __only_fields=only_fields, **data) obj._changed_fields = changed_fields diff --git a/mongoengine/base/fields.py b/mongoengine/base/fields.py index a32544d8..5586c5b7 100644 --- a/mongoengine/base/fields.py +++ b/mongoengine/base/fields.py @@ -5,6 +5,7 @@ import weakref from bson import DBRef, ObjectId, SON import pymongo import six +from six import iteritems from mongoengine.base.common import UPDATE_OPERATORS from mongoengine.base.datastructures import (BaseDict, BaseList, @@ -382,11 +383,11 @@ class ComplexBaseField(BaseField): if self.field: value_dict = { key: self.field._to_mongo_safe_call(item, use_db_field, fields) - for key, item in value.iteritems() + for key, item in iteritems(value) } else: value_dict = {} - for k, v in value.iteritems(): + for k, v in iteritems(value): if isinstance(v, Document): # We need the id from the saved object to create the DBRef if v.pk is None: @@ -423,7 +424,7 @@ class ComplexBaseField(BaseField): errors = {} if self.field: if hasattr(value, 'iteritems') or hasattr(value, 'items'): - sequence = value.iteritems() + sequence = iteritems(value) else: sequence = enumerate(value) for k, v in sequence: diff --git a/mongoengine/base/metaclasses.py b/mongoengine/base/metaclasses.py index 8eb10008..a1970825 100644 --- a/mongoengine/base/metaclasses.py +++ b/mongoengine/base/metaclasses.py @@ -1,6 +1,7 @@ import warnings import six +from six import iteritems, itervalues from mongoengine.base.common import _document_registry from mongoengine.base.fields import BaseField, ComplexBaseField, ObjectIdField @@ -62,7 +63,7 @@ class DocumentMetaclass(type): # Standard object mixin - merge in any Fields if not hasattr(base, '_meta'): base_fields = {} - for attr_name, attr_value in base.__dict__.iteritems(): + for attr_name, attr_value in iteritems(base.__dict__): if not isinstance(attr_value, BaseField): continue attr_value.name = attr_name @@ -74,7 +75,7 @@ class DocumentMetaclass(type): # Discover any document fields field_names = {} - for attr_name, attr_value in attrs.iteritems(): + for attr_name, attr_value in iteritems(attrs): if not isinstance(attr_value, BaseField): continue attr_value.name = attr_name @@ -103,7 +104,7 @@ class DocumentMetaclass(type): attrs['_fields_ordered'] = tuple(i[1] for i in sorted( (v.creation_counter, v.name) - for v in doc_fields.itervalues())) + for v in itervalues(doc_fields))) # # Set document hierarchy @@ -173,7 +174,7 @@ class DocumentMetaclass(type): f.__dict__.update({'im_self': getattr(f, '__self__')}) # Handle delete rules - for field in new_class._fields.itervalues(): + for field in itervalues(new_class._fields): f = field if f.owner_document is None: f.owner_document = new_class @@ -375,7 +376,7 @@ class TopLevelDocumentMetaclass(DocumentMetaclass): new_class.objects = QuerySetManager() # Validate the fields and set primary key if needed - for field_name, field in new_class._fields.iteritems(): + for field_name, field in iteritems(new_class._fields): if field.primary_key: # Ensure only one primary key is set current_pk = new_class._meta.get('id_field') @@ -438,7 +439,7 @@ class MetaDict(dict): _merge_options = ('indexes',) def merge(self, new_options): - for k, v in new_options.iteritems(): + for k, v in iteritems(new_options): if k in self._merge_options: self[k] = self.get(k, []) + v else: diff --git a/mongoengine/context_managers.py b/mongoengine/context_managers.py index c26b0a79..d1e5d9ef 100644 --- a/mongoengine/context_managers.py +++ b/mongoengine/context_managers.py @@ -1,9 +1,11 @@ from contextlib import contextmanager + from pymongo.write_concern import WriteConcern +from six import iteritems + from mongoengine.common import _import_class from mongoengine.connection import DEFAULT_CONNECTION_NAME, get_db - __all__ = ('switch_db', 'switch_collection', 'no_dereference', 'no_sub_classes', 'query_counter', 'set_write_concern') @@ -112,7 +114,7 @@ class no_dereference(object): GenericReferenceField = _import_class('GenericReferenceField') ComplexBaseField = _import_class('ComplexBaseField') - self.deref_fields = [k for k, v in self.cls._fields.iteritems() + self.deref_fields = [k for k, v in iteritems(self.cls._fields) if isinstance(v, (ReferenceField, GenericReferenceField, ComplexBaseField))] diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index 619b5d1f..eaebb56f 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -1,5 +1,6 @@ from bson import DBRef, SON import six +from six import iteritems from mongoengine.base import (BaseDict, BaseList, EmbeddedDocumentList, TopLevelDocumentMetaclass, get_document) @@ -71,7 +72,7 @@ class DeReference(object): def _get_items_from_dict(items): new_items = {} - for k, v in items.iteritems(): + for k, v in iteritems(items): value = v if isinstance(v, list): value = _get_items_from_list(v) @@ -112,7 +113,7 @@ class DeReference(object): depth += 1 for item in iterator: if isinstance(item, (Document, EmbeddedDocument)): - for field_name, field in item._fields.iteritems(): + for field_name, field in iteritems(item._fields): v = item._data.get(field_name, None) if isinstance(v, LazyReference): # LazyReference inherits DBRef but should not be dereferenced here ! @@ -124,7 +125,7 @@ class DeReference(object): elif isinstance(v, (dict, list, tuple)) and depth <= self.max_depth: field_cls = getattr(getattr(field, 'field', None), 'document_type', None) references = self._find_references(v, depth) - for key, refs in references.iteritems(): + for key, refs in iteritems(references): if isinstance(field_cls, (Document, TopLevelDocumentMetaclass)): key = field_cls reference_map.setdefault(key, set()).update(refs) @@ -137,7 +138,7 @@ class DeReference(object): reference_map.setdefault(get_document(item['_cls']), set()).add(item['_ref'].id) elif isinstance(item, (dict, list, tuple)) and depth - 1 <= self.max_depth: references = self._find_references(item, depth - 1) - for key, refs in references.iteritems(): + for key, refs in iteritems(references): reference_map.setdefault(key, set()).update(refs) return reference_map @@ -146,7 +147,7 @@ class DeReference(object): """Fetch all references and convert to their document objects """ object_map = {} - for collection, dbrefs in self.reference_map.iteritems(): + for collection, dbrefs in iteritems(self.reference_map): # we use getattr instead of hasattr because hasattr swallows any exception under python2 # so it could hide nasty things without raising exceptions (cfr bug #1688)) @@ -157,7 +158,7 @@ class DeReference(object): refs = [dbref for dbref in dbrefs if (col_name, dbref) not in object_map] references = collection.objects.in_bulk(refs) - for key, doc in references.iteritems(): + for key, doc in iteritems(references): object_map[(col_name, key)] = doc else: # Generic reference: use the refs data to convert to document if isinstance(doc_type, (ListField, DictField, MapField)): @@ -229,7 +230,7 @@ class DeReference(object): data = [] else: is_list = False - iterator = items.iteritems() + iterator = iteritems(items) data = {} depth += 1 diff --git a/mongoengine/document.py b/mongoengine/document.py index 7a491b7d..8885825b 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -5,6 +5,7 @@ from bson.dbref import DBRef import pymongo from pymongo.read_preferences import ReadPreference import six +from six import iteritems from mongoengine import signals from mongoengine.base import (BaseDict, BaseDocument, BaseList, @@ -607,7 +608,7 @@ class Document(six.with_metaclass(TopLevelDocumentMetaclass, BaseDocument)): # Delete FileFields separately FileField = _import_class('FileField') - for name, field in self._fields.iteritems(): + for name, field in iteritems(self._fields): if isinstance(field, FileField): getattr(self, name).delete() diff --git a/mongoengine/errors.py b/mongoengine/errors.py index 986ebf73..0e92a8c4 100644 --- a/mongoengine/errors.py +++ b/mongoengine/errors.py @@ -1,6 +1,7 @@ from collections import defaultdict import six +from six import iteritems __all__ = ('NotRegistered', 'InvalidDocumentError', 'LookUpError', 'DoesNotExist', 'MultipleObjectsReturned', 'InvalidQueryError', @@ -113,7 +114,7 @@ class ValidationError(AssertionError): return errors_dict if isinstance(source, dict): - for field_name, error in source.iteritems(): + for field_name, error in iteritems(source): errors_dict[field_name] = build_dict(error) elif isinstance(source, ValidationError) and source.errors: return build_dict(source.errors) @@ -135,12 +136,12 @@ class ValidationError(AssertionError): value = ' '.join([generate_key(k) for k in value]) elif isinstance(value, dict): value = ' '.join( - [generate_key(v, k) for k, v in value.iteritems()]) + [generate_key(v, k) for k, v in iteritems(value)]) results = '%s.%s' % (prefix, value) if prefix else value return results error_dict = defaultdict(list) - for k, v in self.to_dict().iteritems(): + for k, v in iteritems(self.to_dict()): error_dict[generate_key(v)].append(k) - return ' '.join(['%s: %s' % (k, v) for k, v in error_dict.iteritems()]) + return ' '.join(['%s: %s' % (k, v) for k, v in iteritems(error_dict)]) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 0055bcab..52ed4bc9 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -11,6 +11,7 @@ from bson import Binary, DBRef, ObjectId, SON import gridfs import pymongo import six +from six import iteritems try: import dateutil @@ -794,12 +795,12 @@ class DynamicField(BaseField): value = {k: v for k, v in enumerate(value)} data = {} - for k, v in value.iteritems(): + for k, v in iteritems(value): data[k] = self.to_mongo(v, use_db_field, fields) value = data if is_list: # Convert back to a list - value = [v for k, v in sorted(data.iteritems(), key=itemgetter(0))] + value = [v for k, v in sorted(iteritems(data), key=itemgetter(0))] return value def to_python(self, value): diff --git a/mongoengine/queryset/base.py b/mongoengine/queryset/base.py index 0ebeafa6..f39fd65f 100644 --- a/mongoengine/queryset/base.py +++ b/mongoengine/queryset/base.py @@ -12,6 +12,7 @@ import pymongo import pymongo.errors from pymongo.common import validate_read_preference import six +from six import iteritems from mongoengine import signals from mongoengine.base import get_document @@ -1731,13 +1732,13 @@ class BaseQuerySet(object): } """ total, data, types = self.exec_js(freq_func, field) - values = {types.get(k): int(v) for k, v in data.iteritems()} + values = {types.get(k): int(v) for k, v in iteritems(data)} if normalize: values = {k: float(v) / total for k, v in values.items()} frequencies = {} - for k, v in values.iteritems(): + for k, v in iteritems(values): if isinstance(k, float): if int(k) == k: k = int(k) diff --git a/mongoengine/queryset/transform.py b/mongoengine/queryset/transform.py index 2d22c350..c00271f3 100644 --- a/mongoengine/queryset/transform.py +++ b/mongoengine/queryset/transform.py @@ -4,6 +4,7 @@ from bson import ObjectId, SON from bson.dbref import DBRef import pymongo import six +from six import iteritems from mongoengine.base import UPDATE_OPERATORS from mongoengine.common import _import_class @@ -154,7 +155,7 @@ def query(_doc_cls=None, **kwargs): if ('$maxDistance' in value_dict or '$minDistance' in value_dict) and \ ('$near' in value_dict or '$nearSphere' in value_dict): value_son = SON() - for k, v in value_dict.iteritems(): + for k, v in iteritems(value_dict): if k == '$maxDistance' or k == '$minDistance': continue value_son[k] = v diff --git a/tests/document/indexes.py b/tests/document/indexes.py index 757d8037..57f48587 100644 --- a/tests/document/indexes.py +++ b/tests/document/indexes.py @@ -5,6 +5,7 @@ from datetime import datetime from nose.plugins.skip import SkipTest from pymongo.errors import OperationFailure import pymongo +from six import iteritems from mongoengine import * from mongoengine.connection import get_db @@ -68,7 +69,7 @@ class IndexesTest(unittest.TestCase): info = BlogPost.objects._collection.index_information() # _id, '-date', 'tags', ('cat', 'date') self.assertEqual(len(info), 4) - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] for expected in expected_specs: self.assertIn(expected['fields'], info) @@ -100,7 +101,7 @@ class IndexesTest(unittest.TestCase): # the indices on -date and tags will both contain # _cls as first element in the key self.assertEqual(len(info), 4) - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] for expected in expected_specs: self.assertIn(expected['fields'], info) @@ -115,7 +116,7 @@ class IndexesTest(unittest.TestCase): ExtendedBlogPost.ensure_indexes() info = ExtendedBlogPost.objects._collection.index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] for expected in expected_specs: self.assertIn(expected['fields'], info) @@ -225,7 +226,7 @@ class IndexesTest(unittest.TestCase): # Indexes are lazy so use list() to perform query list(Person.objects) info = Person.objects._collection.index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] self.assertIn([('rank.title', 1)], info) def test_explicit_geo2d_index(self): @@ -245,7 +246,7 @@ class IndexesTest(unittest.TestCase): Place.ensure_indexes() info = Place._get_collection().index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] self.assertIn([('location.point', '2d')], info) def test_explicit_geo2d_index_embedded(self): @@ -268,7 +269,7 @@ class IndexesTest(unittest.TestCase): Place.ensure_indexes() info = Place._get_collection().index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] self.assertIn([('current.location.point', '2d')], info) def test_explicit_geosphere_index(self): @@ -288,7 +289,7 @@ class IndexesTest(unittest.TestCase): Place.ensure_indexes() info = Place._get_collection().index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] self.assertIn([('location.point', '2dsphere')], info) def test_explicit_geohaystack_index(self): @@ -310,7 +311,7 @@ class IndexesTest(unittest.TestCase): Place.ensure_indexes() info = Place._get_collection().index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] self.assertIn([('location.point', 'geoHaystack')], info) def test_create_geohaystack_index(self): @@ -322,7 +323,7 @@ class IndexesTest(unittest.TestCase): Place.create_index({'fields': (')location.point', 'name')}, bucketSize=10) info = Place._get_collection().index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] self.assertIn([('location.point', 'geoHaystack'), ('name', 1)], info) def test_dictionary_indexes(self): @@ -355,7 +356,7 @@ class IndexesTest(unittest.TestCase): info = [(value['key'], value.get('unique', False), value.get('sparse', False)) - for key, value in info.iteritems()] + for key, value in iteritems(info)] self.assertIn(([('addDate', -1)], True, True), info) BlogPost.drop_collection() @@ -576,7 +577,7 @@ class IndexesTest(unittest.TestCase): else: self.assertEqual(BlogPost.objects.hint([('ZZ', 1)]).count(), 10) - self.assertEqual(BlogPost.objects.hint(TAGS_INDEX_NAME ).count(), 10) + self.assertEqual(BlogPost.objects.hint(TAGS_INDEX_NAME).count(), 10) with self.assertRaises(Exception): BlogPost.objects.hint(('tags', 1)).next() @@ -806,7 +807,7 @@ class IndexesTest(unittest.TestCase): self.fail('Unbound local error at index + pk definition') info = BlogPost.objects._collection.index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] index_item = [('_id', 1), ('comments.comment_id', 1)] self.assertIn(index_item, info) @@ -854,7 +855,7 @@ class IndexesTest(unittest.TestCase): } info = MyDoc.objects._collection.index_information() - info = [value['key'] for key, value in info.iteritems()] + info = [value['key'] for key, value in iteritems(info)] self.assertIn([('provider_ids.foo', 1)], info) self.assertIn([('provider_ids.bar', 1)], info) @@ -936,7 +937,6 @@ class IndexesTest(unittest.TestCase): # Drop the temporary database at the end connection.drop_database('tempdatabase') - def test_index_dont_send_cls_option(self): """ Ensure that 'cls' option is not sent through ensureIndex. We shouldn't diff --git a/tests/document/inheritance.py b/tests/document/inheritance.py index 32e3ed29..9cc20c89 100644 --- a/tests/document/inheritance.py +++ b/tests/document/inheritance.py @@ -2,6 +2,8 @@ import unittest import warnings +from six import iteritems + from mongoengine import (BooleanField, Document, EmbeddedDocument, EmbeddedDocumentField, GenericReferenceField, IntField, ReferenceField, StringField, connect) @@ -485,7 +487,7 @@ class InheritanceTest(unittest.TestCase): meta = {'abstract': True} class Human(Mammal): pass - for k, v in defaults.iteritems(): + for k, v in iteritems(defaults): for cls in [Animal, Fish, Guppy]: self.assertEqual(cls._meta[k], v) diff --git a/tests/document/instance.py b/tests/document/instance.py index 5319ace4..9bde23f3 100644 --- a/tests/document/instance.py +++ b/tests/document/instance.py @@ -9,6 +9,7 @@ import weakref from datetime import datetime from bson import DBRef, ObjectId from pymongo.errors import DuplicateKeyError +from six import iteritems from tests import fixtures from tests.fixtures import (PickleEmbedded, PickleTest, PickleSignalsTest, @@ -1482,7 +1483,7 @@ class InstanceTest(MongoDBTestCase): Message.drop_collection() # All objects share the same id, but each in a different collection - user = User(id=1, name='user-name')#.save() + user = User(id=1, name='user-name') # .save() message = Message(id=1, author=user).save() message.author.name = 'tutu' @@ -2000,7 +2001,6 @@ class InstanceTest(MongoDBTestCase): child_record.delete() self.assertEqual(Record.objects(name='parent').get().children, []) - def test_reverse_delete_rule_with_custom_id_field(self): """Ensure that a referenced document with custom primary key is also deleted upon deletion. @@ -3059,7 +3059,7 @@ class InstanceTest(MongoDBTestCase): def expand(self): self.flattened_parameter = {} - for parameter_name, parameter in self.parameters.iteritems(): + for parameter_name, parameter in iteritems(self.parameters): parameter.expand() class NodesSystem(Document): @@ -3067,7 +3067,7 @@ class InstanceTest(MongoDBTestCase): nodes = MapField(ReferenceField(Node, dbref=False)) def save(self, *args, **kwargs): - for node_name, node in self.nodes.iteritems(): + for node_name, node in iteritems(self.nodes): node.expand() node.save(*args, **kwargs) super(NodesSystem, self).save(*args, **kwargs) @@ -3381,7 +3381,6 @@ class InstanceTest(MongoDBTestCase): class User(Document): company = ReferenceField(Company) - # Ensure index creation exception aren't swallowed (#1688) with self.assertRaises(DuplicateKeyError): User.objects().select_related() diff --git a/tests/queryset/queryset.py b/tests/queryset/queryset.py index d3a2418a..ef67ac54 100644 --- a/tests/queryset/queryset.py +++ b/tests/queryset/queryset.py @@ -12,6 +12,7 @@ from pymongo.errors import ConfigurationError from pymongo.read_preferences import ReadPreference from pymongo.results import UpdateResult import six +from six import iteritems from mongoengine import * from mongoengine.connection import get_connection, get_db @@ -4026,7 +4027,7 @@ class QuerySetTest(unittest.TestCase): info = [(value['key'], value.get('unique', False), value.get('sparse', False)) - for key, value in info.iteritems()] + for key, value in iteritems(info)] self.assertIn(([('_cls', 1), ('message', 1)], False, False), info) def test_where(self): diff --git a/tests/test_dereference.py b/tests/test_dereference.py index 5cf089f4..cf1194f4 100644 --- a/tests/test_dereference.py +++ b/tests/test_dereference.py @@ -2,6 +2,7 @@ import unittest from bson import DBRef, ObjectId +from six import iteritems from mongoengine import * from mongoengine.connection import get_db @@ -632,7 +633,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 2) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIsInstance(m, User) # Document select_related @@ -645,7 +646,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 2) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIsInstance(m, User) # Queryset select_related @@ -659,7 +660,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 2) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIsInstance(m, User) User.drop_collection() @@ -714,7 +715,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 4) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIn('User', m.__class__.__name__) # Document select_related @@ -730,7 +731,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 4) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIn('User', m.__class__.__name__) # Queryset select_related @@ -747,7 +748,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 4) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIn('User', m.__class__.__name__) Group.objects.delete() @@ -805,7 +806,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 2) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIsInstance(m, UserA) # Document select_related @@ -821,7 +822,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 2) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIsInstance(m, UserA) # Queryset select_related @@ -838,7 +839,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 2) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIsInstance(m, UserA) UserA.drop_collection() @@ -893,7 +894,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 4) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIn('User', m.__class__.__name__) # Document select_related @@ -909,7 +910,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 4) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIn('User', m.__class__.__name__) # Queryset select_related @@ -926,7 +927,7 @@ class FieldTest(unittest.TestCase): [m for m in group_obj.members] self.assertEqual(q, 4) - for k, m in group_obj.members.iteritems(): + for k, m in iteritems(group_obj.members): self.assertIn('User', m.__class__.__name__) Group.objects.delete() @@ -1064,7 +1065,6 @@ class FieldTest(unittest.TestCase): self.assertEqual(msg.author, user) self.assertEqual(msg.author.name, 'new-name') - def test_list_lookup_not_checked_in_map(self): """Ensure we dereference list data correctly """ @@ -1286,5 +1286,6 @@ class FieldTest(unittest.TestCase): self.assertEqual(q, 2) + if __name__ == '__main__': unittest.main()