##// END OF EJS Templates
serializer module added to Signal Chain
serializer module added to Signal Chain

File last commit:

r697:7ac8878019bb
r697:7ac8878019bb
Show More
data.py
128 lines | 2.8 KiB | text/x-python | PythonLexer
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568 '''
Created on Jul 15, 2014
@author: Miguel Urco
'''
Miguel Valdez
serializer module added to Signal Chain
r697 from serializer import DynamicSerializer
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568
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
Miguel Valdez
serializer module added to Signal Chain
r697 def dict2Serial(myDict, serializer='msgpack'):
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568
if serializer == 'cPickle':
SERIALIZER = PICKLE_SERIALIZER
else:
SERIALIZER = MSGPACK_SERIALIZER
Miguel Valdez
serializer module added to Signal Chain
r697
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568 mySerial = SERIALIZER.dumps(myDict)
return mySerial
def serial2Dict(mySerial, serializer='msgpack'):
Miguel Valdez
serializer module added to Signal Chain
r697 if serializer == 'cPickle':
SERIALIZER = PICKLE_SERIALIZER
else:
SERIALIZER = MSGPACK_SERIALIZER
myDict = SERIALIZER.loads(mySerial)
return myDict
def obj2Serial(myObj, serializer='msgpack', **kwargs):
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568 if serializer == 'cPickle':
SERIALIZER = PICKLE_SERIALIZER
else:
SERIALIZER = MSGPACK_SERIALIZER
Miguel Valdez
serializer module added to Signal Chain
r697 myDict = obj2Dict(myObj, **kwargs)
mySerial = dict2Serial(myDict, serializer)
return mySerial
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568
def serial2Obj(mySerial, metadataDict = {}, serializer='msgpack'):
if serializer == 'cPickle':
SERIALIZER = PICKLE_SERIALIZER
else:
SERIALIZER = MSGPACK_SERIALIZER
Miguel Valdez
serializer module added to Signal Chain
r697 myDataDict = serial2Dict(mySerial, serializer)
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568
if not metadataDict:
myObj = dict2Obj(myDataDict)
return myObj
metadataDict.update(myDataDict)
myObj = dict2Obj(metadataDict)
Miguel Valdez
serializer module added to Signal Chain
r697 return myObj