Initial commit: InviteMe production redesign

This commit is contained in:
InviteMe Developer
2026-09-01 11:04:21 +03:00
commit 6060c22ff3
71 changed files with 6912 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
from types import SimpleNamespace
from flask import current_app
from redis import Redis
from rq import Queue
from rq.job import JobStatus
ACTIVE_JOB_STATUSES = {JobStatus.QUEUED, JobStatus.STARTED, JobStatus.DEFERRED, JobStatus.SCHEDULED}
def get_task_queue():
redis_url = current_app.config.get("TASK_QUEUE_REDIS_URL", "")
if not redis_url:
raise RuntimeError("Очередь фоновых задач не настроена")
connection = Redis.from_url(redis_url, socket_connect_timeout=3, socket_timeout=3)
return Queue("inviteme", connection=connection, default_timeout=3600)
def enqueue_event_invitations(event_id, initiated_by_id):
if current_app.config.get("TASK_QUEUE_EAGER"):
from app.tasks import send_event_invitations_in_context
result = send_event_invitations_in_context(event_id, initiated_by_id)
return SimpleNamespace(id="eager", result=result), True
queue = get_task_queue()
job_id = f"event-invitations-{event_id}"
existing = queue.fetch_job(job_id)
if existing and existing.get_status(refresh=True) in ACTIVE_JOB_STATUSES:
return existing, False
if existing:
existing.delete()
return queue.enqueue(
"app.tasks.send_event_invitations", event_id, initiated_by_id,
job_id=job_id, job_timeout=3600, result_ttl=3600, failure_ttl=86400,
), True