data.py
114 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
|
r568 | ''' | ||
Created on Jul 15, 2014 | ||||
@author: Miguel Urco | ||||
''' | ||||
|
r697 | 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 | ||||
if CLASSNAME_KEY not in thisValue.keys(): | ||||
return False | ||||
return True | ||||
def obj2Dict(myObj, keyList=[]): | ||||
if not keyList: | ||||
keyList = myObj.__dict__.keys() | ||||
myDict = {} | ||||
myDict[CLASSNAME_KEY] = myObj.__class__.__name__ | ||||
for thisKey, thisValue in myObj.__dict__.items(): | ||||
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): | ||||
''' | ||||
''' | ||||
if CLASSNAME_KEY not in myDict.keys(): | ||||
return None | ||||
className = eval(myDict[CLASSNAME_KEY]) | ||||
myObj = className() | ||||
for thisKey, thisValue in myDict.items(): | ||||
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 | |||
|
r697 | return myObj | ||