Skip to main content

Simple Django app for managing Zapier triggers.

Project description

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)

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-zapier-triggers-1.0a1.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_zapier_triggers-1.0a1-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

Details for the file django-zapier-triggers-1.0a1.tar.gz.

File metadata

  • Download URL: django-zapier-triggers-1.0a1.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.10.1 Darwin/21.5.0

File hashes

Hashes for django-zapier-triggers-1.0a1.tar.gz
Algorithm Hash digest
SHA256 9493bd5e3f3336f2e8069f2aca8c69413993aadfd5ad625d1c2ad83d5bf098b8
MD5 2b9af5b09cd32bf483c9dc81ec00f668
BLAKE2b-256 ea4c54cffc4fbb003afe91d01fe25b4ea083a1ed2d6579701ae2d157f9ca2e3d

See more details on using hashes here.

File details

Details for the file django_zapier_triggers-1.0a1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_zapier_triggers-1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 7b4ac885dd221d643e611e8b101c20f73c08c6c8a14d62b64e316d695ba6baaf
MD5 0522c8735b2606a739c124f23d944a7a
BLAKE2b-256 f4594d61c5bef2acd6cd40ade45bd44a126c292d5908b95e3fb1a2905139e8a4

See more details on using hashes here.

Supported by

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