py.lib
2022-08-20
py.lib/type_utils/json_tools.py
. Полный рефакторинг кода модулей dataclass_utils.py и config_parse_helper.py. Теперь логика предсказуема. + функция dataobj_extract не просто бездумно загоняет данные в класс данных, но имеет функционал проверки данных с возбуждением исключения при разнице (по умолчанию) и принудительного приведения типов.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/type_utils/json_tools.py Sat Aug 20 23:56:16 2022 +0300 1.3 @@ -0,0 +1,25 @@ 1.4 +# coding: utf-8 1.5 +from dataclasses import is_dataclass, asdict 1.6 + 1.7 + 1.8 +def json_type_sanitizer(val): 1.9 + """\ 1.10 + Преобразует значение ``val`` в пригодное для преобразования в json значение. 1.11 + """ 1.12 + 1.13 + val_t = type(val) 1.14 + 1.15 + if is_dataclass(val): 1.16 + return json_type_sanitizer(asdict(val)) 1.17 + 1.18 + elif val_t in (int, float, str, bool) or val is None: 1.19 + return val 1.20 + 1.21 + elif val_t in (list, tuple): 1.22 + return list(map(json_type_sanitizer, val)) 1.23 + 1.24 + elif val_t == dict: 1.25 + return dict((key, json_type_sanitizer(d_val)) for key, d_val in val.items()) 1.26 + 1.27 + else: 1.28 + return str(val)