Fixes 500 on /trade-in/api/v1/geocode/reverse when Nominatim bans prod IP after geocode_missing batch. Cadastral lookup via main backend new endpoint /api/v1/cadastral/reverse is primary (37k buildings in ЕКБ, <10ms, no external API). Nominatim is fallback wrapped in try/except so HTTPStatusError no longer bubbles to FastAPI 500. Architecture: - main backend: new GET /api/v1/cadastral/reverse — cad_buildings nearest within radius, filters out гаражи/СНТ. Added to gendesign_shared network with alias gendesign-backend for cross-stack DNS. - tradein backend: _cadastral_reverse() calls main backend, returns None on any error. reverse_geocode prefers cadastral → falls back to Nominatim → returns None (endpoint becomes 404 instead of 500). Env: MAIN_BACKEND_URL=http://gendesign-backend:8000 in tradein prod. Tests: 7 new cases covering cadastral/nominatim/fallback/error paths.
41 lines
2 KiB
Python
41 lines
2 KiB
Python
"""Минимальный settings для standalone trade-in MVP."""
|
||
|
||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
||
|
||
# required — задаётся через env DATABASE_URL. Нет дефолта: fail-fast при старте
|
||
# если переменная не задана (C-3 security audit).
|
||
database_url: str
|
||
cors_origins: list[str] = ["http://localhost", "http://localhost:3000", "http://localhost:8080"]
|
||
environment: str = "dev"
|
||
|
||
# Geocoder
|
||
yandex_geocoder_key: str | None = None # 25K req/day free после регистрации
|
||
yandex_suggest_key: str | None = None # для frontend autocomplete (proxy через backend)
|
||
# для User-Agent в Nominatim (Nominatim Usage Policy)
|
||
contact_email: str = "erginrajpopxbe@outlook.com"
|
||
|
||
# Public URL — для QR-кода в PDF, shareable links, etc.
|
||
public_url: str = "http://127.0.0.1:8080"
|
||
|
||
# GlitchTip DSN — мониторинг ошибок (Sentry-совместимый). #396.
|
||
# Пусто = мониторинг выключен (dev). В prod — env GLITCHTIP_DSN из .env.runtime.
|
||
glitchtip_dsn: str | None = None
|
||
|
||
# Ключ шифрования для pgp_sym_encrypt (Cian session cookies).
|
||
# Задаётся через env COOKIE_ENCRYPTION_KEY. Пусто = шифрование не работает.
|
||
cookie_encryption_key: str = ""
|
||
|
||
# Redis URL для hot-cache (Phase 3.2). Задаётся через env REDIS_URL.
|
||
redis_url: str = "redis://localhost:6379/0"
|
||
|
||
# Main GenDesign backend URL — для cadastral reverse geocode (cad_buildings).
|
||
# В prod: http://gendesign-backend:8000 (network alias в docker-compose.prod.yml).
|
||
# Пусто = cadastral lookup пропускается, используется только Nominatim.
|
||
main_backend_url: str | None = None
|
||
|
||
|
||
settings = Settings()
|