Fixed serializer

- added support for datetime

Change-Id: I68399f3fc303e16730e56afa254a7bc4b83efdf8
This commit is contained in:
Lisa Zangrando 2016-10-03 11:14:50 +02:00
parent e01f690a86
commit 79f7a63ae1
2 changed files with 23 additions and 8 deletions

View File

@ -1,8 +1,7 @@
import datetime
from datetime import datetime
from json import JSONEncoder
from synergy.common import utils
__author__ = "Lisa Zangrando"
__email__ = "lisa.zangrando[AT]pd.infn.it"
__copyright__ = """Copyright (c) 2015 INFN - INDIGO-DataCloud
@ -100,6 +99,8 @@ class SynergyObject(object):
del entity["synergy_object"]
entity = utils.objectHookHandler(entity)
for key, value in entity.items():
if isinstance(value, dict):
if "synergy_object" in value:
@ -148,7 +149,7 @@ class SynergyObject(object):
result[key].append(item.serialize())
else:
result[key].append(item)
elif isinstance(value, datetime.datetime):
elif isinstance(value, datetime):
result[key] = value.isoformat()
else:
result[key] = value
@ -160,5 +161,7 @@ class SynergyEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, SynergyObject):
return obj.serialize()
elif isinstance(obj, datetime):
return obj.isoformat()
else:
return JSONEncoder.default(self, obj)

View File

@ -1,6 +1,8 @@
import sys
import traceback
from datetime import datetime
__author__ = "Lisa Zangrando"
__email__ = "lisa.zangrando[AT]pd.infn.it"
__copyright__ = """Copyright (c) 2015 INFN - INDIGO-DataCloud
@ -33,14 +35,24 @@ def import_class(import_str):
(class_str, traceback.format_exception(*sys.exc_info())))
def objectHookHandler(parsed_dict):
if "synergy_object" in parsed_dict:
synergy_object = parsed_dict["synergy_object"]
def objectHookHandler(json_dict):
for key, value in json_dict.items():
if isinstance(value, dict):
json_dict[key] = objectHookHandler(value)
else:
try:
json_dict[key] = datetime.strptime(value,
"%Y-%m-%dT%H:%M:%S.%f")
except Exception as ex:
pass
if "synergy_object" in json_dict:
synergy_object = json_dict["synergy_object"]
try:
objClass = import_class(synergy_object["name"])
objInstance = objClass()
return objInstance.deserialize(parsed_dict)
return objInstance.deserialize(json_dict)
except Exception as ex:
raise ex
else:
return parsed_dict
return json_dict