data.py
113 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
|
r568 | ''' | |
Created on Jul 15, 2014 | |||
@author: Miguel Urco | |||
''' | |||
|
r1167 | from .serializer import DynamicSerializer | |
|
r703 | ||
DEFAULT_SERIALIZER = None #'cPickle', 'msgpack', "yaml" | |||
|
r568 | ||
from schainpy.model.data.jrodata import * | |||
CLASSNAME_KEY = 'classname__' | |||
|
r705 | def isObject(myObj): | |
|
r568 | ||
|
r705 | return hasattr(myObj,'__dict__') | |
|
r568 | ||
def isDictFormat(thisValue): | |||
if type(thisValue) != type({}): | |||
return False | |||
|
r1167 | if CLASSNAME_KEY not in list(thisValue.keys()): | |
|
r568 | return False | |
return True | |||
def obj2Dict(myObj, keyList=[]): | |||
if not keyList: | |||
|
r1167 | keyList = list(myObj.__dict__.keys()) | |
|
r568 | ||
myDict = {} | |||
myDict[CLASSNAME_KEY] = myObj.__class__.__name__ | |||
|
r1167 | for thisKey, thisValue in list(myObj.__dict__.items()): | |
|
r568 | ||
if thisKey not in keyList: | |||
continue | |||
|
r705 | if not isObject(thisValue): | |
|
r568 | myDict[thisKey] = thisValue | |
continue | |||
## If this value is another class instance | |||
|
r705 | myDict[thisKey] = obj2Dict(thisValue) | |
|
r568 | ||
return myDict | |||
def dict2Obj(myDict): | |||
''' | |||
''' | |||
|
r1167 | if CLASSNAME_KEY not in list(myDict.keys()): | |
|
r568 | return None | |
className = eval(myDict[CLASSNAME_KEY]) | |||
myObj = className() | |||
|
r1167 | for thisKey, thisValue in list(myDict.items()): | |
|
r568 | ||
if thisKey == CLASSNAME_KEY: | |||
continue | |||
if not isDictFormat(thisValue): | |||
setattr(myObj, thisKey, thisValue) | |||
continue | |||
myNewObj = dict2Obj(thisValue) | |||
setattr(myObj, thisKey, myNewObj) | |||
return myObj | |||
|
r703 | def dict2Serial(myDict, serializer=DEFAULT_SERIALIZER): | |
SERIALIZER = DynamicSerializer(serializer) | |||
|
r568 | mySerial = SERIALIZER.dumps(myDict) | |
|
r703 | ||
|
r568 | return mySerial | |
|
r703 | ||
def serial2Dict(mySerial, serializer=DEFAULT_SERIALIZER): | |||
SERIALIZER = DynamicSerializer(serializer) | |||
|
r697 | myDict = SERIALIZER.loads(mySerial) | |
|
r703 | ||
|
r697 | return myDict | |
|
r703 | ||
def obj2Serial(myObj, serializer=DEFAULT_SERIALIZER, **kwargs): | |||
SERIALIZER = DynamicSerializer(serializer) | |||
|
r697 | myDict = obj2Dict(myObj, **kwargs) | |
mySerial = dict2Serial(myDict, serializer) | |||
|
r703 | ||
|
r697 | return mySerial | |
|
r703 | ||
def serial2Obj(mySerial, metadataDict = {}, serializer=DEFAULT_SERIALIZER): | |||
SERIALIZER = DynamicSerializer(serializer) | |||
|
r697 | myDataDict = serial2Dict(mySerial, serializer) | |
|
r703 | ||
|
r568 | if not metadataDict: | |
myObj = dict2Obj(myDataDict) | |||
return myObj | |||
|
r703 | ||
|
r568 | metadataDict.update(myDataDict) | |
myObj = dict2Obj(metadataDict) | |||
|
r703 | ||
|
r1167 | return myObj |