##// END OF EJS Templates
Merge with branch schain_julia_drifts from rev. 803 to 995....
Merge with branch schain_julia_drifts from rev. 803 to 995. No tested

File last commit:

r568:486c66596e4c
r568:486c66596e4c
Show More
DataTranslate.py
114 lines | 2.5 KiB | text/x-python | PythonLexer
'''
Created on Jul 15, 2014
@author: Miguel Urco
'''
from JROSerializer import DynamicSerializer
PICKLE_SERIALIZER = DynamicSerializer('cPickle')
MSGPACK_SERIALIZER = DynamicSerializer('msgpack')
from schainpy.model.data.jrodata import *
CLASSNAME_KEY = 'classname__'
def isNotClassVar(myObj):
return not hasattr(myObj,'__dict__')
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
if isNotClassVar(thisValue):
myDict[thisKey] = thisValue
continue
## If this value is another class instance
myNewDict = obj2Dict(thisValue)
myDict[thisKey] = myNewDict
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
def obj2Serial(myObj, serializer='msgpack', **kwargs):
if serializer == 'cPickle':
SERIALIZER = PICKLE_SERIALIZER
else:
SERIALIZER = MSGPACK_SERIALIZER
myDict = obj2Dict(myObj, **kwargs)
mySerial = SERIALIZER.dumps(myDict)
return mySerial
def serial2Dict(mySerial, serializer='msgpack'):
if serializer == 'cPickle':
SERIALIZER = PICKLE_SERIALIZER
else:
SERIALIZER = MSGPACK_SERIALIZER
return SERIALIZER.loads(mySerial)
def serial2Obj(mySerial, metadataDict = {}, serializer='msgpack'):
if serializer == 'cPickle':
SERIALIZER = PICKLE_SERIALIZER
else:
SERIALIZER = MSGPACK_SERIALIZER
myDataDict = SERIALIZER.loads(mySerial)
if not metadataDict:
myObj = dict2Obj(myDataDict)
return myObj
metadataDict.update(myDataDict)
myObj = dict2Obj(metadataDict)
return myObj