better handling of empty storage and improved addition of new elements
This commit is contained in:
parent
63c07ea3f1
commit
87d9a19242
25
storage.py
25
storage.py
|
@ -188,11 +188,14 @@ class DataStorage(dict):
|
||||||
self.update( **dict(d) )
|
self.update( **dict(d) )
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
|
#print("__setitem__")
|
||||||
setattr(self,key,value)
|
setattr(self,key,value)
|
||||||
super().__setitem__(key, value)
|
super().__setitem__(key, value)
|
||||||
|
|
||||||
def __setattr__(self, key, value):
|
def __setattr__(self, key, value):
|
||||||
""" allows to add fields with data.test=4 """
|
""" allows to add fields with data.test=4 """
|
||||||
|
#print("__setattr__")
|
||||||
|
if isinstance(value,(dict,collections.OrderedDict)): value = DataStorage(value)
|
||||||
super().__setitem__(key, value)
|
super().__setitem__(key, value)
|
||||||
super().__setattr__(key,value)
|
super().__setattr__(key,value)
|
||||||
|
|
||||||
|
@ -208,23 +211,33 @@ class DataStorage(dict):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
keys = list(self.keys())
|
keys = list(self.keys())
|
||||||
keys.sort()
|
keys.sort()
|
||||||
|
if len(keys) == 0: return "Empty DataStorage"
|
||||||
nchars = max(map(len,keys))
|
nchars = max(map(len,keys))
|
||||||
fmt = "%%%ds %%s" % (nchars)
|
fmt = "%%%ds %%s" % (nchars)
|
||||||
s = ["DataStorage obj containing (sorted): ",]
|
s = ["DataStorage obj containing (sorted): ",]
|
||||||
for k in keys:
|
for k in keys:
|
||||||
if isinstance(self[k],np.ndarray):
|
obj = self[k]
|
||||||
value_str = "array, size %s, type %s"% ("x".join(map(str,self[k].shape)),self[k].dtype)
|
if isinstance(obj,np.ndarray):
|
||||||
elif isinstance(self[k],DataStorage):
|
value_str = "array, size %s, type %s"% ("x".join(map(str,obj.shape)),obj.dtype)
|
||||||
value_str = str(self[k])[:50] + "..."
|
elif isinstance(obj,DataStorage):
|
||||||
elif isinstance(self[k],(str,DataStorage)):
|
value_str = str(obj)[:50]
|
||||||
value_str = self[k][:50] + "..."
|
elif isinstance(obj,(str,DataStorage)):
|
||||||
|
value_str = obj[:50]
|
||||||
|
elif isinstance(obj,(list,tuple)) and all( [isinstance(v,np.ndarray) for v in obj]):
|
||||||
|
value_str = "list of arrays, shapes " + ",".join([str(v.shape) for v in obj[:5]]) + " ..."
|
||||||
elif self[k] is None:
|
elif self[k] is None:
|
||||||
value_str = "None"
|
value_str = "None"
|
||||||
else:
|
else:
|
||||||
value_str = str(self[k])
|
value_str = str(self[k])
|
||||||
|
if len(str(obj))>50: value_str += " ..."
|
||||||
s.append( fmt % (k,value_str) )
|
s.append( fmt % (k,value_str) )
|
||||||
return "\n".join(s)
|
return "\n".join(s)
|
||||||
|
|
||||||
|
def keys(self):
|
||||||
|
keys = list(super().keys())
|
||||||
|
keys = [k for k in keys if k != 'filename' ]
|
||||||
|
return keys
|
||||||
|
|
||||||
def save(self,fname=None):
|
def save(self,fname=None):
|
||||||
if fname is None: fname = self.filename
|
if fname is None: fname = self.filename
|
||||||
assert fname is not None
|
assert fname is not None
|
||||||
|
|
Loading…
Reference in New Issue