From 6113149c589d4aa7a4c81039f507d4bf8bb5b27c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Tue, 10 Apr 2018 13:42:51 +0200 Subject: [PATCH] Rework serialization module to work regardless of message format --- lib/tfw/networking/serialization.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/tfw/networking/serialization.py b/lib/tfw/networking/serialization.py index 26e222e..d26257e 100644 --- a/lib/tfw/networking/serialization.py +++ b/lib/tfw/networking/serialization.py @@ -4,6 +4,27 @@ import json +def serialize_all(*args): + return tuple(_serialize_single(arg) for arg in args) + + +def deserialize_all(*args): + return tuple(_deserialize_single(arg) for arg in args) + + +def _serialize_single(data): + if not isinstance(data, str): + data = json.dumps(data) + return encode_if_needed(data) + + +def _deserialize_single(data): + try: + return json.loads(data) + except ValueError: + return decode_if_needed(data) + + def encode_if_needed(value): if isinstance(value, str): value = value.encode('utf-8') @@ -14,11 +35,3 @@ def decode_if_needed(value): if isinstance(value, (bytes, bytearray)): value = value.decode('utf-8') return value - - -def serialize_all(key, data): - return [encode_if_needed(frame) for frame in (key, json.dumps(data))] - - -def deserialize_all(key, data): - return decode_if_needed(key), json.loads(data)