Implementing saving of database objects as keys to Attribute-dicts. Also fixed some other issues with nested iterables in Attributes. Resolves #404.

This commit is contained in:
Griatch 2014-02-15 16:52:21 +01:00
parent 28531d4fea
commit 9ceaeedd9b

View file

@ -200,7 +200,6 @@ class _SaverSet(_SaverMutable, MutableSet):
def discard(self, value):
self._data.discard(value)
#
# serialization helpers
#
@ -241,7 +240,6 @@ def unpack_dbobj(item):
dbobj = obj
return _TO_DATESTRING(dbobj) == item[2] and obj or None
#
# Access methods
#
@ -264,7 +262,7 @@ def to_pickle(data):
elif dtype in (list, _SaverList):
return [process_item(val) for val in item]
elif dtype in (dict, _SaverDict):
return dict((key, process_item(val)) for key, val in item.items())
return dict((process_item(key), process_item(val)) for key, val in item.items())
elif dtype in (set, _SaverSet):
return set(process_item(val) for val in item)
elif hasattr(item, '__item__'):
@ -305,7 +303,7 @@ def from_pickle(data, db_obj=None):
elif dtype == tuple:
return tuple(process_item(val) for val in item)
elif dtype == dict:
return dict((key, process_item(val)) for key, val in item.items())
return dict((process_item(key), process_item(val)) for key, val in item.items())
elif dtype == set:
return set(process_item(val) for val in item)
elif hasattr(item, '__iter__'):
@ -333,7 +331,7 @@ def from_pickle(data, db_obj=None):
return dat
elif dtype == dict:
dat = _SaverDict(parent=parent)
dat._data.update(dict((key, process_tree(val, dat))
dat._data.update(dict((process_item(key), process_tree(val, dat))
for key, val in item.items()))
return dat
elif dtype == set:
@ -361,7 +359,7 @@ def from_pickle(data, db_obj=None):
return dat
elif dtype == dict:
dat = _SaverDict(db_obj=db_obj)
dat._data.update((key, process_tree(val, parent=dat))
dat._data.update((process_item(key), process_tree(val, parent=dat))
for key, val in data.items())
return dat
elif dtype == set: