gendesign/backend/app
bot-backend d43dd7d257
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m0s
CI / backend-tests (pull_request) Successful in 17m12s
fix(ptica): отказ слоя НСПД больше не выглядит как «здесь ничего нет»
get_features_in_bbox_grid глушил ЛЮБОЕ исключение ячейки (warning + continue)
и возвращал []. Бан IP по WAF или падение слоя целиком становились
неотличимы от честного пустого ответа.

Замер на проде: nspd_quarter_dumps — 669 строк, у 124 territorial_zones_count=0,
и у 50 из них соседний legacy-слой данные всё-таки нашёл. То есть это не
«зон нет», а «мы не узнали».

Правка — зеркало уже исправленного близнеца в
app/scrapers/nspd_bulk_client.get_features_in_bbox_grid (Issue #252-mirror):
- NspdBulkWafError → немедленный re-raise (продолжать обход = углублять бан);
- NspdBulkServerError считаем отдельно; если 5xx были И ни одна ячейка не
  прошла — бросаем вместо ложного пустого;
- прочие (сетевые/parse) ошибки ячейки по-прежнему не валят обход.

get_riasurt_sverdl_in_bbox ловит NspdBulkServerError и сохраняет прежний
контракт («пустой list если слой пуст / упал»), но НЕ ловит WafError.
Ограничение записано в коде честно: наружу оттуда «упал» и «пусто»
по-прежнему неразличимы — у функции нет канала для флага.

Докстрока search_by_quarter обещала атомарность, которой не было; теперь
описывает, что бросается и где partial-success ВОЗМОЖЕН (#2464-H).

Тесты двусторонние: против main 2 из 3 падают
(waf_403_aborts_grid, all_cells_5xx_raises), третий — контроль
partial_5xx_keeps_data — зелёный с обеих сторон.

Один хунк форматирования — не мой: pre-commit ruff v0.7.4 против 0.15.12 (#2864).

Refs #2464
2026-08-13 21:59:30 +05:00
..
api fix(ptica): границы правдоподобия у средней цены конкурента (#2464-D) (#2863) 2026-08-13 11:57:03 +00:00
core refactor(security): убрать мёртвую проверку админского токена (#2775) (#2776) 2026-08-07 09:30:23 +00:00
models merge: resolve conflicts with main (#1660) into week-review-finish 2026-06-17 20:21:06 +03:00
observability fix(ptica): скраб ПДн перестаёт утекать то, что защищает + проводка проверяется поведением (#2753) (#2787) 2026-08-07 10:11:36 +00:00
resources/certs feat(site-finder): ЕЭСК-резервы городских ПС/ТП + тепло из ФГИС ФАС (#2119 B2) (#2165) 2026-07-02 16:44:57 +00:00
schemas fix(site-finder): true-counts вместо молча-усечённых len(list) в connection-points/utility (#2445-A1/A2) (#2450) 2026-07-05 18:54:49 +00:00
scrapers fix(week-review): backend-аудит v2 — 82 фиксов (#1660) 2026-06-17 17:13:38 +00:00
services fix(ptica): отказ слоя НСПД больше не выглядит как «здесь ничего нет» 2026-08-13 21:59:30 +05:00
templates fix(site-finder): 5 дефектов из боевого фидбека analyze (#1736 #1737 #1738 #1739 #1740) 2026-06-18 11:47:21 +05:00
workers docs(ptica): комментарии beat-расписания считали сдвиг МСК дважды (#2464-H) (#2866) 2026-08-13 12:26:44 +00:00
__init__.py init 2026-04-25 13:45:19 +03:00
main.py fix(ptica): скраб ПДн перестаёт утекать то, что защищает + проводка проверяется поведением (#2753) (#2787) 2026-08-07 10:11:36 +00:00