diff --git a/README.md b/README.md index bafb955..4c5c294 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,40 @@ # 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`-типы через ретрай на выбросе исключения +- по умолчанию использует готовый щаблон для кодогенерации и исполняет его по запросу, требуется особое внимание к сохранности данного шаблона +- не проверяет типы списков, словарей, кортежей (реализация ожидается) +- пользовательские проверки типов должны быть реализованы через наследование и проверки в конструкторе \ No newline at end of file