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