[base-storage] Ajout de la possibilité de passer des arguments au décodage

This commit is contained in:
Louis Chauvet 2020-03-22 19:55:05 +01:00
parent 7a34e57a2d
commit 2f1a69e9b6
Signed by: fomys
GPG Key ID: 1ECA046A9615ABA0

View File

@ -10,8 +10,8 @@ class Encoder(json.JSONEncoder):
super().__init__() super().__init__()
self.custom = {} self.custom = {}
def register(self, type_, encode, decode): def register(self, type_, encode, decode, decode_args={}):
self.custom.update({type_: (encode, decode)}) self.custom.update({type_: (encode, decode, decode_args)})
def default(self, obj): def default(self, obj):
if isinstance(obj, tuple(self.custom.keys())): if isinstance(obj, tuple(self.custom.keys())):
@ -26,7 +26,7 @@ class Encoder(json.JSONEncoder):
if data_type in dct: if data_type in dct:
for ty in self.custom.keys(): for ty in self.custom.keys():
if str(ty) == dct[data_type]: if str(ty) == dct[data_type]:
return self.custom[ty][1](dct[content]) return self.custom[ty][1](dct[content], **self.custom[ty][2])
if dct[data_type] == "datetime.datetime": if dct[data_type] == "datetime.datetime":
return datetime.datetime.fromisoformat(dct['iso']) return datetime.datetime.fromisoformat(dct['iso'])
elif dct[data_type] == "datetime.timedelta": elif dct[data_type] == "datetime.timedelta":