mirror of
https://github.com/tiny-craft/tiny-rdm.git
synced 2025-12-24 13:27:51 +08:00
pref: pickle decoder support type datetime
This commit is contained in:
@@ -14,6 +14,21 @@ import base64
|
||||
import json
|
||||
import pickle
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
def default_serializer(o):
|
||||
if isinstance(o, datetime):
|
||||
return o.isoformat()
|
||||
return str(o)
|
||||
|
||||
def object_hook(obj):
|
||||
for k, v in obj.items():
|
||||
if isinstance(v, str):
|
||||
try:
|
||||
obj[k] = datetime.fromisoformat(v)
|
||||
except ValueError:
|
||||
pass
|
||||
return obj
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) >= 3:
|
||||
@@ -24,11 +39,11 @@ if __name__ == "__main__":
|
||||
if action == 'decode':
|
||||
decoded = base64.b64decode(content)
|
||||
obj = pickle.loads(decoded)
|
||||
unserialized = json.dumps(obj, ensure_ascii=False)
|
||||
unserialized = json.dumps(obj, ensure_ascii=False, default=default_serializer)
|
||||
print(base64.b64encode(unserialized.encode('utf-8')).decode('utf-8'))
|
||||
elif action == 'encode':
|
||||
decoded = base64.b64decode(content)
|
||||
obj = json.loads(decoded)
|
||||
obj = json.loads(decoded, object_hook=object_hook)
|
||||
serialized = pickle.dumps(obj)
|
||||
print(base64.b64encode(serialized).decode('utf-8'))
|
||||
except:
|
||||
|
||||
Reference in New Issue
Block a user