Skip to main content

Active Job for Django

Project description

Active Job for Django

Example usage

Define tasks in a tasks.py module within a Django app:

my_app/tasks.py

from django.core.mail import send_mail
from pydantic import BaseModel

import django_generic_tasks as tasks


# define task params as a Pydantic BaseModel
class EmailNotificationParams(BaseModel):
    subject: str
    content: str
    recipients: list[str]


# subclass Task and specify params type as a generic type argument and implement the run method
class EmailNotificationTask(tasks.Task[EmailNotificationParams]):
    def run(self):
        send_mail(
            subject=self.params.subject,
            message=self.params.content,
            from_email=None,
            recipient_list=self.params.recipients,
        )


if __name__ == "__main__":
    params = EmailNotificationParams(
        subject="Hello",
        content="Have a nice day",
        recipients=["alice@example.com", "bob@example.com"],
    )
    task = EmailNotificationTask(params)

    # run a task synchronously
    task.run()

    # run a task asynchronously using settings.TASKS_BACKEND
    task.start()

Registering tasks

Similar to signals, tasks have to be implicitly registered by ensuring they are imported during application startup. This can be done in the ready method in an application’s AppConfig.

my_app/apps.py

from django.apps import AppConfig


class MyAppConfig(AppConfig):
    default_auto_field = "django.db.models.BigAutoField"
    name = "my_app"

    def ready(self):
        from . import tasks  # noqa: F401

HTTP endpoints

urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("admin/", admin.site.urls),
    path("tasks/", include("django_generic_tasks.urls")),
]

django-generic-tasks uses django-ninja to automatically expose API endpoints for running tasks. Each defined task gets its own API endpoint and uses the specified Pydantic BaseModel for parameter verification.

autogenerated OpenAPI docs

Supported backends

ThreadingBackend

Runs tasks in a new threading.Thread.

CloudTasksBackend

Runs tasks using Cloud Tasks HTTP Target tasks.

Configuration

TASKS_API_AUTHENTICATION

Specifies the Python path to a function or class whose instances are callable to use to authenticate incoming task API calls. The function or callable class should accept a single parameter request representing the incoming request.

Type: Optional[str]

Default: django_generic_tasks.security.BasicAuth

Examples:

my_app/authentication.py

# function
def authenticate(request):
    """Only allow requests from localhost"""
    return request.META["REMOTE_ADDR"] == "127.0.0.1"

# callable class instance
class Authenticator:
    def __call__(self, request):
        """Only allow requests from localhost"""
        return request.META["REMOTE_ADDR"] == "127.0.0.1"

my_app/settings.py

TASKS_API_AUTHENTICATION = "my_app.authentication.authenticate"
# or
TASKS_API_AUTHENTICATION = "my_app.authentication.Authenticator"

Built-in authentication methods:

  • django_generic_tasks.security.GoogleOIDCAuth - Enforces that incoming requests contain a Google-issued OIDC token in the authorization header. This can be automatically added to requests from Cloud Tasks and Cloud Scheduler.

  • django_generic_tasks.security.BasicAuth - Authenticates basic auth credentials using the Django authentication system

  • django_generic_tasks.security.NoAuth - No authentication, useful for development.

TASKS_BACKEND

The default backend to use to run tasks asynchronously.

Type: any class which implements the django_generic_tasks.backends.Backend protocol

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-generic-tasks-0.5.1.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

django_generic_tasks-0.5.1-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file django-generic-tasks-0.5.1.tar.gz.

File metadata

  • Download URL: django-generic-tasks-0.5.1.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.10.4 Darwin/21.5.0

File hashes

Hashes for django-generic-tasks-0.5.1.tar.gz
Algorithm Hash digest
SHA256 bfe6fee81c03a174d0d1881a15edf6a6d760ea3dde10745b938f21ac88717f9f
MD5 aa323967623701ab260722b51086a102
BLAKE2b-256 4f1cdd8d917de63adae81a0edc3932c54c936a6d2983093ea9bb3f7311e4ce37

See more details on using hashes here.

File details

Details for the file django_generic_tasks-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_generic_tasks-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 46834fc75d286be4dc3fab9bb33434f4a8f5fc5f5f3ff7dd53b3b9e918bdfa35
MD5 cd216e4d1cfc9f74cadca7b8be6de5ea
BLAKE2b-256 995c28dbe66b23e7c4b35d92cf20494d5e0da3f7d411fa6fba8a87005885d1d4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page