build: копия arm_statements в линтерах и тестах, statements-check в check-full (#52)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-18 19:42:12 +04:00
parent 412a322b9d
commit f5ced4177e
5 changed files with 39 additions and 6 deletions

View File

@ -13,6 +13,11 @@ Stateless-сервис разбора XLS/XLSX/XLSB: ОСВ по счетам (
в коде. Словари синонимов — `rules/*.yaml`. Фикстуры `../fixtures/osv/**` — регрессия, не спецификация формата: в коде. Словари синонимов — `rules/*.yaml`. Фикстуры `../fixtures/osv/**` — регрессия, не спецификация формата:
новый формат = новая фикстура + синоним, не новый `if`. новый формат = новая фикстура + синоним, не новый `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/**`; для пакета ДКБ - property-тесты инвариантов (§1.4) на всех файлах `../fixtures/osv/**` и `../fixtures/statements-xlsx/**`; для пакета ДКБ
`../fixtures/osv-dkb/**` — `tests/fixtures/test_osv_dkb.py`: ожидаемые `needs_check` — манифест `../fixtures/osv-dkb/**` — `tests/fixtures/test_osv_dkb.py`: ожидаемые `needs_check` — манифест

View File

@ -3,7 +3,7 @@ VENV := api/.venv
BIN := $(CURDIR)/$(VENV)/bin BIN := $(CURDIR)/$(VENV)/bin
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml 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_* вне банка недоступны — пропускаем их # Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их
venv: venv:
@ -14,7 +14,7 @@ venv:
lint: lint:
cd api && $(BIN)/ruff check . cd api && $(BIN)/ruff check .
cd api && $(BIN)/ruff format --check . cd api && $(BIN)/ruff format --check .
cd api && $(BIN)/mypy src cd api && $(BIN)/mypy src arm_statements
test: test:
cd api && $(BIN)/pytest -m "not integration" cd api && $(BIN)/pytest -m "not integration"
@ -42,8 +42,17 @@ docker-build:
docker build -t tabular-parser . docker build -t tabular-parser .
# Полная проверка перед PR: быстрые проверки, затем NATS/MinIO из compose (make up), затем образ # Полная проверка перед 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 # Только инфраструктура, нужная сервису (без arm-core): NATS и MinIO; postgres — для общей среды compose
up: up:
docker compose -f $(COMPOSE_FILE) up -d --wait postgres nats minio 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

View File

@ -8,7 +8,7 @@ target-version = "py311"
select = ["E", "F", "I", "UP", "B", "PL"] select = ["E", "F", "I", "UP", "B", "PL"]
[tool.ruff.lint.isort] [tool.ruff.lint.isort]
known-first-party = ["src"] known-first-party = ["src", "arm_statements"]
[tool.mypy] [tool.mypy]
python_version = "3.11" python_version = "3.11"
@ -38,3 +38,19 @@ ignore_missing_imports = true
[[tool.mypy.overrides]] [[tool.mypy.overrides]]
module = ["src.parser", "src.parser.*"] module = ["src.parser", "src.parser.*"]
disallow_untyped_defs = true 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

View File

@ -2,6 +2,7 @@
pythonpath = . pythonpath = .
testpaths = testpaths =
tests tests
arm_statements/tests
python_files = python_files =
test_*.py test_*.py
tests*.py tests*.py

View File

@ -1,8 +1,10 @@
# Инструменты разработки и проверок. Платформенные зависимости — в requirements.txt (не меняем). # Инструменты разработки и проверок. Платформенные зависимости — в requirements.txt (не меняем).
# Нижние границы мажорных версий: воспроизводимо, но без конфликта с пинами платформы. # Нижние границы мажорных версий: воспроизводимо, но без конфликта с пинами платформы.
# ruff, mypy, types-PyYAML — те же версии, что в arm-statements (копия пакета проверяется конфигом хоста)
-r requirements.txt -r requirements.txt
ruff>=0.8 ruff==0.16.10
mypy>=1.13 mypy==2.4.0
types-PyYAML==6.0.12.20260906
pytest>=8.3 pytest>=8.3
pytest-asyncio>=0.24 pytest-asyncio>=0.24
pytest-env>=1.1 pytest-env>=1.1