From f5ced4177e67530ba4a20485d0f5537c560ee446 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 18 Oct 2026 19:42:12 +0400 Subject: [PATCH] =?UTF-8?q?build:=20=D0=BA=D0=BE=D0=BF=D0=B8=D1=8F=20arm?= =?UTF-8?q?=5Fstatements=20=D0=B2=20=D0=BB=D0=B8=D0=BD=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=85=20=D0=B8=20=D1=82=D0=B5=D1=81=D1=82=D0=B0=D1=85,?= =?UTF-8?q?=20statements-check=20=D0=B2=20check-full=20(#52)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 5 +++++ Makefile | 15 ++++++++++++--- api/pyproject.toml | 18 +++++++++++++++++- api/pytest.ini | 1 + api/requirements-dev.txt | 6 ++++-- 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1484d97..12326a2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,6 +13,11 @@ Stateless-сервис разбора XLS/XLSX/XLSB: ОСВ по счетам ( в коде. Словари синонимов — `rules/*.yaml`. Фикстуры `../fixtures/osv/**` — регрессия, не спецификация формата: новый формат = новая фикстура + синоним, не новый `if`. +## Правила репозитория +- `api/arm_statements/` — копия пакета `arm-statements`, напрямую не править: обновление — `../docs/scripts/sync-statements.sh` + (`--in-place` в PR фичи), свежесть — `make statements-check` (в `check-full`). Словари `api/rules/statement_*.yaml` + сервиса остаются до плана 4. + ## Тесты - property-тесты инвариантов (§1.4) на всех файлах `../fixtures/osv/**` и `../fixtures/statements-xlsx/**`; для пакета ДКБ `../fixtures/osv-dkb/**` — `tests/fixtures/test_osv_dkb.py`: ожидаемые `needs_check` — манифест diff --git a/Makefile b/Makefile index 3ce5026..ae46c50 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ VENV := api/.venv BIN := $(CURDIR)/$(VENV)/bin COMPOSE_FILE ?= ../docs/dev/docker-compose.yml -.PHONY: venv lint test test-integration test-fixtures golden-update golden-check check docker-build check-full up +.PHONY: venv lint test test-integration test-fixtures golden-update golden-check check docker-build check-full up statements-check # Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их venv: @@ -14,7 +14,7 @@ venv: lint: cd api && $(BIN)/ruff check . cd api && $(BIN)/ruff format --check . - cd api && $(BIN)/mypy src + cd api && $(BIN)/mypy src arm_statements test: cd api && $(BIN)/pytest -m "not integration" @@ -42,8 +42,17 @@ docker-build: docker build -t tabular-parser . # Полная проверка перед PR: быстрые проверки, затем NATS/MinIO из compose (make up), затем образ -check-full: check test-integration docker-build +check-full: check statements-check test-integration docker-build # Только инфраструктура, нужная сервису (без arm-core): NATS и MinIO; postgres — для общей среды compose up: docker compose -f $(COMPOSE_FILE) up -d --wait postgres nats minio + +# Свежесть копии api/arm_statements/ (../docs/dev/checks.md): 0 — синхронна; 10 — отстала или перечень кодов в docs +# новее (цель зелёная, предупреждение вписать в описание PR); 20 и 2 — красная. Читает ../docs и ../arm-statements, +# поэтому только в check-full, не в check +ARM_KA_DOCS ?= ../docs +statements-check: + @rc=0; $(ARM_KA_DOCS)/scripts/sync-statements.sh --check --host-dir . || rc=$$?; \ + if [ $$rc -eq 10 ]; then echo "statements-check: ПРЕДУПРЕЖДЕНИЕ — впишите в описание PR"; \ + elif [ $$rc -ne 0 ]; then exit $$rc; fi diff --git a/api/pyproject.toml b/api/pyproject.toml index 28a74f1..1e463a1 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -8,7 +8,7 @@ target-version = "py311" select = ["E", "F", "I", "UP", "B", "PL"] [tool.ruff.lint.isort] -known-first-party = ["src"] +known-first-party = ["src", "arm_statements"] [tool.mypy] python_version = "3.11" @@ -38,3 +38,19 @@ ignore_missing_imports = true [[tool.mypy.overrides]] module = ["src.parser", "src.parser.*"] disallow_untyped_defs = true + +# Копия общего кода (sync-statements, не править) — в строгом режиме, как в репозитории arm-statements. +# `strict = true` в overrides mypy (2.x) применяет глобально, а не к модулю, поэтому флаги семейства strict перечислены явно. +[[tool.mypy.overrides]] +module = ["arm_statements", "arm_statements.*"] +disallow_any_generics = true +disallow_subclassing_any = true +disallow_untyped_calls = true +disallow_untyped_defs = true +disallow_incomplete_defs = true +disallow_untyped_decorators = true +warn_return_any = true +warn_unused_ignores = true +no_implicit_reexport = true +strict_equality = true +extra_checks = true diff --git a/api/pytest.ini b/api/pytest.ini index cf530e1..5f08f31 100644 --- a/api/pytest.ini +++ b/api/pytest.ini @@ -2,6 +2,7 @@ pythonpath = . testpaths = tests + arm_statements/tests python_files = test_*.py tests*.py diff --git a/api/requirements-dev.txt b/api/requirements-dev.txt index 043c04c..59f37d2 100644 --- a/api/requirements-dev.txt +++ b/api/requirements-dev.txt @@ -1,8 +1,10 @@ # Инструменты разработки и проверок. Платформенные зависимости — в requirements.txt (не меняем). # Нижние границы мажорных версий: воспроизводимо, но без конфликта с пинами платформы. +# ruff, mypy, types-PyYAML — те же версии, что в arm-statements (копия пакета проверяется конфигом хоста) -r requirements.txt -ruff>=0.8 -mypy>=1.13 +ruff==0.16.10 +mypy==2.4.0 +types-PyYAML==6.0.12.20260906 pytest>=8.3 pytest-asyncio>=0.24 pytest-env>=1.1