From 4c6a2d068506b3fd4c29adf76995a88fdcedfebe Mon Sep 17 00:00:00 2001 From: Suwako Moriya Date: Tue, 31 Mar 2020 10:31:05 +0200 Subject: [PATCH] Fix jsonencoder --- storage/jsonencoder.py | 27 +++++++++++++-------------- storage/objects.py | 4 ++-- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/storage/jsonencoder.py b/storage/jsonencoder.py index b996075..c2d7013 100644 --- a/storage/jsonencoder.py +++ b/storage/jsonencoder.py @@ -5,23 +5,13 @@ data_type = "__data_type" content = "__content" -class Encoder(json.JSONEncoder): - def __init__(self): - super().__init__() - self.custom = {} - +class Encoder(): + def __init__(self, *args, **kwargs): + self.custom = {Encoder:(lambda x:x, lambda x:x)} + self.JSONEncoder.custom = self.custom def register(self, type_, encode, decode): self.custom.update({type_: (encode, decode)}) - def default(self, obj): - if isinstance(obj, tuple(self.custom.keys())): - return {data_type: f'{type(obj)}', content: self.custom[type(obj)][0](obj)} - if isinstance(obj, (datetime.datetime)): - return {data_type: 'datetime.datetime', 'iso': obj.isoformat()} - if isinstance(obj, (datetime.timedelta)): - return {data_type: 'datetime.timedelta', 'totalseconds': obj.total_seconds()} - return json.JSONEncoder.default(self, obj) - def hook(self, dct): if data_type in dct: for ty in self.custom.keys(): @@ -32,3 +22,12 @@ class Encoder(json.JSONEncoder): elif dct[data_type] == "datetime.timedelta": return datetime.timedelta(seconds=dct['totalseconds']) return dct + class JSONEncoder(json.JSONEncoder) : + def default(self, obj): + if isinstance(obj, tuple(self.custom.keys())): + return {data_type: f'{type(obj)}', content: self.custom[type(obj)][0](obj)} + if isinstance(obj, (datetime.datetime)): + return {data_type: 'datetime.datetime', 'iso': obj.isoformat()} + if isinstance(obj, (datetime.timedelta)): + return {data_type: 'datetime.timedelta', 'totalseconds': obj.total_seconds()} + return json.JSONEncoder.default(self, obj) diff --git a/storage/objects.py b/storage/objects.py index ba9826e..0f696fa 100644 --- a/storage/objects.py +++ b/storage/objects.py @@ -8,12 +8,12 @@ class Objects: def __init__(self, path: str): self.path = os.path.abspath(path) os.makedirs(os.path.join(self.path, "objects"), exist_ok=True) - self.encoder = jsonencoder.Encoder + self.encoder = jsonencoder.Encoder() def save_object(self, object_name, object_instance): """Save object into json file""" with open(os.path.join(self.path, "objects", object_name + ".json"), "w") as file: - json.dump(object_instance, file, cls=self.encoder) + json.dump(object_instance, file, cls=self.encoder.JSONEncoder) def load_object(self, object_name): """Load object from json file"""