Current class fields when unpickling. Fixes #888
Optimize dereferencing map by using sets.
This commit is contained in:
@@ -10,6 +10,7 @@ import uuid
|
||||
|
||||
from datetime import datetime
|
||||
from bson import DBRef, ObjectId
|
||||
from tests import fixtures
|
||||
from tests.fixtures import (PickleEmbedded, PickleTest, PickleSignalsTest,
|
||||
PickleDyanmicEmbedded, PickleDynamicTest)
|
||||
|
||||
@@ -2085,6 +2086,29 @@ class InstanceTest(unittest.TestCase):
|
||||
self.assertEqual(pickle_doc.string, "Two")
|
||||
self.assertEqual(pickle_doc.lists, ["1", "2", "3"])
|
||||
|
||||
def test_regular_document_pickle(self):
|
||||
|
||||
pickle_doc = PickleTest(number=1, string="One", lists=['1', '2'])
|
||||
pickled_doc = pickle.dumps(pickle_doc) # make sure pickling works even before the doc is saved
|
||||
pickle_doc.save()
|
||||
|
||||
pickled_doc = pickle.dumps(pickle_doc)
|
||||
|
||||
# Test that when a document's definition changes the new
|
||||
# definition is used
|
||||
fixtures.PickleTest = fixtures.NewDocumentPickleTest
|
||||
|
||||
resurrected = pickle.loads(pickled_doc)
|
||||
self.assertEqual(resurrected.__class__,
|
||||
fixtures.NewDocumentPickleTest)
|
||||
self.assertEqual(resurrected._fields_ordered,
|
||||
fixtures.NewDocumentPickleTest._fields_ordered)
|
||||
self.assertNotEqual(resurrected._fields_ordered,
|
||||
pickle_doc._fields_ordered)
|
||||
|
||||
# The local PickleTest is still a ref to the original
|
||||
fixtures.PickleTest = PickleTest
|
||||
|
||||
def test_dynamic_document_pickle(self):
|
||||
|
||||
pickle_doc = PickleDynamicTest(
|
||||
|
||||
@@ -17,6 +17,15 @@ class PickleTest(Document):
|
||||
photo = FileField()
|
||||
|
||||
|
||||
class NewDocumentPickleTest(Document):
|
||||
number = IntField()
|
||||
string = StringField(choices=(('One', '1'), ('Two', '2')))
|
||||
embedded = EmbeddedDocumentField(PickleEmbedded)
|
||||
lists = ListField(StringField())
|
||||
photo = FileField()
|
||||
new_field = StringField()
|
||||
|
||||
|
||||
class PickleDyanmicEmbedded(DynamicEmbeddedDocument):
|
||||
date = DateTimeField(default=datetime.now)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user