Skip to main content

Django Zapier Triggers

Django app for managing Zapier trigger authentication

This app provides the minimal scaffolding required to support a Zapier trigger in your application. Specifically it supports token-based authentication for polling triggers.

Version support

This app supports Django 3.2+ (HttpResponse.headers), and Python 3.8+ (:= operator).

How does it work?

The app has a single model that stores an API token (UUID) against a User. The token object has the concept of "scope" which is an array of strings representing API triggers that are supported. In effect it uses the token UUID for authentication, and the token scopes for authorization.

A trigger itself is just a view that returns some data in the prescribed Zapier format - which in Python terms is a JSON-serializable list of dicts, each of which must contain an id attr:

[
    {"id": 1, "name": "Fred"},
    { ... }
]

For simple scenarios where you want to return a queryset, there is a base CBV PollingTriggerView which you can subclass.

Installation

Install the package using pip / poetry

pip install django-zapier-triggers

Configuration

  1. Add the app to your INSTALLED_APPS
# settings.py
INSTALLED_APPS = [
    ...,
    zapier,
]
  1. Run migrations to add model tables
$ python manage.py migrate
  1. Add a url for the Zapier auth check
# urls.py
urlpatterns = [
    ...
    path(
        "zapier/auth-check/",
        zapier.views.zapier_token_check,
        name="zapier_auth_check",
    ),
]
  1. Configure Zapier trigger (https://platform.zapier.com/docs/triggers)

This app supports the "API Key" auth model for Zapier apps https://platform.zapier.com/docs/apikey

You must configure your Zapier authentication to use API Key authentication, and in the step "Configure a Test Request & Connection Label" you should ensure that you are passing the API Key as a request header called "X-Api-Token", and not in the URL.

NB You will need to host your application somewhere that is visible on the internet in order to confirm that the authentication works. ngrok is a good option to run the application locally.

Usage

Now that you have authentication set up, you can create your triggers. A polling trigger is nothing more that a GET endpoint that supports the token authentication and that returns an ordered list of JSON objects. Zapier itself handles deduplication of objects using the id property of each object that is returned - you can read more about deduplication here - https://zapier.com/help/create/basics/data-deduplication-in-zaps

This package is responsible for the endpoint authentication - everything else is up to you. You can use the polling_trigger view function decorator to guard the functions that you set up as triggers. The decorator takes a required string argument, which is a scope that must match the incoming request.auth. The decorator handles request authentication, setting the request.user and request.auth properties.

# views.py
@zapier.decorators.polling_trigger("new_books")
def new_books_trigger(request: HttpRequest) -> JsonResponse:
    latest_id = request.auth.get_latest_id("new_books") or -1
    books = Book.objects.filter(id__gt=latest_id).order_by("-id")[:25]
    data = [{"id": book.id, "title": book.title} for book in books]
    return JsonReponse(data)

Metadata

Release files for django-zapier-triggers 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-zapier-triggers 0.2.3
File Size Uploaded
django-zapier-triggers-0.2.3.tar.gz 11.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-zapier-triggers 0.2.3
File Interpreter ABI Platform
django_zapier_triggers-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 24.4 kB

Release files / django-zapier-triggers-0.2.3.tar.gz

Download URL django-zapier-triggers-0.2.3.tar.gz
Size 11.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7b41376a66a546ef74efbbd406b03ada9101c230cd989dd2416e4a135d62cf21
BLAKE2b-256 checksum
How to use checksums
6072fbd3996ff1f9c3af005ae19f41c5f21a9df34f81160fe40eacf8590d0d39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.11 CPython/3.9.4 Darwin/21.2.0

Release files / django_zapier_triggers-0.2.3-py3-none-any.whl

Download URL django_zapier_triggers-0.2.3-py3-none-any.whl
Size 12.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8295c1216e44ad3047b8fd7f6bcdad71dee0049dd1cc8f6179539a36e3fe963f
BLAKE2b-256 checksum
How to use checksums
345ed4056365559bb85a86e6d2c446519c72da9d4c9f30676e275d633b2895e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.11 CPython/3.9.4 Darwin/21.2.0
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page