Source code for koapy.utils.serialization
import io
import json
import os
[docs]class JsonSerializable:
[docs] def to_dict(self):
return dict(self.__dict__)
@classmethod
[docs] def from_dict(cls, dic):
output = cls()
for name in output.__dict__:
setattr(output, name, dic.get(name))
return output
[docs] def to_json(self, f=None, encoding=None):
if f is None:
return json.dumps(self.to_dict())
elif isinstance(f, str):
with open(f, "w", encoding=encoding) as f:
return json.dump(self.to_dict(), f)
elif isinstance(f, io.TextIOBase):
return json.dump(self.to_dict(), f)
else:
raise ValueError("Unsupported argument type: %s" % type(f))
@classmethod
[docs] def from_json(cls, jsn, encoding=None):
if isinstance(jsn, str):
if jsn.startswith("{") and jsn.endswith("}"):
dic = json.loads(jsn)
elif os.path.exists(jsn):
with open(jsn, "r", encoding=encoding) as f:
dic = json.load(f)
else:
dic = json.loads(jsn)
elif isinstance(jsn, io.TextIOBase):
dic = json.load(jsn)
else:
raise ValueError("Unsupported argument type: %s" % type(jsn))
return cls.from_dict(dic)