"""Celery application setup.""" from celery import Celery from celery.schedules import crontab from app.core.config import settings if settings.redis_sentinel_enabled and settings.redis_sentinel_urls: sentinel_broker = ";".join(settings.redis_sentinel_urls) celery_app = Celery( "dreamweaver", broker=sentinel_broker, backend=sentinel_broker, ) celery_app.conf.broker_transport_options = { "master_name": settings.redis_sentinel_master_name, "sentinel_kwargs": { "password": settings.redis_sentinel_password or None, "socket_timeout": settings.redis_sentinel_socket_timeout, }, } celery_app.conf.result_backend_transport_options = { "master_name": settings.redis_sentinel_master_name, "sentinel_kwargs": { "password": settings.redis_sentinel_password or None, "socket_timeout": settings.redis_sentinel_socket_timeout, }, } else: celery_app = Celery( "dreamweaver", broker=settings.celery_broker_url, backend=settings.celery_result_backend, ) celery_app.conf.update( task_track_started=True, task_serializer="json", accept_content=["json"], result_serializer="json", timezone="Asia/Shanghai", enable_utc=True, beat_schedule={ "check_push_notifications": { "task": "app.tasks.push_notifications.check_push_notifications", "schedule": crontab(minute="*/15"), }, "prune_expired_memories": { "task": "app.tasks.memory.prune_memories_task", "schedule": crontab(minute="0", hour="3"), # Daily at 03:00 }, }, ) celery_app.autodiscover_tasks(["app.tasks"])