Per audit batch #127 P3 god objects (issue #134). Split layout: - celery_app.py: 270 → 35 lines (config only) - beat_schedule.py: 207 lines NEW (DB-driven + fallback + hardcoded) - lifecycle.py: 168 lines NEW (worker_process_init + worker_ready handlers) No business logic changes — move-only structural refactor. Public API (celery_app.conf.beat_schedule) unchanged. Verify: - beat keys: kn-region-66, objective_sync, refresh-ekb-districts-medians, nspd-geo-zombie-cleanup, poi-sync-weekly, noise-sync-weekly - ruff + ruff-format clean - AST parse OK Vault: Module_Beat_Schedule + Module_Worker_Lifecycle NEW; Module_Celery_App updated. Closes #134 Refs: #127 Co-authored-by: lekss361 <claudestars@proton.me>
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""Celery app — single source of truth для Celery configuration.
|
|
|
|
Beat schedule build → app/workers/beat_schedule.py.
|
|
Worker lifecycle hooks (process_init, worker_ready) → app/workers/lifecycle.py.
|
|
"""
|
|
|
|
import logging
|
|
|
|
from celery import Celery
|
|
|
|
from app.core.config import settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
celery_app = Celery(
|
|
"gendesign",
|
|
broker=settings.redis_url,
|
|
backend=settings.redis_url,
|
|
include=[
|
|
"app.workers.tasks.scrape_kn",
|
|
"app.workers.tasks.refresh_analytics",
|
|
"app.workers.tasks.scrape_objective",
|
|
"app.workers.tasks.objective_etl",
|
|
"app.workers.tasks.nspd_geo",
|
|
"app.workers.tasks.nspd_sync",
|
|
"app.workers.tasks.poi_sync",
|
|
"app.workers.tasks.noise_sync",
|
|
"app.workers.tasks.pzz_sync",
|
|
],
|
|
)
|
|
celery_app.conf.timezone = "Europe/Moscow"
|
|
|
|
# Apply beat schedule (DB → fallback → hardcoded entries)
|
|
from app.workers.beat_schedule import build_beat_schedule # noqa: E402
|
|
|
|
celery_app.conf.beat_schedule = build_beat_schedule()
|
|
|
|
# Register lifecycle hooks (import for side-effect — signal decorator registration)
|
|
from app.workers import lifecycle # noqa: E402, F401
|