Ядро сверки перенесено из tests/dbml_parity.py в scripts/dbml_parity.py (единственная реализация, R-14); tests/dbml_parity.py и dbml_helpers.py — тонкие обёртки с пропуском теста без docs. Единый формат строк: `<объект>: ожидалось X / фактически Y`, `<объект>: отсутствует в ORM|DBML`; тип и nullability — одной строкой в нотации DBML. Версия из шапки DBML сверяется с DBML_VERSION до сравнения таблиц. Коды: 0/1/2. Без рабочего .env скрипт берёт api/.env.example. Makefile: dbml-check (в check-full), mypy проверяет scripts. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
21 lines
1008 B
Python
21 lines
1008 B
Python
"""Тонкая обёртка тестов над `scripts.dbml_parity` (единственная реализация сверки ORM с DBML, рулинг R-14).
|
||
|
||
Отличие одно: `find_problems` без явного `dbml` берёт DBML через `load_dbml()` (пропуск теста, если docs недоступен).
|
||
"""
|
||
|
||
from collections.abc import Collection
|
||
|
||
from pydbml import PyDBML
|
||
from sqlalchemy import MetaData
|
||
|
||
from scripts import dbml_parity
|
||
from scripts.dbml_parity import canonical_default_dbml, canonical_default_orm, type_problem
|
||
from tests.dbml_helpers import load_dbml
|
||
|
||
__all__ = ["canonical_default_dbml", "canonical_default_orm", "find_problems", "type_problem"]
|
||
|
||
|
||
def find_problems(metadata: MetaData, tables: Collection[str], dbml: PyDBML | None = None) -> list[str]:
|
||
"""Расхождения ORM с DBML для таблиц `tables` (см. `scripts.dbml_parity.find_problems`)."""
|
||
return dbml_parity.find_problems(metadata, tables, dbml or load_dbml())
|