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
     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)