Первоначальная версия VidConf
This commit is contained in:
40
backend/services/invitations_producer.py
Normal file
40
backend/services/invitations_producer.py
Normal file
@@ -0,0 +1,40 @@
|
||||
"""Постановка задачи `send_invitations` в очередь Celery.
|
||||
|
||||
Отправляет задачу по имени через голый Celery-клиент (`broker_url` без
|
||||
`backend`) — тот же приём, что `services/pipeline_producer.py`: backend не
|
||||
импортирует пакет `workers` (инвариант разделения слоёв, см. докстринг
|
||||
`pipeline_producer.py`). Задача регистрируется и обрабатывается в
|
||||
`workers/tasks/invitations.py` (блок C).
|
||||
"""
|
||||
|
||||
import uuid
|
||||
|
||||
from celery import Celery
|
||||
|
||||
from core.config import get_settings
|
||||
|
||||
SEND_INVITATIONS_TASK_NAME = "workers.tasks.invitations.send_invitations"
|
||||
NOTIFY_QUEUE = "notify"
|
||||
|
||||
|
||||
def enqueue_invitations(conference_id: uuid.UUID, *, emails: list[str] | None = None) -> None:
|
||||
"""Поставить в очередь `notify` рассылку .ics-приглашений на конференцию `conference_id`.
|
||||
|
||||
`emails=None` — получатели по умолчанию (владелец + для закреплённых
|
||||
участники прошлых сеансов, см. `workers/tasks/invitations.py`); явный
|
||||
список — ручная рассылка администратором. Задача сама идемпотентна
|
||||
(журнал `email_deliveries(kind='invitation')` без unique, повтор
|
||||
постановки максимум продублирует письмо).
|
||||
|
||||
Очередь передаётся явно (`queue=NOTIFY_QUEUE`): этот клиент — отдельный
|
||||
экземпляр `Celery` без `task_routes` из `workers/celery_app.py` (тот
|
||||
маршрут действует только внутри процесса воркера, который его
|
||||
импортирует), поэтому без явного параметра задача ушла бы в дефолтную
|
||||
очередь `celery` — тот же приём, что `TRANSCRIPTION_QUEUE` в
|
||||
`pipeline_producer.py`.
|
||||
"""
|
||||
settings = get_settings()
|
||||
client = Celery("vidconf-producer", broker=settings.redis_url)
|
||||
client.send_task(
|
||||
SEND_INVITATIONS_TASK_NAME, args=[str(conference_id), emails], queue=NOTIFY_QUEUE
|
||||
)
|
||||
Reference in New Issue
Block a user