[sf] parcel_ird_overlaps: расширить except + тест ProgrammingError (при D9b wiring) #1095

Closed
opened 2026-06-06 19:01:22 +00:00 by bot-reviewer · 1 comment
Collaborator

Follow-up из PR #1092 (parcel_ird_overlaps read-side, #1067 D9a). Два advisory-минора — применить при D9b-wiring в analyze (когда появится реальный caller на parcels.py).

Файл: backend/app/services/site_finder/ird_overlay_lookup.py

1. Расширить except для malformed-WKT (robustness)

except (OperationalError, ProgrammingError) as exc:

ST_GeomFromText на malformed WKT даёт PostGIS ERROR → SQLAlchemy DataError/InternalError, которые НЕ в этом except → analyze упадёт. parcel_wkt системно-генерируемый (геометрия участка, не user free-text) → low-risk сейчас, но при wiring в analyge graceful-degrade намерение требует:

except (OperationalError, ProgrammingError, DataError) as exc:

(from sqlalchemy.exc import DataError). NB: sibling quarter_dump_lookup.py использует те же 2 класса — можно расширить оба синхронно для консистентности.

2. Тест на ProgrammingError

test_graceful_when_table_missing покрывает только OperationalError. Реальный класс при не-задеплоенной ird_overlays = ProgrammingError (UndefinedTable). Добавить параметризацию/второй тест на ProgrammingError (+ DataError если #1 принят).

Acceptance

  • malformed WKT → пустой результат, analyze не падает.
  • тесты покрывают ProgrammingError (+ DataError).
  • pytest tests/services/test_ird_overlay_lookup.py green.
Follow-up из PR #1092 (parcel_ird_overlaps read-side, #1067 D9a). Два advisory-минора — применить при D9b-wiring в analyze (когда появится реальный caller на `parcels.py`). Файл: `backend/app/services/site_finder/ird_overlay_lookup.py` ## 1. Расширить except для malformed-WKT (robustness) ```python except (OperationalError, ProgrammingError) as exc: ``` `ST_GeomFromText` на malformed WKT даёт PostGIS ERROR → SQLAlchemy `DataError`/`InternalError`, которые НЕ в этом except → analyze упадёт. `parcel_wkt` системно-генерируемый (геометрия участка, не user free-text) → low-risk сейчас, но при wiring в analyge graceful-degrade намерение требует: ```python except (OperationalError, ProgrammingError, DataError) as exc: ``` (`from sqlalchemy.exc import DataError`). NB: sibling `quarter_dump_lookup.py` использует те же 2 класса — можно расширить оба синхронно для консистентности. ## 2. Тест на ProgrammingError `test_graceful_when_table_missing` покрывает только `OperationalError`. Реальный класс при не-задеплоенной `ird_overlays` = `ProgrammingError` (UndefinedTable). Добавить параметризацию/второй тест на `ProgrammingError` (+ `DataError` если #1 принят). ## Acceptance - malformed WKT → пустой результат, analyze не падает. - тесты покрывают ProgrammingError (+ DataError). - `pytest tests/services/test_ird_overlay_lookup.py` green.
bot-reviewer added the
priority/p3
scope/backend
site-finder
labels 2026-06-06 19:01:26 +00:00
Author
Collaborator
  • scope: planning_lookup.py (merged PR #1105, #1085) имеет идентичный паттерн — parcel_planning_overlaps ловит только (OperationalError, ProgrammingError), не DataError от malformed-WKT в ST_GeomFromText. Расширить except синхронно с ird_overlay_lookup (оба читают ST_GeomFromText(parcel_wkt)). Три *_lookup-модуля (ird_overlay / planning / + sibling quarter_dump) — один проход hardening.
+ scope: `planning_lookup.py` (merged PR #1105, #1085) имеет идентичный паттерн — `parcel_planning_overlaps` ловит только `(OperationalError, ProgrammingError)`, не `DataError` от malformed-WKT в `ST_GeomFromText`. Расширить except синхронно с `ird_overlay_lookup` (оба читают `ST_GeomFromText(parcel_wkt)`). Три `*_lookup`-модуля (ird_overlay / planning / + sibling quarter_dump) — один проход hardening.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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#1095
No description provided.