"""Celery application instance for the Chrysopedia pipeline. Usage: celery -A worker worker --loglevel=info celery -A worker worker --beat --loglevel=info (with Beat scheduler) """ from celery import Celery from celery.schedules import crontab from config import get_settings settings = get_settings() celery_app = Celery( "chrysopedia", broker=settings.redis_url, backend=settings.redis_url, ) celery_app.conf.update( task_serializer="json", result_serializer="json", accept_content=["json"], timezone="UTC", enable_utc=True, task_track_started=True, task_acks_late=True, worker_prefetch_multiplier=1, ) # Import pipeline.stages so that @celery_app.task decorators register tasks. # This import must come after celery_app is defined. import pipeline.stages # noqa: E402, F401 import tasks.notifications # noqa: E402, F401 # ── Celery Beat schedule ───────────────────────────────────────────────────── celery_app.conf.beat_schedule = { "send-digest-emails": { "task": "tasks.notifications.send_digest_emails", "schedule": crontab(hour=9, minute=0), # daily at 09:00 UTC }, }