# megasniff ### Автоматическая валидация данных по схеме и сборка объекта в одном флаконе Как применять: ```python # 1. Объявляем схемы from __future__ import annotations import dataclasses import typing @dataclasses.dataclass class SomeSchema1: a: int b: float | str c: SomeSchema2 | str | None class SomeSchema2(typing.TypedDict): field1: dict field2: float field3: typing.Optional[SomeSchema1] # 2. Генерируем метод для валидации и сборки import megasniff infl = megasniff.SchemaInflatorGenerator() fn = infl.schema_to_generator(SomeSchema1) # 3. Проверяем что всё работает fn({'a': 1, 'b': 2, 'c': {'field1': {}, 'field2': '1.1'}}) # SomeSchema1(a=1, b=2.0, c={'field1': {}, 'field2': 1.1, 'field3': None}) ``` Особенности работы: - поддерживает циклические зависимости - проверяем `Union`-типы через ретрай на выбросе исключения - по умолчанию использует готовый щаблон для кодогенерации и исполняет его по запросу, требуется особое внимание к сохранности данного шаблона - не проверяет типы списков, словарей, кортежей (реализация ожидается) - пользовательские проверки типов должны быть реализованы через наследование и проверки в конструкторе