angrybeanie_wagtail/env/lib/python3.12/site-packages/django_tasks/signal_handlers.py

54 lines
1.5 KiB
Python
Raw Permalink Normal View History

2025-07-25 21:32:16 +10:00
import logging
from asgiref.local import Local
from django.core.signals import setting_changed
from django.dispatch import receiver
from django_tasks import BaseTaskBackend, ResultStatus, TaskResult
from .signals import task_enqueued, task_finished
logger = logging.getLogger("django_tasks")
@receiver(setting_changed)
def clear_tasks_handlers(*, setting: str, **kwargs: dict) -> None:
"""
Reset the connection handler whenever the settings change
"""
if setting == "TASKS":
from django_tasks import tasks
tasks._settings = tasks.settings = tasks.configure_settings(None) # type:ignore[attr-defined]
tasks._connections = Local() # type:ignore[attr-defined]
@receiver(task_enqueued)
def log_task_enqueued(
sender: type[BaseTaskBackend], task_result: TaskResult, **kwargs: dict
) -> None:
logger.debug(
"Task id=%s path=%s enqueued backend=%s",
task_result.id,
task_result.task.module_path,
task_result.backend,
)
@receiver(task_finished)
def log_task_finished(
sender: type[BaseTaskBackend], task_result: TaskResult, **kwargs: dict
) -> None:
if task_result.status == ResultStatus.FAILED:
# Use `.exception` to integrate with error monitoring tools (eg Sentry)
log_method = logger.exception
else:
log_method = logger.info
log_method(
"Task id=%s path=%s state=%s",
task_result.id,
task_result.task.module_path,
task_result.status,
)