gendesign/backend/app/workers/tasks
Light1YT 1db488ba99 feat(workers): supply-layers refresh task + weekly beat (#950 Step 5)
Celery task tasks.supply_layers_refresh computes L1/L2/L3 supply layers per
Sverdlovsk district via supply_layers.compute_all_layers and UPSERTs into
supply_layers (m.125) on uq_supply_layers_logical, updating all mutable cols
(units/area/expected_online_date/confidence/method/computed_at), never the key.
Coherent single date.today() snapshot_date across the batch; per-row SAVEPOINT
(begin_nested) so a bad row/district can't abort the weekly batch; per-district
guard. District set is data-driven (UNION of objective_lots.district and
domrf_kn_objects.district_name region_cd=66), not hardcoded.

Registered weekly Mon 06:00 МСК (after scrape_kn 04:15 that refreshes free_flats,
the L2 source). Adds the task module to celery_app include (beat resolves by
name). 11 unit tests asserting the ON CONFLICT contract + savepoint + coherent
snapshot.
2026-06-03 01:45:30 +05:00
..
__init__.py add interactive parser of наш.дом.рф ЖК+flats with stealth Playwright 2026-04-27 17:58:40 +03:00
cbr_macro_sync.py feat(site-finder): live CBR key-rate scraper → macro_indicator (#945 PR B) (#964) 2026-06-02 19:05:57 +00:00
ekburg_permits_sync.py feat(permits): ЕКБ РНС/РВЭ xlsx parser + schema + ETL (#105 PR A) (#211) 2026-05-16 11:41:21 +00:00
noise_sync.py feat(site-finder): v3.2 — noise + air quality + wind analytics 2026-05-11 20:42:37 +03:00
nspd_denorm_backfill.py feat(nspd): denorm nspd_parcels + nspd_buildings tables (#94 PR3 of 4) 2026-05-16 20:20:03 +03:00
nspd_geo.py fix(nspd-geo): replace f-string bulk INSERT with parametrized batch execute (#123) 2026-05-14 23:29:12 +03:00
nspd_sync.py fix(#231): address re-review blockers — per-instance semaphore + time_limit + test mocks 2026-05-17 10:13:34 +03:00
objective_etl.py fix(worker): port objective_etl from psycopg2 → psycopg v3 2026-05-11 12:07:57 +03:00
poi_sync.py debug(poi-sync): DB breadcrumbs to nspd_geo_log for silent-fail diagnosis 2026-05-11 18:37:43 +03:00
pzz_sync.py feat(site-finder): ПЗЗ territorial zones from Rosreestr PKK6 + zoning in analyze 2026-05-11 21:51:51 +03:00
refresh_analytics.py fix(scrape): SQLAlchemy text() парсил ':00:' regex как named-param 2026-04-30 23:16:11 +03:00
refresh_quarter_price_index.py feat(db): quarter_price_index FDW foreign table + monthly refresh (Refs #762) (#797) 2026-05-30 17:16:28 +00:00
scrape_cadastre.py perf(cadastre): freshness skip + grid-walk heartbeat + log noise reduction (#187) 2026-05-15 23:02:37 +03:00
scrape_kn.py fix(scraper): диагностируем «кнопка не работает» — Redis lock + task_received log 2026-04-28 23:17:42 +03:00
scrape_kn_catalog_objects.py feat(22d): catalog scraper — skip-today filter + force flag (#348) 2026-05-17 23:15:22 +00:00
scrape_objective.py fix(scrape-objective): stream-parse lots_pf via ijson to avoid OOM (#315) 2026-05-17 16:37:30 +00:00
supply_layers_refresh.py feat(workers): supply-layers refresh task + weekly beat (#950 Step 5) 2026-06-03 01:45:30 +05:00