py.lib
2022-08-20
py.lib/type_utils/json_tools.py
. Полный рефакторинг кода модулей dataclass_utils.py и config_parse_helper.py. Теперь логика предсказуема. + функция dataobj_extract не просто бездумно загоняет данные в класс данных, но имеет функционал проверки данных с возбуждением исключения при разнице (по умолчанию) и принудительного приведения типов.
| 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) |