fix(parcels): _parse_floors handle int (post-migration #169) #176
1 changed files with 10 additions and 3 deletions
|
|
@ -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("-")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue