Skip to main content

A django package for managing long running tasks using GCP Cloud Task

Project description

django-cloudtask

A django package for managing long running tasks via Cloud Run and Cloud Scheduler

CircleCI

Should I be using this package?

Not yet - we're still trying to make this package usable by the general public.

There are a lot of assumptions being made that might not be suitable for your project.

Usage

Setup

include django_cloudtask in your installed apps.

Configuration

Make sure these are in your django settings:

  • PROJECT_ID
    • the GCP project
  • PROJECT_REGION
    • GCP region
  • TASK_SERVICE_ACCOUNT
    • Service account which will be authenticated against
  • TASK_DOMAIN
    • domain which receives tasks (cloud run)
  • TASK_DEFAULT_QUEUE
    • default queue tasks will be added to

Defining a task

Tasks must be defined in a file called tasks.py at the root level of an app directory.

e.g.,

my-project/
  app/
    tasks.py
    urls.py
    views.py
  manage.py
  settings.py

Tasks are defined using the @register_task decorator.

@register_task(should_retry: bool, queue: str, schedule: str)

:should_retry: Will retry the task if there was an uncaught exception

:queue: What Queue this task belongs to (Queues are set up in GCP)

:schedule: Cron-like string defining when this task should be executed

Note: a scheduled task cannot have any arguments (but can have kwargs with defaults).

e.g.,

from django_cloudtask import register_task

@register_task
def my_task(some, args, kwarg=False):
   ...

@register_task(schedule="0 5 * * *")
def scheduled_task():
    ...

Calling a task

Tasks may be scheduled by calling enqueue(*args, **kwargs).

args and kwargs must be JSON serialisable.

Tasks may also be called directly which will execute in the current call stack.

e.g.,

# execute asynchronously
my_task.enqueue(1, "start the task", kwarg=True)


# execute immediately
scheduled_task()

Contributing

We use pre-commit <https://pre-commit.com/> to enforce our code style rules locally before you commit them into git. Once you install the pre-commit library (locally via pip is fine), just install the hooks::

pre-commit install -f --install-hooks

The same checks are executed on the build server, so skipping the local linting (with git commit --no-verify) will only result in a failed test build.

Current style checking tools:

  • flake8: python linting
  • isort: python import sorting
  • black: python code formatting

Note:

You must have python3.6 available on your path, as it is required for some
of the hooks.

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-cloudtask-0.1.5.tar.gz (8.6 kB view hashes)

Uploaded Source

Built Distribution

django_cloudtask-0.1.5-py3-none-any.whl (8.7 kB view hashes)

Uploaded Python 3

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