Обновить README.md
This commit is contained in:
38
README.md
38
README.md
@@ -1,2 +1,40 @@
|
|||||||
# megasniff
|
# 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`-типы через ретрай на выбросе исключения
|
||||||
|
- по умолчанию использует готовый щаблон для кодогенерации и исполняет его по запросу, требуется особое внимание к сохранности данного шаблона
|
||||||
|
- не проверяет типы списков, словарей, кортежей (реализация ожидается)
|
||||||
|
- пользовательские проверки типов должны быть реализованы через наследование и проверки в конструкторе
|
||||||
Reference in New Issue
Block a user