Utilitaires Celery¶
Le module Celery fournit une base de tâche tenant-aware et la détection automatique de disponibilité. Celery est optionnel — le système fonctionne sans lui (fallback synchrone).
Module : src.share_kernel.infrastructure.celery_utils
Détection de disponibilité¶
Vérifie si Celery est disponible et configuré. Le résultat est mis en cache.
Respect du paramètre
MULTITENANT['ASYNC_BACKEND']:'sync': retourne toujoursFalse'celery': retourneTrueou lèveConfigurationError'auto': auto-détecte, retourneFalsesi Celery n’est pas importable
Réinitialise le cache de détection. Pour les tests uniquement.
Tâche Celery Tenant-Aware¶
Retourne la classe de base
TenantAwareTasksi Celery est disponible.TenantAwareTaskpropage automatiquement le contexte tenant :Côté producteur (
apply_async) : injectetenant_iddans les headers de tâcheCôté worker (
__call__) : restaure le contexte tenant depuis les headers
from src.share_kernel.infrastructure.celery_utils import get_tenant_aware_task_base TenantAwareTask = get_tenant_aware_task_base() if TenantAwareTask: @app.task(base=TenantAwareTask) def process_invoice(invoice_id): # Le contexte tenant est automatiquement restauré tenant = get_current_tenant() invoice = Invoice.objects.get(id=invoice_id) ...
Dispatch d’événements¶
Dispatche un événement domaine comme tâche Celery si disponible.
- Returns:
Truesi dispatché via Celery,Falsesi fallback nécessaire.
Utilisé internement par le
EventBuspour le dispatch asynchrone.
Exécution avec fallback¶
Exécute une tâche Celery de manière asynchrone si possible, sinon de manière synchrone.
Tous les appels ``.delay()`` devraient passer par cette fonction pour un comportement de fallback cohérent.
from src.share_kernel.infrastructure.celery_utils import run_async_or_sync from src.module.tenant.tasks import provision_tenant_schema # Async si Celery disponible, sync sinon run_async_or_sync(provision_tenant_schema, tenant_slug="acme-corp")
Gère les erreurs de dispatch (
OperationalError, broker down) en exécutant la tâche de manière synchrone comme fallback.
Configuration Celery¶
Module : updo.celery
- updo.celery.setup_celery_app(app_name: str = 'updo') Celery | None[source]¶
Crée et configure l’application Celery.
Auto-découvre les tâches dans :
src.share_kernel.infrastructuresrc.module.tenantsrc.module.authorization
- Returns:
L’app Celery configurée, ou
Nonesi Celery n’est pas installé.
# updo/celery.py — déjà configuré from updo.celery import setup_celery_app app = setup_celery_app()
Tâches Celery de l’infrastructure¶
Module : src.share_kernel.infrastructure.tasks
Persiste un événement d’audit sans bloquer la requête HTTP. Enregistrée comme tâche Celery si disponible.