♻️ refactor: split celery_app.py — extract beat_schedule + lifecycle modules #134

Closed
opened 2026-05-14 21:00:13 +00:00 by lekss361 · 0 comments
lekss361 commented 2026-05-14 21:00:13 +00:00 (Migrated from github.com)

Per audit batch #127 P3 god objects.

backend/app/workers/celery_app.py (~270 lines after PR #121) смешивает 3 concerns:

  1. Celery app config (broker, timezone, includes)
  2. Beat schedule building (DB-driven + fallback + hardcoded entries) — ~150 lines
  3. Worker lifecycle hooks (worker_process_init engine dispose)

Module-level DB queries в _build_beat_schedule() ломают import-time если DB unavailable.

Split target

  • workers/celery_app.py — ТОЛЬКО celery_app = Celery(...) + config (timezone, includes). Tiny.
  • workers/beat_schedule.py_build_beat_schedule_from_db(), _build_beat_schedule_fallback(), _build_beat_schedule(), _parse_cron(), _default_regions(), TASK_MAP. Imported by celery_app at end of module.
  • workers/lifecycle.py_reset_db_connections() worker_process_init handler. Imported by celery_app for side-effect (decorator registration).

Acceptance

  • celery_app.py ≤80 lines
  • beat_schedule.py ~150 lines, no Celery imports apart from crontab
  • lifecycle.py ~30 lines
  • uv run celery -A app.workers.celery_app beat --loglevel=debug стартует без ошибок (smoke test)
  • worker/beat re-deploy не сломан
  • existing tests pass

Refs: #127

Per audit batch #127 P3 god objects. `backend/app/workers/celery_app.py` (~270 lines after PR #121) смешивает 3 concerns: 1. Celery app config (broker, timezone, includes) 2. Beat schedule building (DB-driven + fallback + hardcoded entries) — ~150 lines 3. Worker lifecycle hooks (worker_process_init engine dispose) Module-level DB queries в `_build_beat_schedule()` ломают import-time если DB unavailable. ## Split target - `workers/celery_app.py` — ТОЛЬКО `celery_app = Celery(...)` + config (timezone, includes). Tiny. - `workers/beat_schedule.py` — `_build_beat_schedule_from_db()`, `_build_beat_schedule_fallback()`, `_build_beat_schedule()`, `_parse_cron()`, `_default_regions()`, TASK_MAP. Imported by celery_app at end of module. - `workers/lifecycle.py` — `_reset_db_connections()` worker_process_init handler. Imported by celery_app for side-effect (decorator registration). ## Acceptance - [ ] celery_app.py ≤80 lines - [ ] beat_schedule.py ~150 lines, no Celery imports apart from `crontab` - [ ] lifecycle.py ~30 lines - [ ] `uv run celery -A app.workers.celery_app beat --loglevel=debug` стартует без ошибок (smoke test) - [ ] worker/beat re-deploy не сломан - [ ] existing tests pass Refs: #127
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#134
No description provided.