2025-07-12 01:03:01 +03:00
2025-07-11 22:30:58 +03:00
2025-07-11 22:23:21 +03:00
2025-07-12 00:51:22 +03:00
2025-07-12 01:03:01 +03:00
2025-07-11 22:33:32 +03:00

megasniff

Автоматическая валидация данных по схеме и сборка объекта в одном флаконе

Как применять:

# 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-типы через ретрай на выбросе исключения
  • по умолчанию использует готовый щаблон для кодогенерации и исполняет его по запросу, требуется особое внимание к сохранности данного шаблона
  • не проверяет типы списков, словарей, кортежей (реализация ожидается)
  • пользовательские проверки типов должны быть реализованы через наследование и проверки в конструкторе
Description
Автоматическая валидация данных по схеме и сборка объекта в одном флаконе
Readme LGPL-3.0 216 KiB
Languages
Python 84%
Jinja 16%