summaryrefslogtreecommitdiff
path: root/python-django-zapier-triggers.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-29 13:30:16 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-29 13:30:16 +0000
commit950017b92d8f47baa5ba820276d6c3f3ac70c2a9 (patch)
treea02deadbee92bad8816f83566320f25d6a5bab59 /python-django-zapier-triggers.spec
parentfba868191af2b6acb42a785467055dbf6e6b5b64 (diff)
automatic import of python-django-zapier-triggers
Diffstat (limited to 'python-django-zapier-triggers.spec')
-rw-r--r--python-django-zapier-triggers.spec425
1 files changed, 425 insertions, 0 deletions
diff --git a/python-django-zapier-triggers.spec b/python-django-zapier-triggers.spec
new file mode 100644
index 0000000..0d8309a
--- /dev/null
+++ b/python-django-zapier-triggers.spec
@@ -0,0 +1,425 @@
+%global _empty_manifest_terminate_build 0
+Name: python-django-zapier-triggers
+Version: 0.2.3
+Release: 1
+Summary: Simple Django app for managing Zapier triggers.
+License: MIT
+URL: https://github.com/yunojuno/django-zapier-trigger
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/60/72/fbd3996ff1f9c3af005ae19f41c5f21a9df34f81160fe40eacf8590d0d39/django-zapier-triggers-0.2.3.tar.gz
+BuildArch: noarch
+
+Requires: python3-django
+Requires: python3-dateutil
+
+%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](https://platform.zapier.com/docs/triggers#polling-trigger).
+
+### 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:
+
+```python
+[
+ {"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`
+
+```python
+# settings.py
+INSTALLED_APPS = [
+ ...,
+ zapier,
+]
+```
+
+2. Run migrations to add model tables
+
+```
+$ python manage.py migrate
+```
+
+3. Add a url for the Zapier auth check
+
+```python
+# urls.py
+urlpatterns = [
+ ...
+ path(
+ "zapier/auth-check/",
+ zapier.views.zapier_token_check,
+ name="zapier_auth_check",
+ ),
+]
+```
+
+4. 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.
+
+```python
+# 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)
+```
+
+
+%package -n python3-django-zapier-triggers
+Summary: Simple Django app for managing Zapier triggers.
+Provides: python-django-zapier-triggers
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-django-zapier-triggers
+# 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](https://platform.zapier.com/docs/triggers#polling-trigger).
+
+### 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:
+
+```python
+[
+ {"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`
+
+```python
+# settings.py
+INSTALLED_APPS = [
+ ...,
+ zapier,
+]
+```
+
+2. Run migrations to add model tables
+
+```
+$ python manage.py migrate
+```
+
+3. Add a url for the Zapier auth check
+
+```python
+# urls.py
+urlpatterns = [
+ ...
+ path(
+ "zapier/auth-check/",
+ zapier.views.zapier_token_check,
+ name="zapier_auth_check",
+ ),
+]
+```
+
+4. 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.
+
+```python
+# 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)
+```
+
+
+%package help
+Summary: Development documents and examples for django-zapier-triggers
+Provides: python3-django-zapier-triggers-doc
+%description help
+# 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](https://platform.zapier.com/docs/triggers#polling-trigger).
+
+### 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:
+
+```python
+[
+ {"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`
+
+```python
+# settings.py
+INSTALLED_APPS = [
+ ...,
+ zapier,
+]
+```
+
+2. Run migrations to add model tables
+
+```
+$ python manage.py migrate
+```
+
+3. Add a url for the Zapier auth check
+
+```python
+# urls.py
+urlpatterns = [
+ ...
+ path(
+ "zapier/auth-check/",
+ zapier.views.zapier_token_check,
+ name="zapier_auth_check",
+ ),
+]
+```
+
+4. 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.
+
+```python
+# 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)
+```
+
+
+%prep
+%autosetup -n django-zapier-triggers-0.2.3
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-django-zapier-triggers -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon May 29 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.3-1
+- Package Spec generated