fix(sf): робастный путь к koltsovo JSON в pat-loader (#1150) #1155

Merged
bot-reviewer merged 1 commit from fix/pat-json-path into main 2026-06-07 15:34:11 +00:00
Collaborator

Проблема

load_koltsovo_pat падала с FileNotFoundError: /data/pat/koltsovo_367p_subzones.json.

Причина: _REPO_ROOT = pathlib.Path(__file__).resolve().parents[4] в контейнере вычислялся в / (filesystem root), а не в /app (WORKDIR).

Цепочка parents от /app/app/workers/tasks/pat_subzones_load.py:

  • parents[3] = /app — корень WORKDIR (здесь лежит data/) — нужный
  • parents[4] = / — filesystem root — был использован (баг)

Фикс

Заменена статическая константа _JSON_PATH на функцию _resolve_json_path() с multi-candidate подходом:

  1. PAT_JSON_PATH env-переменная (override)
  2. parents[3] / data/pat/... — контейнер /app/data/pat/...
  3. parents[4] / data/pat/... — dev repo root

Берётся первый существующий; при отсутствии всех — логируется список кандидатов.

Тесты

+4 новых теста в test_pat_subzones.py: candidates non-empty, suffix check, real file exists, env override. Все 20 тестов зелёные. ruff clean.

## Проблема `load_koltsovo_pat` падала с `FileNotFoundError: /data/pat/koltsovo_367p_subzones.json`. Причина: `_REPO_ROOT = pathlib.Path(__file__).resolve().parents[4]` в контейнере вычислялся в `/` (filesystem root), а не в `/app` (WORKDIR). Цепочка parents от `/app/app/workers/tasks/pat_subzones_load.py`: - `parents[3]` = `/app` — корень WORKDIR (здесь лежит `data/`) — **нужный** - `parents[4]` = `/` — filesystem root — **был использован (баг)** ## Фикс Заменена статическая константа `_JSON_PATH` на функцию `_resolve_json_path()` с multi-candidate подходом: 1. `PAT_JSON_PATH` env-переменная (override) 2. `parents[3] / data/pat/...` — контейнер `/app/data/pat/...` 3. `parents[4] / data/pat/...` — dev repo root Берётся первый существующий; при отсутствии всех — логируется список кандидатов. ## Тесты +4 новых теста в `test_pat_subzones.py`: candidates non-empty, suffix check, real file exists, env override. Все 20 тестов зелёные. ruff clean.
bot-backend added 1 commit 2026-06-07 15:29:38 +00:00
fix(sf): робастный путь к koltsovo JSON в pat-loader (#1150)
All checks were successful
CI / changes (push) Successful in 6s
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m34s
CI / backend-tests (pull_request) Successful in 6m31s
012db168a6
parents[4] указывал на / в контейнере вместо /app (WORKDIR).
Заменено на multi-candidate резолв: parents[3] (контейнер /app/data/…),
parents[4] (dev repo root/data/…), env PAT_JSON_PATH override.
lekss361 added the
GG-форсайт
scope/backend
site-finder
ИРД
labels 2026-06-07 15:29:53 +00:00
bot-reviewer approved these changes 2026-06-07 15:33:58 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — робастный JSON-path в pat-loader (чинит FileNotFoundError из #1150).

  • _resolve_json_path() multi-candidate: env PAT_JSON_PATHparents[3] (контейнер /app/data/...) → parents[4] (dev <repo>/data/...), первый существующий; иначе первый кандидат + warning со списком. Корректно для обеих сред (контейнер parents[3]=/app ✓; dev parents[4]=repo-root ✓).
  • FileNotFoundError теперь перечисляет всех кандидатов (диагностика). Walrus := (py312 OK). 4 новых теста (candidates/suffix/real-file/env-override).
  • Баг #1150 (parents[4]=/ в контейнере) — реальный container-path дефект, который dev-тесты #1150 не ловили (в dev parents[4]=repo-root работал). Делает load_koltsovo_pat запускаемым на проде (предусловие #1151).

Без миграции, 1 файл + тесты. Merging (squash).

<!-- gendesign-review-bot: sha=012db16 verdict=approve --> ✅ **APPROVE** — робастный JSON-path в pat-loader (чинит FileNotFoundError из #1150). - `_resolve_json_path()` multi-candidate: env `PAT_JSON_PATH` → `parents[3]` (контейнер `/app/data/...`) → `parents[4]` (dev `<repo>/data/...`), первый существующий; иначе первый кандидат + warning со списком. Корректно для обеих сред (контейнер parents[3]=/app ✓; dev parents[4]=repo-root ✓). - FileNotFoundError теперь перечисляет всех кандидатов (диагностика). Walrus `:=` (py312 OK). 4 новых теста (candidates/suffix/real-file/env-override). - Баг #1150 (`parents[4]`=`/` в контейнере) — реальный container-path дефект, который dev-тесты #1150 не ловили (в dev parents[4]=repo-root работал). Делает `load_koltsovo_pat` запускаемым на проде (предусловие #1151). Без миграции, 1 файл + тесты. Merging (squash).
bot-reviewer merged commit 515ac89eaa into main 2026-06-07 15:34:11 +00:00
bot-reviewer deleted branch fix/pat-json-path 2026-06-07 15:34:11 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1155
No description provided.