From 79f7a63ae1b75e25ca65388d3a27a509d30e7d50 Mon Sep 17 00:00:00 2001 From: Lisa Zangrando Date: Mon, 3 Oct 2016 11:14:50 +0200 Subject: [PATCH] Fixed serializer - added support for datetime Change-Id: I68399f3fc303e16730e56afa254a7bc4b83efdf8 --- synergy/common/serializer.py | 9 ++++++--- synergy/common/utils.py | 22 +++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/synergy/common/serializer.py b/synergy/common/serializer.py index f8fdb25..894b90d 100644 --- a/synergy/common/serializer.py +++ b/synergy/common/serializer.py @@ -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) diff --git a/synergy/common/utils.py b/synergy/common/utils.py index 66735b4..b08a6cc 100644 --- a/synergy/common/utils.py +++ b/synergy/common/utils.py @@ -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