fix(parcels): _parse_floors handle int (post-migration #169) #176

Merged
lekss361 merged 4 commits from fix/parse-floors-int into main 2026-05-15 12:08:17 +00:00
Showing only changes of commit 9197a539e9 - Show all commits

View file

@ -639,16 +639,23 @@ _COST_PER_M2_MIN = 1000 # ₽/м² — ниже скорее всего оши
_COST_PER_M2_MAX = 500_000 # ₽/м² — выше скорее всего outlier
def _parse_floors(raw: str | None) -> int | None:
"""cad_buildings.floors хранится TEXT (могут быть диапазоны '1-2', '5-7').
def _parse_floors(raw: str | int | None) -> int | None:
"""cad_buildings.floors — после schema migration #169 теперь INT,
но historically мог быть TEXT с диапазоном '5-7'. Поддерживаем оба
для backwards-compat с legacy data + tests.
Возвращаем верхнюю границу (более консервативный сосед-высотка).
NB: `isdigit()` намеренно фильтрует malformed parts типа "5а-7"; для
multi-range "1-2-3" возвращается max(1,2,3)=3 (acceptable degradation).
"""
if raw is None or raw == "":
return None
# Post-migration: INT column → fast path
if isinstance(raw, int):
return raw if raw > 0 else None
raw = raw.strip()
if not raw:
return None
raw = raw.strip()
# range like "5-7" → 7
if "-" in raw:
parts = raw.split("-")