py.lib

Yohn Y. 2022-08-20

38:4f4cc2fc9805 Go to Latest

py.lib/type_utils/json_tools.py

. Полный рефакторинг кода модулей dataclass_utils.py и config_parse_helper.py. Теперь логика предсказуема. + функция dataobj_extract не просто бездумно загоняет данные в класс данных, но имеет функционал проверки данных с возбуждением исключения при разнице (по умолчанию) и принудительного приведения типов.

History
awgur@38 1 # coding: utf-8
awgur@38 2 from dataclasses import is_dataclass, asdict
awgur@38 3
awgur@38 4
awgur@38 5 def json_type_sanitizer(val):
awgur@38 6 """\
awgur@38 7 Преобразует значение ``val`` в пригодное для преобразования в json значение.
awgur@38 8 """
awgur@38 9
awgur@38 10 val_t = type(val)
awgur@38 11
awgur@38 12 if is_dataclass(val):
awgur@38 13 return json_type_sanitizer(asdict(val))
awgur@38 14
awgur@38 15 elif val_t in (int, float, str, bool) or val is None:
awgur@38 16 return val
awgur@38 17
awgur@38 18 elif val_t in (list, tuple):
awgur@38 19 return list(map(json_type_sanitizer, val))
awgur@38 20
awgur@38 21 elif val_t == dict:
awgur@38 22 return dict((key, json_type_sanitizer(d_val)) for key, d_val in val.items())
awgur@38 23
awgur@38 24 else:
awgur@38 25 return str(val)