Updated pickling (#316)

This commit is contained in:
Ross Lawley 2013-05-20 10:04:17 +00:00
parent 11b7cfb5ff
commit 6299015039
2 changed files with 11 additions and 11 deletions

View File

@ -141,16 +141,16 @@ class BaseDocument(object):
super(BaseDocument, self).__setattr__(name, value) super(BaseDocument, self).__setattr__(name, value)
def __getstate__(self): def __getstate__(self):
removals = ("get_%s_display" % k data = {}
for k, v in self._fields.items() if v.choices) for k in ('_changed_fields', '_initialised', '_created'):
for k in removals: data[k] = getattr(self, k)
if hasattr(self, k): data['_data'] = self.to_mongo()
delattr(self, k) return data
return self.__dict__
def __setstate__(self, __dict__): def __setstate__(self, data):
self.__dict__ = __dict__ for k in ('_changed_fields', '_initialised', '_created'):
self.__set_field_display() setattr(self, k, data[k])
self._data = self.__class__._from_son(data["_data"])._data
def __iter__(self): def __iter__(self):
if 'id' in self._fields and 'id' not in self._fields_ordered: if 'id' in self._fields and 'id' not in self._fields_ordered:

View File

@ -25,11 +25,11 @@ class PickleSignalsTest(Document):
@classmethod @classmethod
def post_save(self, sender, document, created, **kwargs): def post_save(self, sender, document, created, **kwargs):
pickled = pickle.dumps(document) pickled = pickle.dumps(document)
@classmethod @classmethod
def post_delete(self, sender, document, **kwargs): def post_delete(self, sender, document, **kwargs):
pickled = pickle.dumps(document) pickled = pickle.dumps(document)
signals.post_save.connect(PickleSignalsTest.post_save, sender=PickleSignalsTest) signals.post_save.connect(PickleSignalsTest.post_save, sender=PickleSignalsTest)
signals.post_delete.connect(PickleSignalsTest.post_delete, sender=PickleSignalsTest) signals.post_delete.connect(PickleSignalsTest.post_delete, sender=PickleSignalsTest)