Document.select_related() now respects db_alias (#377)

This commit is contained in:
Ross Lawley 2013-07-10 12:49:19 +00:00
parent fa83fba637
commit 4209d61b13
4 changed files with 54 additions and 27 deletions

View File

@ -4,6 +4,7 @@ Changelog
Changes in 0.8.3 Changes in 0.8.3
================ ================
- Document.select_related() now respects `db_alias` (#377)
- Reload uses shard_key if applicable (#384) - Reload uses shard_key if applicable (#384)
- Dynamic fields are ordered based on creation and stored in _fields_ordered (#396) - Dynamic fields are ordered based on creation and stored in _fields_ordered (#396)
- Fixed pickling dynamic documents `_dynamic_fields` (#387) - Fixed pickling dynamic documents `_dynamic_fields` (#387)

View File

@ -440,8 +440,8 @@ class Document(BaseDocument):
.. versionadded:: 0.5 .. versionadded:: 0.5
""" """
import dereference DeReference = _import_class('DeReference')
self._data = dereference.DeReference()(self._data, max_depth) DeReference()([self], max_depth + 1)
return self return self
def reload(self, max_depth=1): def reload(self, max_depth=1):

View File

@ -2474,6 +2474,37 @@ class FieldTest(unittest.TestCase):
user = User(email='me@example.com') user = User(email='me@example.com')
self.assertTrue(user.validate() is None) self.assertTrue(user.validate() is None)
def test_tuples_as_tuples(self):
"""
Ensure that tuples remain tuples when they are
inside a ComplexBaseField
"""
from mongoengine.base import BaseField
class EnumField(BaseField):
def __init__(self, **kwargs):
super(EnumField, self).__init__(**kwargs)
def to_mongo(self, value):
return value
def to_python(self, value):
return tuple(value)
class TestDoc(Document):
items = ListField(EnumField())
TestDoc.drop_collection()
tuples = [(100, 'Testing')]
doc = TestDoc()
doc.items = tuples
doc.save()
x = TestDoc.objects().get()
self.assertTrue(x is not None)
self.assertTrue(len(x.items) == 1)
self.assertTrue(tuple(x.items[0]) in tuples)
self.assertTrue(x.items[0] in tuples)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

View File

@ -1121,37 +1121,32 @@ class FieldTest(unittest.TestCase):
self.assertEqual(q, 2) self.assertEqual(q, 2)
def test_tuples_as_tuples(self): def test_objectid_reference_across_databases(self):
""" # mongoenginetest - Is default connection alias from setUp()
Ensure that tuples remain tuples when they are # Register Aliases
inside a ComplexBaseField register_connection('testdb-1', 'mongoenginetest2')
"""
from mongoengine.base import BaseField
class EnumField(BaseField): class User(Document):
name = StringField()
meta = {"db_alias": "testdb-1"}
def __init__(self, **kwargs): class Book(Document):
super(EnumField, self).__init__(**kwargs) name = StringField()
author = ReferenceField(User)
def to_mongo(self, value): # Drops
return value User.drop_collection()
Book.drop_collection()
def to_python(self, value): user = User(name="Ross").save()
return tuple(value) Book(name="MongoEngine for pros", author=user).save()
class TestDoc(Document): # Can't use query_counter across databases - so test the _data object
items = ListField(EnumField()) book = Book.objects.first()
self.assertFalse(isinstance(book._data['author'], User))
TestDoc.drop_collection() book.select_related()
tuples = [(100, 'Testing')] self.assertTrue(isinstance(book._data['author'], User))
doc = TestDoc()
doc.items = tuples
doc.save()
x = TestDoc.objects().get()
self.assertTrue(x is not None)
self.assertTrue(len(x.items) == 1)
self.assertTrue(tuple(x.items[0]) in tuples)
self.assertTrue(x.items[0] in tuples)
def test_non_ascii_pk(self): def test_non_ascii_pk(self):
""" """