51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
"""Celery task: импорт ПЗЗ территориальных зон ЕКБ из Росреестр PKK6."""
|
|
|
|
import logging
|
|
|
|
from sqlalchemy import text
|
|
|
|
from app.workers.celery_app import celery_app
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _log_breadcrumb(level: str, message: str) -> None:
|
|
"""Записать строку в nspd_geo_log (job_id=NULL, stage='pzz_sync')."""
|
|
try:
|
|
from app.core.db import SessionLocal
|
|
|
|
db = SessionLocal()
|
|
try:
|
|
db.execute(
|
|
text(
|
|
"INSERT INTO nspd_geo_log (job_id, level, stage, message) "
|
|
"VALUES (NULL, :lvl, 'pzz_sync', :msg)"
|
|
),
|
|
{"lvl": level, "msg": message[:500]},
|
|
)
|
|
db.commit()
|
|
finally:
|
|
db.close()
|
|
except Exception as e:
|
|
logger.warning("pzz_sync breadcrumb failed: %s", e)
|
|
|
|
|
|
@celery_app.task(name="tasks.pzz_sync.sync_pzz_zones_ekb", queue="celery")
|
|
def sync_pzz_zones_ekb() -> dict:
|
|
"""Импорт ПЗЗ территориальных зон ЕКБ из Росреестр PKK6.
|
|
|
|
Запускается вручную через POST /api/v1/admin/scrape/pzz-sync.
|
|
Persistent breadcrumbs в nspd_geo_log (stage='pzz_sync') для диагностики.
|
|
"""
|
|
_log_breadcrumb("info", "task started")
|
|
try:
|
|
from app.services.site_finder.pzz_loader import sync_pzz_zones_to_db
|
|
|
|
result = sync_pzz_zones_to_db()
|
|
logger.info("pzz_sync done: %s", result)
|
|
_log_breadcrumb("info", f"done: {result}")
|
|
return result
|
|
except Exception as e:
|
|
logger.exception("pzz_sync failed: %s", e)
|
|
_log_breadcrumb("error", f"{type(e).__name__}: {e}")
|
|
raise
|