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:
parent
28531d4fea
commit
9ceaeedd9b
1 changed files with 4 additions and 6 deletions
|
|
@ -200,7 +200,6 @@ class _SaverSet(_SaverMutable, MutableSet):
|
||||||
def discard(self, value):
|
def discard(self, value):
|
||||||
self._data.discard(value)
|
self._data.discard(value)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# serialization helpers
|
# serialization helpers
|
||||||
#
|
#
|
||||||
|
|
@ -241,7 +240,6 @@ def unpack_dbobj(item):
|
||||||
dbobj = obj
|
dbobj = obj
|
||||||
return _TO_DATESTRING(dbobj) == item[2] and obj or None
|
return _TO_DATESTRING(dbobj) == item[2] and obj or None
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Access methods
|
# Access methods
|
||||||
#
|
#
|
||||||
|
|
@ -264,7 +262,7 @@ def to_pickle(data):
|
||||||
elif dtype in (list, _SaverList):
|
elif dtype in (list, _SaverList):
|
||||||
return [process_item(val) for val in item]
|
return [process_item(val) for val in item]
|
||||||
elif dtype in (dict, _SaverDict):
|
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):
|
elif dtype in (set, _SaverSet):
|
||||||
return set(process_item(val) for val in item)
|
return set(process_item(val) for val in item)
|
||||||
elif hasattr(item, '__item__'):
|
elif hasattr(item, '__item__'):
|
||||||
|
|
@ -305,7 +303,7 @@ def from_pickle(data, db_obj=None):
|
||||||
elif dtype == tuple:
|
elif dtype == tuple:
|
||||||
return tuple(process_item(val) for val in item)
|
return tuple(process_item(val) for val in item)
|
||||||
elif dtype == dict:
|
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:
|
elif dtype == set:
|
||||||
return set(process_item(val) for val in item)
|
return set(process_item(val) for val in item)
|
||||||
elif hasattr(item, '__iter__'):
|
elif hasattr(item, '__iter__'):
|
||||||
|
|
@ -333,7 +331,7 @@ def from_pickle(data, db_obj=None):
|
||||||
return dat
|
return dat
|
||||||
elif dtype == dict:
|
elif dtype == dict:
|
||||||
dat = _SaverDict(parent=parent)
|
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()))
|
for key, val in item.items()))
|
||||||
return dat
|
return dat
|
||||||
elif dtype == set:
|
elif dtype == set:
|
||||||
|
|
@ -361,7 +359,7 @@ def from_pickle(data, db_obj=None):
|
||||||
return dat
|
return dat
|
||||||
elif dtype == dict:
|
elif dtype == dict:
|
||||||
dat = _SaverDict(db_obj=db_obj)
|
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())
|
for key, val in data.items())
|
||||||
return dat
|
return dat
|
||||||
elif dtype == set:
|
elif dtype == set:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue