Metadata-Version: 2.0
Name: quickq
Version: 17.8.5
Summary: The quickest way to setup async tasks with Django.
Home-page: https://github.com/pizzapanther/pizzapanther.github.io/tree/master/libs/quickq
Author: Paul Bailey
Author-email: quickq@neutrondrive.com
License: MIT
Platform: UNKNOWN
Classifier: Framework :: Django
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Dist: Django (>=1.11)
Requires-Dist: pyjwt
Requires-Dist: requests-futures
Provides-Extra: dev
Requires-Dist: twine; extra == 'dev'
Requires-Dist: wheel; extra == 'dev'

Django Quick Queue
==================

Django Quick Queue is a fast and simple way to use async tasks in
Django. This package has a limited use case. If you are looking for a
more complex async task systems you should try Django Q, Celery, or
Huey. Quick Queue is meant to give you the simplest method to started
executing small asynchronous tasks.

Installation
============

1. Install Package
~~~~~~~~~~~~~~~~~~

``pip install quickq``

2. Add Base URL to settings.py
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: python

    QQ_BASE_URL = 'https://mysite.example.com'

3. Setup the view in your urls.py
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: python

    from quickq import taskinator

    urlpatterns = [
      url(r'^taskinator/(\S+)$', taskinator, name="taskinator"),
      ...
    ]

4. Add the Task decorator to any function
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: python

    from quickq import Task

    @Task()
    def send_approved (name, slug, email):
        send_mail(
          'Yay E-mail!',
          message,
          settings.DEFAULT_FROM_EMAIL,
          [email],
          fail_silently=False,
        )

    # With a custom Timeout
    @Task(timeout=120)
    def another_task ():
      do_stuff()

5. Execute your task as normal
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: python

    send_email('Narf', 'narf-me', 'narf@aol.com')

How it Works
------------

#. Your task is called

   #. A PyJWT is generated.
   #. The taskinator URL is called asynchronously.

#. Taskinator view executed

   #. Decodes the JWT.
   #. Excutes the original task function outside of the original
      request.

Limitations
-----------

-  Function arguments are converted to JSON so they must be JSON
   compatible.
-  Request time may be limited. If your webserver has a limitation on
   request time then that will also affect how long your tasks can
   execute since they are simply web requests. The request is also
   limited by the ``QQ_REQUEST_TIMEOUT`` setting.

Additional Settings
-------------------

::

    QQ_TOKEN_EXPIRATION: Default 60
    QQ_TOKEN_ALGORITHMS: Default ['HS256']
    QQ_URL_NAME: Default 'taskinator'
    QQ_REQUEST_TIMEOUT: Default 60


