{ "info": { "author": "Mario Orlandi", "author_email": "morlandi@brainstorm.it", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.8" ], "description": "===========\ndjango-task\n===========\n\n.. image:: https://badge.fury.io/py/django-task.svg\n :target: https://badge.fury.io/py/django-task\n\n.. image:: https://travis-ci.org/morlandi/django-task.svg?branch=master\n :target: https://travis-ci.org/morlandi/django-task\n\n.. image:: https://codecov.io/gh/morlandi/django-task/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/morlandi/django-task\n\nA Django app to run new background tasks from either admin or cron, and inspect task history from admin\n\n.. contents::\n\n.. sectnum::\n\nQuickstart\n----------\n\n1) **Install Django Task**:\n\n.. code-block:: bash\n\n pip install django-task\n\n2) **Add it to your `INSTALLED_APPS`**:\n\n.. code-block:: python\n\n INSTALLED_APPS = (\n ...\n 'django_rq', # optional (not needed when using TaskThreaded)\n 'django_task',\n ...\n )\n\n3) **Add Django Task's URL patterns**:\n\n.. code-block:: python\n\n urlpatterns = [\n ...\n path('django_task/', include('django_task.urls', namespace='django_task')),\n ...\n ]\n\n4) **Configure Redis and RQ in settings.py** (not needed when using TaskThreaded):\n\n.. code-block:: python\n\n #REDIS_URL = 'redis://localhost:6379/0'\n redis_host = os.environ.get('REDIS_HOST', 'localhost')\n redis_port = 6379\n REDIS_URL = 'redis://%s:%d/0' % (redis_host, redis_port)\n\n CACHES = {\n 'default': {\n 'BACKEND': 'redis_cache.RedisCache',\n 'LOCATION': REDIS_URL\n },\n }\n\n #\n # RQ config\n #\n\n RQ_PREFIX = \"myproject_\"\n QUEUE_DEFAULT = RQ_PREFIX + 'default'\n QUEUE_HIGH = RQ_PREFIX + 'high'\n QUEUE_LOW = RQ_PREFIX + 'low'\n\n RQ_QUEUES = {\n QUEUE_DEFAULT: {\n 'URL': REDIS_URL,\n #'PASSWORD': 'some-password',\n 'DEFAULT_TIMEOUT': 360,\n },\n QUEUE_HIGH: {\n 'URL': REDIS_URL,\n 'DEFAULT_TIMEOUT': 500,\n },\n QUEUE_LOW: {\n 'URL': REDIS_URL,\n #'ASYNC': False,\n },\n }\n\nNote: if you plan to install many instances of the project on the same server,\nfor each instance use a specific value for `RQ_PREFIX`; for example:\n\n.. code-block:: python\n\n INSTANCE_PREFIX = \"myproject_\"\n try:\n from project.settings.instance_prefix import *\n except Exception as e:\n pass\n RQ_PREFIX = INSTANCE_PREFIX\n\n QUEUE_DEFAULT = RQ_PREFIX + '_default'\n QUEUE_LOW = RQ_PREFIX + '_low'\n QUEUE_HIGH = RQ_PREFIX + '_high'\n\n ...\n\n5) **Customize django-task specific settings (optional)**:\n\n.. code-block:: python\n\n RQ_SHOW_ADMIN_LINK = False\n DJANGOTASK_LOG_ROOT = os.path.abspath(os.path.join(BASE_DIR, '..', 'protected', 'tasklog'))\n DJANGOTASK_ALWAYS_EAGER = False\n DJANGOTASK_JOB_TRACE_ENABLED = False\n DJANGOTASK_REJECT_IF_NO_WORKER_ACTIVE_FOR_QUEUE = True\n\n6) **Optionally, revoke pending tasks at startapp**;\n\nfile `main/apps.py`:\n\n.. code-block:: python\n\n class MainConfig(AppConfig):\n\n ...\n\n def ready(self):\n\n ...\n try:\n from django_task.utils import revoke_pending_tasks\n revoke_pending_tasks()\n except Exception as e:\n print(e)\n\nFeatures\n--------\n\n**Purposes**\n\n- create async tasks either programmatically or from admin\n- monitor async tasks from admin\n- log all tasks in the database for later inspection\n- optionally save task-specific logs in a TextField and/or in a FileField\n\n**Details**\n\n1. each specific task is described by a Model derived from either models.TaskRQ or models.TaskThreaded, which\n is responsible for:\n\n - selecting the name for the consumer queue among available queues (TaskRQ only)\n - collecting and saving all parameters required by the associated job\n - running the specific job asyncronously\n\n2. a new job can be run either:\n\n - creating a Task from the Django admin\n - creating a Task from code, then calling Task.run()\n\n3. job execution workflow:\n\n - job execution is triggered by task.run(is_async)\n - job will receive the task.id, and retrieve paramerts from it\n - on start, job will update task status to 'STARTED' and save job.id for reference\n - during execution, the job can update the progress indicator\n - on completion, task status is finally updated to either 'SUCCESS' or 'FAILURE'\n - See example.jobs.count_beans for an example\n\n\nScreenshots\n-----------\n\n.. image:: example/etc/screenshot_001.png\n\n.. image:: example/etc/screenshot_002.png\n\n\nApp settings\n------------\n\nDJANGOTASK_LOG_ROOT\n Path for log files.\n\n Default: None\n\n Example: os.path.abspath(os.path.join(BASE_DIR, '..', 'protected', 'tasklog'))\n\nDJANGOTASK_ALWAYS_EAGER\n When True, all task are execute syncronously (useful for debugging and unit testing).\n\n Default: False\n\nDJANGOTASK_JOB_TRACE_ENABLED\n Enables low level tracing in Job.run() - for debugging challenging race conditions\n\n Default: False\n\nDJANGOTASK_REJECT_IF_NO_WORKER_ACTIVE_FOR_QUEUE\n Rejects task if not active worker is available for the specific task queue\n when task.run() is called\n\n Default: False\n\nREDIS_URL\n Redis server to connect to\n\n Default: 'redis://localhost:6379/0'\n\n\nVerbosity levels\n----------------\n\nThe `verbosity level` controls the logging level as follows:\n\n=============== ===================\nverbosity log level\n--------------- -------------------\n0 no log\n1 logging.WARNING\n2 logging.INFO\n3 logging.DEBUG\n=============== ===================\n\nand can be set by the derived class:\n\n.. code:: python\n\n class MyTask(TaskRQ):\n ...\n DEFAULT_VERBOSITY = 2\n ...\n\nor you can set it on a \"per task\" basis by adding to the model\na `task_verbosity` field as follows:\n\n.. code:: python\n\n task_verbosity = models.PositiveIntegerField(null=False, blank=False, default=2,\n choices=((0,'0'), (1,'1'), (2,'2'), (3,'3')),\n )\n\n\nRunning Tests\n-------------\n\nDoes the code actually work?\n\nRunning the unit tests from your project::\n\n python manage.py test -v 2 django_task --settings=django_task.tests.settings\n\nRunning the unit tests from your local fork::\n\n source /bin/activate\n (myenv) $ pip install tox\n (myenv) $ tox\n\nor::\n\n python ./runtests.py\n\nor::\n\n coverage run --source='.' runtests.py\n coverage report\n\n\nThreaded vs RQ-based tasks\n--------------------------\n\nThe original implementation is based on django-rq and RQ (a Redis based Python queuing library).\n\nOn some occasions, using a background queue may be overkill or even inappropriate:\nif you need to run many short I/O-bound background tasks concurrently, the serialization\nprovided by the queue, while limiting the usage of resources, would cause eccessive delay.\n\nStarting from version 2.0.0, in those cases you can use TaskThreaded instead of TaskRQ;\nthis way, each background task will run in it's own thread.\n\n**MIGRATING FROM django-task 1.5.1 to 2.0.0**\n\n- derive your queue-based tasks from TaskRQ instead of Task\n- or use TaskThreaded\n- get_jobclass() overridable replaces get_jobfunc()\n\nSupport Job class\n-----------------\n\nStarting from version 0.3.0, some conveniences have been added:\n\n- The @job decorator for job functions is no more required, as Task.run() now\n uses queue.enqueue() instead of jobfunc.delay(), and retrieves the queue\n name directly from the Task itself\n\n- each Task can set it's own TASK_TIMEOUT value (expressed in seconds),\n that when provided overrides the default queue timeout\n\n- a new Job class has been provided to share suggested common logic before and\n after jobfunc execution; you can either override `run()` to implement a custom logic,\n or (in most cases) just supply your own `execute()` method, and optionally\n override `on_complete()` to execute cleanup actions after job completion;\n\nexample:\n\n.. code :: python\n\n class CountBeansJob(Job):\n\n @staticmethod\n def execute(job, task):\n num_beans = task.num_beans\n for i in range(0, num_beans):\n time.sleep(0.01)\n task.set_progress((i + 1) * 100 / num_beans, step=10)\n\n @staticmethod\n def on_complete(job, task):\n print('task \"%s\" completed with: %s' % (str(task.id), task.status))\n # An more realistic example from a real project ...\n # if task.status != 'SUCCESS' or task.error_counter > 0:\n # task.alarm = BaseTask.ALARM_STATUS_ALARMED\n # task.save(update_fields=['alarm', ])\n\n\n**Execute**\n\nRun consumer:\n\n.. code:: bash\n\n python manage.py runserver\n\n\nRun worker(s):\n\n.. code:: bash\n\n python manage.py rqworker low high default\n python manage.py rqworker low high default\n ...\n\n**Sample Task**\n\n.. code:: python\n\n from django.db import models\n from django.conf import settings\n from django_task.models import TaskRQ\n\n\n class SendEmailTask(TaskRQ):\n\n sender = models.CharField(max_length=256, null=False, blank=False)\n recipients = models.TextField(null=False, blank=False,\n help_text='put addresses in separate rows')\n subject = models.CharField(max_length=256, null=False, blank=False)\n message = models.TextField(null=False, blank=True)\n\n TASK_QUEUE = settings.QUEUE_LOW\n TASK_TIMEOUT = 60\n LOG_TO_FIELD = True\n LOG_TO_FILE = False\n DEFAULT_VERBOSITY = 2\n\n @staticmethod\n def get_jobclass():\n from .jobs import SendEmailJob\n return SendEmailJob\n\nWhen using **LOG_TO_FILE = True**, you might want to add a cleanup handler to\nremove the log file when the corresponding record is deleted::\n\n import os\n from django.dispatch import receiver\n\n @receiver(models.signals.post_delete, sender=ImportaCantieriTask)\n def on_sendemailtask_delete_cleanup(sender, instance, **kwargs):\n \"\"\"\n Autodelete logfile on Task delete\n \"\"\"\n logfile = instance._logfile()\n if os.path.isfile(logfile):\n os.remove(logfile)\n\n**Sample Job**\n\n.. code:: python\n\n import redis\n import logging\n import traceback\n from django.conf import settings\n from .models import SendEmailTask\n from django_task.job import Job\n\n\n class SendEmailJob(Job):\n\n @staticmethod\n def execute(job, task):\n recipient_list = task.recipients.split()\n sender = task.sender.strip()\n subject = task.subject.strip()\n message = task.message\n from django.core.mail import send_mail\n send_mail(subject, message, sender, recipient_list)\n\n\n**Sample management command**\n\n.. code:: python\n\n from django_task.task_command import TaskCommand\n from django.contrib.auth import get_user_model\n\n class Command(TaskCommand):\n\n def add_arguments(self, parser):\n super(Command, self).add_arguments(parser)\n parser.add_argument('sender')\n parser.add_argument('subject')\n parser.add_argument('message')\n parser.add_argument('-r', '--recipients', nargs='*')\n parser.add_argument('-u', '--user', type=str, help=\"Specify username for 'created_by' task field\")\n\n def handle(self, *args, **options):\n from tasks.models import SendEmailTask\n\n # transform the list of recipents into text\n # (one line for each recipient)\n options['recipients'] = '\\n'.join(options['recipients']) if options['recipients'] is not None else ''\n\n # format multiline message\n options['message'] = options['message'].replace('\\\\n', '\\n')\n\n if 'user' in options:\n created_by = get_user_model().objects.get(username=options['user'])\n else:\n created_by = None\n\n self.run_task(SendEmailTask, created_by=created_by, **options)\n\n**Deferred Task retrieval to avoid job vs. Task race condition**\n\nAn helper Task.get_task_from_id() classmethod is supplied to retrieve Task object\nfrom task_id safely.\n\n*Task queues create a new type of race condition. Why ?\nBecause message queues are fast !\nHow fast ?\nFaster than databases.*\n\nSee:\n\nhttps://speakerdeck.com/siloraptor/django-tasty-salad-dos-and-donts-using-celery\n\nA similar generic helper is available for Job-derived needs::\n\n django_task.utils.get_model_from_id(model_cls, id, timeout=1000, retry_count=10)\n\n\n**Howto schedule jobs with cron**\n\nCall management command 'count_beans', which in turn executes the required job.\n\nFor example::\n\n SHELL=/bin/bash\n PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n\n 0 * * * * {{username}} timeout 55m {{django.pythonpath}}/python {{django.website_home}}/manage.py count_beans 1000 >> {{django.logto}}/cron.log 2>&1\n\nA base class TaskCommand has been provided to simplify the creation of any specific\ntask-related management commad;\n\na derived management command is only responsible for:\n\n- defining suitable command-line parameters\n- selecting the specific Task class and job function\n\nfor example:\n\n.. code:: python\n\n from django_task.task_command import TaskCommand\n\n\n class Command(TaskCommand):\n\n def add_arguments(self, parser):\n super(Command, self).add_arguments(parser)\n parser.add_argument('num_beans', type=int)\n\n def handle(self, *args, **options):\n from tasks.models import CountBeansTask\n self.run_task(CountBeansTask, **options)\n\n\nJavascript helpers\n------------------\n\nA few utility views have been supplied for interacting with tasks from javascript.\n\ntasks_info_api\n..............\n\nRetrieve informations about a list of existing tasks\n\nSample usage:\n\n.. code:: javascript\n\n var tasks = [{\n id: 'c50bf040-a886-4aed-bf41-4ae794db0941',\n model: 'tasks.devicetesttask'\n }, {\n id: 'e567c651-c8d5-4dc7-9cbf-860988f55022',\n model: 'tasks.devicetesttask'\n }];\n\n $.ajax({\n url: '/django_task/info/',\n data: JSON.stringify(tasks),\n cache: false,\n type: 'post',\n dataType: 'json',\n headers: {'X-CSRFToken': getCookie('csrftoken')}\n }).done(function(data) {\n console.log('data: %o', data);\n });\n\nResult::\n\n [\n {\n \"id\": \"c50bf040-a886-4aed-bf41-4ae794db0941\",\n \"created_on\": \"2018-10-11T17:45:14.399491+00:00\",\n \"created_on_display\": \"10/11/2018 19:45:14\",\n \"created_by\": \"4f943f0b-f5a3-4fd8-bb2e-451d2be107e2\",\n \"started_on\": null,\n \"started_on_display\": \"\",\n \"completed_on\": null,\n \"completed_on_display\": \"\",\n \"job_id\": \"\",\n \"status\": \"PENDING\",\n \"status_display\": \"
PENDING
\",\n \"log_link_display\": \"\",\n \"failure_reason\": \"\",\n \"progress\": null,\n \"progress_display\": \"-\",\n \"completed\": false,\n \"duration\": null,\n \"duration_display\": \"\",\n \"extra_fields\": {\n }\n },\n ...\n ]\n\ntask_add_api\n............\n\nCreate and run a new task based on specified parameters\n\nExpected parameters:\n\n- 'task-model' = \".\"\n- ... task parameters ...\n\nReturns the id of the new task.\n\nSample usage:\n\n.. code:: javascript\n\n function exportAcquisition(object_id) {\n if (confirm('Do you want to export data ?')) {\n\n var url = '/django_task/add/';\n var data = JSON.stringify({\n 'task-model': 'tasks.exportdatatask',\n 'source': 'backend.acquisition',\n 'object_id': object_id\n });\n\n $.ajax({\n type: 'POST',\n url: url,\n data: data,\n cache: false,\n crossDomain: true,\n dataType: 'json',\n headers: {'X-CSRFToken': getCookie('csrftoken')}\n }).done(function(data) {\n console.log('data: %o', data);\n alert('New task created: \"' + data.task_id + '\"');\n }).fail(function(jqXHR, textStatus, errorThrown) {\n console.log('ERROR: ' + jqXHR.responseText);\n alert(errorThrown);\n });\n }\n return;\n }\n\ntask_run_api\n............\n\nSchedule execution of specified task.\n\nReturns job.id or throws error (400).\n\nParameters:\n\n- app_label\n- model_name\n- pk\n- is_async (0 or 1, default=1)\n\nSample usage:\n\n.. code:: javascript\n\n var task_id = 'c50bf040-a886-4aed-bf41-4ae794db0941';\n\n $.ajax({\n url: sprintf('/django_task/tasks/devicetesttask/%s/run/', task_id),\n cache: false,\n type: 'get'\n }).done(function(data) {\n console.log('data: %o', data);\n }).fail(function(jqXHR, textStatus, errorThrown) {\n display_server_error(jqXHR.responseText);\n });\n\n\nUpdating the tasks listing dynamically in the frontend\n------------------------------------------------------\n\nThe list of Tasks in the admin changelist_view is automatically updated to refresh\nthe progess and status of each running Task.\n\nYou can obtain the same result in the frontend by calling the **DjangoTask.update_tasks()**\njavascript helper, provided you're listing the tasks in an HTML table with a similar layout.\n\nThe simplest way to do it is to use the **render_task_column_names_as_table_row**\nand **render_task_as_table_row** template tags.\n\nExample:\n\n.. code:: html\n\n {% load i18n django_task_tags %}\n\n {% if not export_data_tasks %}\n
{% trans 'No recent jobs available' %}
\n {% else %}\n \n {% with excluded='created_by,created_on,job_id,log_text,mode' %}\n \n \n {{ export_data_tasks.0|render_task_column_names_as_table_row:excluded }}\n \n \n \n {% for task in export_data_tasks %}\n \n {{ task|render_task_as_table_row:excluded }}\n \n {% endfor %}\n \n
\n {% endwith %}\n {% endif %}\n\n\n {% block extrajs %}\n {{ block.super }}\n \n \n {% endblock extrajs %}\n\nFor each fieldname included in the table rows, **render_task_as_table_row** will\ncheck if a FIELDNAME_display() method is available in the Task model, and in case\nwill use it for rendering the field value; otherwise, the field value will be simply\nconverted into a string.\n\nIf the specific derived Task model defines some additional fields (unknown to the base Task model)\nwhich need to be updated regularly by **DjangoTask.update_tasks()**, include them as \"extra_fields\"\nas follows:\n\n.. code:: python\n\n def as_dict(self):\n data = super(ExportDataTask, self).as_dict()\n data['extra_fields'] = {\n 'result_display': mark_safe(self.result_display())\n }\n return data\n\n.. image:: example/etc/screenshot_003.png\n\nExample Project for django-task\n-------------------------------\n\nAs example project is provided as a convenience feature to allow potential users\nto try the app straight from the app repo without having to create a django project.\n\nPlease follow the instructions detailed in file `example/README.rst `_.\n\n\nCredits\n-------\n\nReferences:\n\n- `A simple app that provides django integration for RQ (Redis Queue) `_\n- `Asynchronous tasks in django with django-rq `_\n- `django-rq redux: advanced techniques and tools `_\n- `Benchmark: Shared vs. Dedicated Redis Instances `_\n- `Django tasty salad - DOs and DON'Ts using Celery by Roberto Rosario `_\n- `Can Django do multi-thread works? `_\n\n\n\n\n\n=======\nHistory\n=======\n\n2.0.5\n-----\n* TaskCommand.run_task() now returns the ID of the created Task\n\n2.0.4\n-----\n* TaskCommand.run_task() now returns the created Task\n\n2.0.3\n-----\n* Prepare for Django 4.0\n\n2.0.2\n-----\n* TaskCommand now uses \"-v\" / \"--verbosity\" command line options to set task_verbosity\n\n2.0.1\n-----\n* optional \"per task\" verbosity level\n* POSSIBLE INCOMPATIBLE CHANGE: verbosity levels has been shifted (set as documented in the README)\n\n2.0.0\n-----\n* Split Task model into TaskBase + TaskRQ\n* Implement TaskThreaded (experimental)\n* Drop Django1 and Python2.7\n* cleanup\n\n1.5.1\n-----\n* Moved required imports inside Job.run() so it can be more easily replicated for any needed customization\n* Simpler queues settings\n* Revamped unit testing\n* Cleanup\n\n1.5.0\n-----\n* Support for updating the tasks listing dynamically in the frontend\n* Example provided for task_add_api() javascript helper\n* POSSIBLY INCOMPATIBLE CHANGE: duration and duration_display are now methods rather then properties\n* it traslation for UI messages\n\n1.4.7\n-----\n* Added optional \"created_by\" parameter to TaskCommand utility\n\n1.4.6\n-----\n* replace namespace \"django.jQuery\" with more generic \"jQuery\" in js helpers\n* update example project\n* unit tests added to \"tasks\" app in example project\n\n1.4.5\n-----\n* Quickstart revised in README\n\n1.4.4\n-----\n* Task.get_logger() is now publicly available\n\n1.4.3\n-----\n* restore compatibility with Django 1.11; upgrade rq and django-rq requirements\n\n1.4.2\n-----\n* tasks_info_api() optimized to use a single query\n\n1.4.1\n-----\n* Cleanup: remove redundant REJECTED status\n\n1.4.0\n-----\n* Update requirements (Django >= 2.0, django-rq>=2.0)\n\n1.3.10\n------\n* Use exceptions.TaskError class when raising specific exceptions\n\nv1.3.9\n------\n* removed forgotten pdb.set_trace() in revoke_pending_tasks()\n\nv1.3.8\n------\n* cleanup\n\nv1.3.7\n------\n* cleanup\n\nv1.3.6\n------\n* log queue name\n\nv1.3.5\n------\n* Readme updated\n\nv1.3.4\n------\n* javascript helper views\n* fix Task.set_progress(0)\n\nv1.3.3\n------\n* make sure fields are unique in TaskAdmin fieldsets\n\nv1.3.1\n------\n* unit tests verified with Python 2.7/3.6/3.7 and Django 1.10/2.0\n\nv1.3.0\n------\n* cleanup\n* classify as production/stable\n\nv1.2.5\n------\n* Tested with Django 2.0 and Python 3.7\n* Rename `async` to `is_async` to support Python 3.7\n* DJANGOTASK_REJECT_IF_NO_WORKER_ACTIVE_FOR_QUEUE app setting added\n* example cleanup\n\nv1.2.4\n------\n* API to create and run task via ajax\n\nv1.2.3\n------\n* TaskAdmin: postpone autorun to response_add() to have M2M task parameters (if any) ready\n* Task.clone() supports M2M parameters\n\nv1.2.2\n------\n* property to change verbosity dinamically\n\nv1.2.1\n------\n* util revoke_pending_tasks() added\n\nv1.2.0\n------\n* DJANGOTASK_JOB_TRACE_ENABLED setting added to enable low level tracing in Job.run()\n* Added missing import in utils.py\n\nv1.1.3\n------\n* cleanup: remove get_child() method being Task an abstract class\n* fix: skip Task model (being abstract) in dump_all_tasks and delete_all_tasks management commands\n* generic get_model_from_id() helper\n* Job.on_complete() callback\n\nv1.1.2\n------\n* provide list of pending and completed task status\n\nv1.1.0\n------\n* INCOMPATIBLE CHANGE: Make model Task abstract for better listing performances\n* redundant migrations removed\n* convert request.body to string for Python3\n* pretty print task params in log when task completes\n\nv0.3.8\n------\n* return verbose name as description\n\nv0.3.7\n------\n* description added to Task model\n\nv0.3.6\n------\n* More fixes\n\nv0.3.5\n------\n* log to field fix\n\nv0.3.4\n------\n* log quickview + view\n\nv0.3.3\n------\n* Optionally log to either file or text field\n* Management commands to dump and delete all tasks\n\nv0.3.2\n------\n* search by task.id and task.job_id\n\nv0.3.1\n------\n* Keep track of task mode (sync or async)\n\nv0.3.0\n------\n* new class Job provided to share task-related logic among job funcs\n\nv0.2.0\n------\n* fixes for django 2.x\n\nv0.1.15\n-------\n* hack for prepopulated_fields\n\nv0.1.14\n-------\n* css fix\n\nv0.1.13\n-------\n* minor fixes\n\nv0.1.12\n-------\n* Deferred Task retrieval to avoid job vs. Task race condition\n* Improved Readme\n\nv0.1.11\n-------\n* superuser can view all tasks, while other users have access to their own tasks only\n* js fix\n\nv0.1.10\n-------\n* prevent task.failure_reason overflow\n\nv0.1.9\n------\n* app settings\n\nv0.1.8\n------\n* always start job from task.run() to prevent any possible race condition\n* task.run(async) can now accept async=False\n\nv0.1.7\n------\n* javascript: use POST to retrieve tasks state for UI update to prevent URL length limit exceed\n\nv0.1.6\n------\n* Improved ui for TaskAdmin\n* Fix unicode literals for Python3\n\nv0.1.5\n------\n* fixes for Django 1.10\n* send_email management command example added\n\nv0.1.4\n------\n* Fix OneToOneRel import for Django < 1.9\n\nv0.1.3\n------\n* Polymorphic behaviour or Task.get_child() restored\n\nv0.1.2\n------\n* TaskCommand.run_task() renamed as TaskCommand.run_job()\n* New TaskCommand.run_task() creates a Task, then runs it;\n this guarantees that something is traced even when background job will fail\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/morlandi/django-task", "keywords": "django-task", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-task", "package_url": "https://pypi.org/project/django-task/", "platform": "", "project_url": "https://pypi.org/project/django-task/", "project_urls": { "Homepage": "https://github.com/morlandi/django-task" }, "release_url": "https://pypi.org/project/django-task/2.0.5/", "requires_dist": null, "requires_python": "", "summary": "A Django app to run new background tasks from either admin or cron, and inspect task history from admin; based on django-rq", "version": "2.0.5", "yanked": false, "yanked_reason": null }, "last_serial": 12446895, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6e6c4c7a2bc08c56303e81d1d6d1bc24", "sha256": "a0f11cfaa363631f0dfb995cb7c292bda2f345438936ecc8c91fddafc736678c" }, "downloads": -1, "filename": "django_task-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6e6c4c7a2bc08c56303e81d1d6d1bc24", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25618, "upload_time": "2017-08-25T17:49:57", "upload_time_iso_8601": "2017-08-25T17:49:57.167686Z", "url": "https://files.pythonhosted.org/packages/61/c2/903f8401a4a9acad1e8f48b77e39c9e1a88b85aacd51f1cff413ed21dafc/django_task-0.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "206c43b27adfb480dbfa1fe62e9038b6", "sha256": "34ad84ccac67999b588bf5ea95fa33b5c460f8f93c5c3a47840d69739162d7fa" }, "downloads": -1, "filename": "django_task-0.1.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "206c43b27adfb480dbfa1fe62e9038b6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28060, "upload_time": "2017-11-27T23:00:49", "upload_time_iso_8601": "2017-11-27T23:00:49.138470Z", "url": "https://files.pythonhosted.org/packages/eb/49/349796f0181556f21404ae0ce80e831c504f9f8a110fa656de20fd16e012/django_task-0.1.10-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "1893f7e0ce40fa2030ec229cd9fc3db7", "sha256": "edd4c407fe2c44fa9d05cfda78407ae9014752b09c8d3c3eb4c57a1579ec2754" }, "downloads": -1, "filename": "django_task-0.1.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1893f7e0ce40fa2030ec229cd9fc3db7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28301, "upload_time": "2017-12-08T22:35:27", "upload_time_iso_8601": "2017-12-08T22:35:27.468128Z", "url": "https://files.pythonhosted.org/packages/01/81/995874694a295675d9b346e5bcf500655c91f6ae92ad1a6b1a0cec0c8b1c/django_task-0.1.11-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "75de18f33f38e14f5422769b12a6168b", "sha256": "6f1506b9b5630f9b007dfd6a9cd15c5ec36077998afc7fc75520640005f38677" }, "downloads": -1, "filename": "django_task-0.1.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "75de18f33f38e14f5422769b12a6168b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30544, "upload_time": "2017-12-23T11:58:29", "upload_time_iso_8601": "2017-12-23T11:58:29.042529Z", "url": "https://files.pythonhosted.org/packages/8b/d7/639d38b0dbf319fd5efd8c2c884adc73f6d9b2a10971ddefff018bd03e1b/django_task-0.1.12-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "25858066e099e2c0171bdb9359fcc79f", "sha256": "f27188fb4766b7a45925e026e7680e406e686cdfa7d9422511dde74378193b76" }, "downloads": -1, "filename": "django_task-0.1.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "25858066e099e2c0171bdb9359fcc79f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30445, "upload_time": "2017-12-27T07:46:04", "upload_time_iso_8601": "2017-12-27T07:46:04.668130Z", "url": "https://files.pythonhosted.org/packages/df/9a/d71d577c8f416492735a5d954c6bf0436bf0b20271feddd4c2113f8344d9/django_task-0.1.13-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "4d3aa19f589973f95614409971d85423", "sha256": "446645db15f5369c105449b4bc3a7a6b6fc8b976134ed4a3fbeac3924edaec52" }, "downloads": -1, "filename": "django_task-0.1.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d3aa19f589973f95614409971d85423", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30548, "upload_time": "2018-01-03T07:42:06", "upload_time_iso_8601": "2018-01-03T07:42:06.856496Z", "url": "https://files.pythonhosted.org/packages/3e/46/a1553bf590af02705dc9c70c86fc72f4befd5e2e47b87fe93ce5ba48a9c2/django_task-0.1.14-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "fe300553ee45786860ebb1f2520538fd", "sha256": "1b59d05697fe6787806e347a6354a98093247c151e441765d15d7e13953c0149" }, "downloads": -1, "filename": "django_task-0.1.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fe300553ee45786860ebb1f2520538fd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30705, "upload_time": "2018-01-03T11:41:03", "upload_time_iso_8601": "2018-01-03T11:41:03.489396Z", "url": "https://files.pythonhosted.org/packages/af/47/f9155570ba09fd0bf48bf0294b34a7d8c14afcd84368f10a15ba53e029e8/django_task-0.1.15-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b15d381a13e4cd3a1d92c8e4327db537", "sha256": "b990aee06108444ac0e38d75767aaed12c1344ff8638e42c643eafe991f5cfc9" }, "downloads": -1, "filename": "django_task-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b15d381a13e4cd3a1d92c8e4327db537", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25604, "upload_time": "2017-08-27T09:20:58", "upload_time_iso_8601": "2017-08-27T09:20:58.917421Z", "url": "https://files.pythonhosted.org/packages/d6/8a/dad35712d8777a8d1861d15abee4520bcffe14b3b41f46656b4a86667481/django_task-0.1.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5135ba4ce34b393790fc6cf4bc2a941c", "sha256": "04d6a82db2bbddcd376a9b1f850a81f464bd1cef845d7d3243d64365cf118d66" }, "downloads": -1, "filename": "django_task-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5135ba4ce34b393790fc6cf4bc2a941c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25829, "upload_time": "2017-08-28T09:50:59", "upload_time_iso_8601": "2017-08-28T09:50:59.951006Z", "url": "https://files.pythonhosted.org/packages/b4/ca/f25f011b3c0e9baf1ba29075938590076be50394e842d026228b33b9b4c5/django_task-0.1.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b42db707a8dc7ab7ad375fbb5991e18d", "sha256": "1956820d6269549e0d15f69678288c115e49c004497e9889bf61e606cb630a4e" }, "downloads": -1, "filename": "django_task-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b42db707a8dc7ab7ad375fbb5991e18d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25828, "upload_time": "2017-08-28T22:05:49", "upload_time_iso_8601": "2017-08-28T22:05:49.228863Z", "url": "https://files.pythonhosted.org/packages/5c/62/771bce63297153e71e1f6797d91f7ef46f5ffa072713e347ad20486b6843/django_task-0.1.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "8643c51289afb8567947a7e7d3ae15cf", "sha256": "6bc98814e5ffabcace71e3ed5fb4dd4e1175cbfa14632f3d21612eabbf94c6fc" }, "downloads": -1, "filename": "django_task-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8643c51289afb8567947a7e7d3ae15cf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26324, "upload_time": "2017-10-12T21:01:01", "upload_time_iso_8601": "2017-10-12T21:01:01.487646Z", "url": "https://files.pythonhosted.org/packages/2f/35/6679657bbfe659202d2e435e67ada49796d7aea049fb50dbf2178fb711d9/django_task-0.1.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "309375c83f2b64497c6ceb1ec93ad21d", "sha256": "609a4f8e0d57621884d6fc5dac17307d98635634f455a1451d391f2f5ef5f864" }, "downloads": -1, "filename": "django_task-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "309375c83f2b64497c6ceb1ec93ad21d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26814, "upload_time": "2017-10-22T06:49:02", "upload_time_iso_8601": "2017-10-22T06:49:02.474699Z", "url": "https://files.pythonhosted.org/packages/6b/08/d233a743120bbb14a28441741adfd97d02d3accf453f96bc9bf3b01c80fa/django_task-0.1.6-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "fa3bd9b146129659e30cdc86eb10a350", "sha256": "eafe9fddd076d8806d8f01ce604fae9d19f9a77630f1a0ae1454573574002fe3" }, "downloads": -1, "filename": "django_task-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fa3bd9b146129659e30cdc86eb10a350", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27096, "upload_time": "2017-11-11T17:38:44", "upload_time_iso_8601": "2017-11-11T17:38:44.999513Z", "url": "https://files.pythonhosted.org/packages/f5/7e/7c73f3b774728b1b16e0c4dc5b7b451b41d58f21f1d9c327f1683f45dddf/django_task-0.1.7-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "a19cebde886fd07685af5cbcb4a3151c", "sha256": "16c4544b69a84903e91b95966d75db586fe67004616f7f13a77024acdaddc45b" }, "downloads": -1, "filename": "django_task-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a19cebde886fd07685af5cbcb4a3151c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27105, "upload_time": "2017-11-15T23:50:54", "upload_time_iso_8601": "2017-11-15T23:50:54.379983Z", "url": "https://files.pythonhosted.org/packages/b3/77/deb50eaba3dc44d0fd2b1816315a64ca7a1d3545f272c482d972a16a60ca/django_task-0.1.8-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "4ec1e9ca5753fd34e6bd7c4f685a9d37", "sha256": "f5001e5f97ee6fe6b7f17e82b081634ba06c84d9758f2fe6c5bcb936dfb1693e" }, "downloads": -1, "filename": "django_task-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4ec1e9ca5753fd34e6bd7c4f685a9d37", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27818, "upload_time": "2017-11-17T10:26:08", "upload_time_iso_8601": "2017-11-17T10:26:08.008246Z", "url": "https://files.pythonhosted.org/packages/f3/91/86875d56c276f158dff8dae1f652d0d5945e4993dff53b748cb51a23da99/django_task-0.1.9-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "b0ced9ab1ee2f253f9e30fd44deec555", "sha256": "071fee1191bd0b7ef364f74f7ace3253d685f4de90d6e0a1141bc1b89b0d4f59" }, "downloads": -1, "filename": "django_task-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b0ced9ab1ee2f253f9e30fd44deec555", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31253, "upload_time": "2018-01-10T09:09:49", "upload_time_iso_8601": "2018-01-10T09:09:49.047223Z", "url": "https://files.pythonhosted.org/packages/2a/4a/ca141458610e3d10b688b3599cb4bb63b787a3ac56da46b0f0fe5541c6e4/django_task-0.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "9f8c099a4420b5eb8ce8547a578cfdd2", "sha256": "c0f1fda389298c934db053a63003670ee3c3319ddaf701cbce2a6fad0335d2e5" }, "downloads": -1, "filename": "django_task-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f8c099a4420b5eb8ce8547a578cfdd2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33768, "upload_time": "2018-01-26T16:50:45", "upload_time_iso_8601": "2018-01-26T16:50:45.439531Z", "url": "https://files.pythonhosted.org/packages/a8/fd/657cec5d6cc2f6adafb4556bc0cfb64146b899b687260ce60d8f006bc9d7/django_task-0.3.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "1cca4fab0db34d8e053cad0660331879", "sha256": "c27744033ad8500915532ee81f132b3d68d51b60c9277746f05becc3eab208e3" }, "downloads": -1, "filename": "django_task-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1cca4fab0db34d8e053cad0660331879", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34405, "upload_time": "2018-02-01T12:04:41", "upload_time_iso_8601": "2018-02-01T12:04:41.838773Z", "url": "https://files.pythonhosted.org/packages/07/20/576a126812e2276e1b74525c817e3f442e460faf451a9c3b34cc1d631bbf/django_task-0.3.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.10": [ { "comment_text": "", "digests": { "md5": "72ca07a39333a50d52f74fe2f69b201a", "sha256": "8b03c7ba42521ead4744e6bde21a904c319091ba2dd077f4b9cd283bf5d0b89a" }, "downloads": -1, "filename": "django_task-0.3.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "72ca07a39333a50d52f74fe2f69b201a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30699, "upload_time": "2019-02-01T14:09:20", "upload_time_iso_8601": "2019-02-01T14:09:20.175164Z", "url": "https://files.pythonhosted.org/packages/99/24/d33ed116e62619c469b6da124ddca821998aa2e49c5cf053cb6f50b390b9/django_task-0.3.10-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "3830431728fc1ecbc7a64297aa3983d7", "sha256": "ee4ca1a736f0ed827132f58ec94b27479544d88dc2928af955a9d88e1d300566" }, "downloads": -1, "filename": "django_task-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3830431728fc1ecbc7a64297aa3983d7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34420, "upload_time": "2018-02-07T12:45:44", "upload_time_iso_8601": "2018-02-07T12:45:44.504229Z", "url": "https://files.pythonhosted.org/packages/11/15/5b08b8232d8d63d483fc5660e86128b04bffad8d9734afb7e756283b4de5/django_task-0.3.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "5ae6127ae9b8db764489d5e26f949c3e", "sha256": "c1b0b5db33dfa7628d2b57413f2704dd0fcf9472dd00a34a17b72f178a3e6d18" }, "downloads": -1, "filename": "django_task-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ae6127ae9b8db764489d5e26f949c3e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36471, "upload_time": "2018-02-25T19:01:39", "upload_time_iso_8601": "2018-02-25T19:01:39.447024Z", "url": "https://files.pythonhosted.org/packages/30/85/239ab0465728f9015b0984767be363b85a2efc76182cfb76b830cf61675a/django_task-0.3.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "c9a656dd2e201629ac25a4e53ced35b5", "sha256": "37e4795b3a56b05cad2e86c5892c629a38f22863d615ff3f4760e5126b3d12d9" }, "downloads": -1, "filename": "django_task-0.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c9a656dd2e201629ac25a4e53ced35b5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36484, "upload_time": "2018-02-26T07:33:16", "upload_time_iso_8601": "2018-02-26T07:33:16.184800Z", "url": "https://files.pythonhosted.org/packages/2e/48/8c51450ee18cd5cc990df711a09887087bf9be6ff9574d181979f8527bc1/django_task-0.3.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "1c8019dfff4102f6f1cfbfec62e7349b", "sha256": "821cf426c55cf2bfa61d79be3fff0c0632eb702c6216c2192bd729ddcf7afea1" }, "downloads": -1, "filename": "django_task-0.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1c8019dfff4102f6f1cfbfec62e7349b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36515, "upload_time": "2018-02-27T16:59:06", "upload_time_iso_8601": "2018-02-27T16:59:06.155528Z", "url": "https://files.pythonhosted.org/packages/31/83/81c990b168c3d1e460178b16ed4dd77d918596b0e7f2548340032b8fc50d/django_task-0.3.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "ac4485b615842339cd52c449b691c605", "sha256": "3892afc9246ab71a868778fb5ff8c916b3996628252346e0da6bdd0c3846e28b" }, "downloads": -1, "filename": "django_task-0.3.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ac4485b615842339cd52c449b691c605", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36468, "upload_time": "2018-02-27T22:58:57", "upload_time_iso_8601": "2018-02-27T22:58:57.393763Z", "url": "https://files.pythonhosted.org/packages/7c/9b/bfd6b73265262068414640b2978ae75fc9bc70bf215df1a9c17ca4c563e6/django_task-0.3.6-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "9f7fb4c4b0caed54d46f3251bac13df8", "sha256": "b7380b2ebfe4d8f0a68b8c9a2f95d12257d2627c7a90a83e1bca3d5ad7abef36" }, "downloads": -1, "filename": "django_task-0.3.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f7fb4c4b0caed54d46f3251bac13df8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37065, "upload_time": "2018-03-16T18:27:05", "upload_time_iso_8601": "2018-03-16T18:27:05.424000Z", "url": "https://files.pythonhosted.org/packages/ef/c4/0fa82aec92e8a091a0f48e926dd678a5e022f9f1780c3b7d2cf13cf306ae/django_task-0.3.7-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "663f6cdade318ca0cf80e208982aeda9", "sha256": "594280abad4d644128dcf7d45cba82f10885de2654813f426aba7c3ed1057e06" }, "downloads": -1, "filename": "django_task-0.3.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "663f6cdade318ca0cf80e208982aeda9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37079, "upload_time": "2018-03-23T14:54:49", "upload_time_iso_8601": "2018-03-23T14:54:49.455849Z", "url": "https://files.pythonhosted.org/packages/56/fd/fab33c64758fad45264bee861e6c836de3058e8df51fd420e8c140847bfe/django_task-0.3.8-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "5c52fc1fbad7cc9780d8ec0078a59dee", "sha256": "613a2af9e36a0dd1de6c110c327f3ee39166ba7b303e56c44e7500abda254a0d" }, "downloads": -1, "filename": "django_task-0.3.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5c52fc1fbad7cc9780d8ec0078a59dee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30658, "upload_time": "2019-02-01T14:01:43", "upload_time_iso_8601": "2019-02-01T14:01:43.709560Z", "url": "https://files.pythonhosted.org/packages/3c/87/8de960f85e8ca991d648b163b5677cf16265238a8b86879662a882e8dbb8/django_task-0.3.9-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "dbe9b6e709efa3888a2e44da3c1a39a2", "sha256": "58f54dd98aa63f94ae884f619a3125ab3364995723313c57319d8995f57d506f" }, "downloads": -1, "filename": "django_task-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dbe9b6e709efa3888a2e44da3c1a39a2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38538, "upload_time": "2018-05-08T16:46:54", "upload_time_iso_8601": "2018-05-08T16:46:54.669173Z", "url": "https://files.pythonhosted.org/packages/96/26/5ed02e0bd0712bba1967505945e880db9439e59823738698fd42125f8b53/django_task-1.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "7caea5fda7dff87238b53c823944ee57", "sha256": "9ebed7dff23dcf8a3626244de9513567b3a0b33c9b892411325aca80f318fd91" }, "downloads": -1, "filename": "django_task-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7caea5fda7dff87238b53c823944ee57", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32980, "upload_time": "2018-05-30T13:00:07", "upload_time_iso_8601": "2018-05-30T13:00:07.162464Z", "url": "https://files.pythonhosted.org/packages/3b/6b/ea2949d3264aff66b6f8b03d1266a754f94d7781af9aad4ed6c4b9e509ea/django_task-1.1.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "b58cc6dea99612510bcd29d82544fe05", "sha256": "c97ce2fba104fda37399f0c74b85185c5d88833fd20ededd977b7d18eb19b681" }, "downloads": -1, "filename": "django_task-1.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b58cc6dea99612510bcd29d82544fe05", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33509, "upload_time": "2018-06-07T09:16:44", "upload_time_iso_8601": "2018-06-07T09:16:44.872054Z", "url": "https://files.pythonhosted.org/packages/41/fb/482fc05192c372aa7d8f6369ad3f20bf0b7f2a704312fe04108c0fa93382/django_task-1.1.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "81c398da6b7a93c7b7232d31c9b086ee", "sha256": "c5681fdacf6f528035e0d0b607a33f6f802fc93b1923543d6892fcbf6f7da8ed" }, "downloads": -1, "filename": "django_task-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "81c398da6b7a93c7b7232d31c9b086ee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33851, "upload_time": "2018-06-09T09:31:25", "upload_time_iso_8601": "2018-06-09T09:31:25.781876Z", "url": "https://files.pythonhosted.org/packages/e6/d2/2c66e0ceff7bdda29719aca7702e99793e8e5db350efd0361edb8a5180f0/django_task-1.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "f355e692091cef44dde8e8ac63caecb9", "sha256": "aad45157c29cf47d2e7b5eb76cf7f28a8b9e03d4fe26466b177ca790c18db50c" }, "downloads": -1, "filename": "django_task-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f355e692091cef44dde8e8ac63caecb9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34567, "upload_time": "2018-06-13T17:01:19", "upload_time_iso_8601": "2018-06-13T17:01:19.966072Z", "url": "https://files.pythonhosted.org/packages/7e/90/3506dfee973c47e40305b73deff3fe6ec166020a0c67cc4e2af43fe128e3/django_task-1.2.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "206f7d1a5bfdf6b72aff25b20855acf8", "sha256": "f11ff3180d7dc3d885b1a44ae6bb8d2ef3f3a840d73124ff8499384abb6dc33c" }, "downloads": -1, "filename": "django_task-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "206f7d1a5bfdf6b72aff25b20855acf8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34732, "upload_time": "2018-06-28T18:04:24", "upload_time_iso_8601": "2018-06-28T18:04:24.952596Z", "url": "https://files.pythonhosted.org/packages/6b/ba/6af35760f2b10fcfe3a5692c09b58832a028748a4c42e75cf2bd9c277449/django_task-1.2.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "4708a160266da811a310e4d0693abc96", "sha256": "13bb625ad66182ddd65db4acebe2f43e7fdb6e98bf495195e82a60c209f886ef" }, "downloads": -1, "filename": "django_task-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4708a160266da811a310e4d0693abc96", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35358, "upload_time": "2018-07-04T17:04:15", "upload_time_iso_8601": "2018-07-04T17:04:15.626827Z", "url": "https://files.pythonhosted.org/packages/c3/d2/b268a749d8f2030cf0eb53499fb8bab614e676e9afd50f76d2630de4b333/django_task-1.2.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "59b50ce049c1336dfe1f510d8ef1a325", "sha256": "69801ac0ffea9fb0c16f37cd101674ddce5db509f200df4fa8c49fb392bc4135" }, "downloads": -1, "filename": "django_task-1.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "59b50ce049c1336dfe1f510d8ef1a325", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35854, "upload_time": "2018-07-05T00:55:21", "upload_time_iso_8601": "2018-07-05T00:55:21.523406Z", "url": "https://files.pythonhosted.org/packages/a8/7a/ee4fcd1a6fb8af9bd7e449218d20a4c580e5dca777c2acfa7eb0fb8c89a0/django_task-1.2.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "c63b697f476809ffbf89ae1cf816b1e5", "sha256": "1f471769f0c72cbc4b4ac8db849041dddca474598ee46c0692987c7f127b4a50" }, "downloads": -1, "filename": "django_task-1.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c63b697f476809ffbf89ae1cf816b1e5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 29234, "upload_time": "2018-07-28T10:19:57", "upload_time_iso_8601": "2018-07-28T10:19:57.655156Z", "url": "https://files.pythonhosted.org/packages/40/5b/a6d4c59e5323e9bb0794bb7d1fafb2208709e4e67261f1033584c441e836/django_task-1.2.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "5ddef1a4b2c0a797dce7358f0d176761", "sha256": "7dff12512df0e3cbc367bc2609130dd6b36c2c31cfd9d81d13588cec38887b76" }, "downloads": -1, "filename": "django_task-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ddef1a4b2c0a797dce7358f0d176761", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 29312, "upload_time": "2018-07-29T08:12:09", "upload_time_iso_8601": "2018-07-29T08:12:09.263001Z", "url": "https://files.pythonhosted.org/packages/8c/e1/5c0d857646a57b2f3478ea3187f87fed384138555925c2fadb205b6fe4c8/django_task-1.3.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "dedc8c257d4bfb6601361f13c3d8e773", "sha256": "a00af38ff30dfe47096601934ba909dbd974bf302c7e1fac0f4131a1dc48fdda" }, "downloads": -1, "filename": "django_task-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dedc8c257d4bfb6601361f13c3d8e773", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37067, "upload_time": "2018-07-29T19:11:35", "upload_time_iso_8601": "2018-07-29T19:11:35.803264Z", "url": "https://files.pythonhosted.org/packages/46/41/5c35f0eaf9d5e12271c37f4746834d9a86d9f280b2b3087fa57fa037fa45/django_task-1.3.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.10": [ { "comment_text": "", "digests": { "md5": "0aa2f5d5647917c49eb805a3c2c51db5", "sha256": "fcde42be4f9d16bb94080a88cb6e3393fe1405f6a7ada6c8ad0efee723a9a672" }, "downloads": -1, "filename": "django_task-1.3.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0aa2f5d5647917c49eb805a3c2c51db5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34005, "upload_time": "2019-06-03T04:51:41", "upload_time_iso_8601": "2019-06-03T04:51:41.576477Z", "url": "https://files.pythonhosted.org/packages/ac/d9/af1e399e012fba658dc367350dc05bf63651aca2bd0f68b59fc9a1df574b/django_task-1.3.10-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "b540efd345895b6b90d40cc7ad9100b9", "sha256": "83095f5d4ae05430d75c61fe68c4118b0e5ceb26a086eaf417cbd674b460dc2e" }, "downloads": -1, "filename": "django_task-1.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b540efd345895b6b90d40cc7ad9100b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36797, "upload_time": "2018-10-11T16:15:51", "upload_time_iso_8601": "2018-10-11T16:15:51.180191Z", "url": "https://files.pythonhosted.org/packages/3a/20/60f141a66b35498efb0db974cfa2fa7d79272b9cdeacfe57d4ddce1fe74f/django_task-1.3.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "85bed9d2b29e7493f3e38004ff605da4", "sha256": "5862156bf4d7d6e289f86c9505e64b41e3e294f82ca00f5202320ef4b04e02bb" }, "downloads": -1, "filename": "django_task-1.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "85bed9d2b29e7493f3e38004ff605da4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36892, "upload_time": "2018-10-11T16:25:17", "upload_time_iso_8601": "2018-10-11T16:25:17.450065Z", "url": "https://files.pythonhosted.org/packages/fe/a6/071605793522d97d84115608d98caafd701a33e3cd4753df6a6ed08a5572/django_task-1.3.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "fc4a775aadce090b4be6e093e4aff9b7", "sha256": "6e7b49373d1847f8072f99c14457017ca6f03250fac29a1c0b2e56dbf5e48974" }, "downloads": -1, "filename": "django_task-1.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fc4a775aadce090b4be6e093e4aff9b7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 40022, "upload_time": "2018-10-15T16:54:45", "upload_time_iso_8601": "2018-10-15T16:54:45.387900Z", "url": "https://files.pythonhosted.org/packages/74/85/30226715a93f26c154a4ef79700d1c741620dcc22fbeafe008b6ede3f81d/django_task-1.3.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "f37935d570579c311f7039deaccaa78c", "sha256": "a98c4295e958afc007a497954916120fc4bc97f90499e362baa37759ed047c8f" }, "downloads": -1, "filename": "django_task-1.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f37935d570579c311f7039deaccaa78c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33730, "upload_time": "2019-02-01T14:03:05", "upload_time_iso_8601": "2019-02-01T14:03:05.032387Z", "url": "https://files.pythonhosted.org/packages/21/da/26b1d9d0300aecbb8aabc96d48826a720934be431e578e56d7d5eb295d97/django_task-1.3.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.8": [ { "comment_text": "", "digests": { "md5": "726a8e839efcd49e200eb2d1fedf37f4", "sha256": "6703f7d0280a81f849ce6631348cded040424fd756cf46eb0616f07f6a5a7e93" }, "downloads": -1, "filename": "django_task-1.3.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "726a8e839efcd49e200eb2d1fedf37f4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33718, "upload_time": "2019-05-31T15:35:02", "upload_time_iso_8601": "2019-05-31T15:35:02.673805Z", "url": "https://files.pythonhosted.org/packages/2c/cc/3a75f82847a07f4d82f322c7ff8902520660f1577793848a39497cd71c9e/django_task-1.3.8-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.3.9": [ { "comment_text": "", "digests": { "md5": "46757ab601f796659dcf6f47f1a83428", "sha256": "759396c2252e323fa9eb972f7566f8ce3d863f85d46ecde34e2ea77256fa964d" }, "downloads": -1, "filename": "django_task-1.3.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "46757ab601f796659dcf6f47f1a83428", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33733, "upload_time": "2019-06-02T16:41:52", "upload_time_iso_8601": "2019-06-02T16:41:52.553172Z", "url": "https://files.pythonhosted.org/packages/18/fc/a0bc5cae76d414cd17f6d042a666b5cb73326bd54105f816fe57ee56119a/django_task-1.3.9-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "beb1a1892bc6a98def031f915c6422f0", "sha256": "0ef9e4cbc26fb87e28951d5afd1021e5b195af3fc90d15c7088e8f01fff3dc4a" }, "downloads": -1, "filename": "django_task-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "beb1a1892bc6a98def031f915c6422f0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33989, "upload_time": "2019-06-14T06:37:28", "upload_time_iso_8601": "2019-06-14T06:37:28.355453Z", "url": "https://files.pythonhosted.org/packages/5a/4e/50e959628d24bfc16cd71b73e4d6016344cc10422220a3c91e5bc6a5b632/django_task-1.4.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "08be5b59e98309020baa92add83f63f4", "sha256": "fcd27a579ff28b85844fdd839a89cde4b6e09922a41f379a4c8d40ce5b4d4dcd" }, "downloads": -1, "filename": "django_task-1.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "08be5b59e98309020baa92add83f63f4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34007, "upload_time": "2019-08-05T22:07:02", "upload_time_iso_8601": "2019-08-05T22:07:02.899969Z", "url": "https://files.pythonhosted.org/packages/2b/f9/79628c76372c285782aa4a52cbc46ff29ee914dd724aa13a5c7b92ad2a01/django_task-1.4.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "8b58878c4f8835a6b2ae7b542c84d8ef", "sha256": "7e61845895cf9643850237f9952562dcd4feddbd4676f4f016664ff718c59f42" }, "downloads": -1, "filename": "django_task-1.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8b58878c4f8835a6b2ae7b542c84d8ef", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 41140, "upload_time": "2019-08-07T10:36:22", "upload_time_iso_8601": "2019-08-07T10:36:22.724122Z", "url": "https://files.pythonhosted.org/packages/6b/21/a22e3d28dde24d22719b3dcd10b676a574637e0da2ae7498349eed35fcd2/django_task-1.4.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "59b149dc9de43fa81f82ba8344a94a77", "sha256": "a3d4b68ec5a46924f227886f90612f208e0052d07844348a80fae1eab1e3cb95" }, "downloads": -1, "filename": "django_task-1.4.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "59b149dc9de43fa81f82ba8344a94a77", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34446, "upload_time": "2019-10-01T16:40:24", "upload_time_iso_8601": "2019-10-01T16:40:24.839070Z", "url": "https://files.pythonhosted.org/packages/03/16/e635f7262a777105190c3c3d504be68ff849654ed6c8d057c0e321eae477/django_task-1.4.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "5e4032db4276a32c27f16897a00ac899", "sha256": "610c2838e03658159b06fb16c9b4b19bd55707aad8c1a610fada7377e9aaf648" }, "downloads": -1, "filename": "django_task-1.4.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5e4032db4276a32c27f16897a00ac899", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34488, "upload_time": "2019-10-07T17:51:37", "upload_time_iso_8601": "2019-10-07T17:51:37.402602Z", "url": "https://files.pythonhosted.org/packages/56/e9/0b0309b63ad053eb43b927d1cec9a9c63f2aef0a1bf0875f82b8364e7a24/django_task-1.4.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.5": [ { "comment_text": "", "digests": { "md5": "8ca14938cff739614895f65724da95f3", "sha256": "dc7f58b8d8ae71bef937215e5ec187d183e952937ab58c684d69b8b434530455" }, "downloads": -1, "filename": "django_task-1.4.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ca14938cff739614895f65724da95f3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35176, "upload_time": "2019-10-13T08:08:52", "upload_time_iso_8601": "2019-10-13T08:08:52.076315Z", "url": "https://files.pythonhosted.org/packages/0c/0c/be38b105231ad2bb8310ba1efccf1c7612f31f3a044581638842dd1a103c/django_task-1.4.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.6": [ { "comment_text": "", "digests": { "md5": "00a1dff1fe6144da8a124ef35a668ffd", "sha256": "e9342e5abc3f7b5c44ba7f3824a87b48b342a346b06841a56108958a4b751e60" }, "downloads": -1, "filename": "django_task-1.4.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "00a1dff1fe6144da8a124ef35a668ffd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35355, "upload_time": "2019-10-14T14:52:20", "upload_time_iso_8601": "2019-10-14T14:52:20.248277Z", "url": "https://files.pythonhosted.org/packages/ee/3b/e398dabc2814ec4aba97dd09bbdb82ca7649ec4ad1b8951e5fd325f64673/django_task-1.4.6-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.4.7": [ { "comment_text": "", "digests": { "md5": "9283186edf7f24029e868ce0743eefbe", "sha256": "65e88b1bc927d302ff5f47ff1f0d428fd64a8866a6ccce6b3fb3d518ef7bbc22" }, "downloads": -1, "filename": "django_task-1.4.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9283186edf7f24029e868ce0743eefbe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35563, "upload_time": "2019-10-15T10:10:58", "upload_time_iso_8601": "2019-10-15T10:10:58.037345Z", "url": "https://files.pythonhosted.org/packages/cb/72/75548c9c8eee1c9fbdf310a6c26308748b08fb27bd1735b2d3b4ce34c30a/django_task-1.4.7-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "8946513b53610157f788a29910957faf", "sha256": "876afea03ac45c62952042ce00e93f036ea4aaaad08a63f3910b8e2adfb195cc" }, "downloads": -1, "filename": "django_task-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8946513b53610157f788a29910957faf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 40469, "upload_time": "2019-10-23T17:10:06", "upload_time_iso_8601": "2019-10-23T17:10:06.918928Z", "url": "https://files.pythonhosted.org/packages/fa/91/052867938bdb15b4d70600a5f12726e6b8b33b530e06d8145048d762aeef/django_task-1.5.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "f45918868cbf79bafaa60639fb4f3bde", "sha256": "af3599af7f94c60f3d1b77577608c5b0fc8e236399845d7ce12ad09f30e63038" }, "downloads": -1, "filename": "django_task-1.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f45918868cbf79bafaa60639fb4f3bde", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42864, "upload_time": "2021-04-26T15:41:28", "upload_time_iso_8601": "2021-04-26T15:41:28.510573Z", "url": "https://files.pythonhosted.org/packages/d0/c6/7c4167cdc8f09a00b7174707db6d5989a3aa4aea3ff57ac7de3677bc28e7/django_task-1.5.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "39b34f5b6ddff67ac9b5832a9f96d0bf", "sha256": "817d1172d32535d80bbacf910df87216583e4230d79929a79b1a1c2f539734e6" }, "downloads": -1, "filename": "django_task-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39b34f5b6ddff67ac9b5832a9f96d0bf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42342, "upload_time": "2021-04-26T16:28:39", "upload_time_iso_8601": "2021-04-26T16:28:39.523210Z", "url": "https://files.pythonhosted.org/packages/bc/e4/8561842052d3eb7270f7e09b7a3ad8e384f474ba6fd14253e1ef80c0d1a1/django_task-2.0.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "cd666035f4252d79586a6f3ec23dcc43", "sha256": "15a2995a30e61d06680d77db8edb22c4c681158ce066ec80ce17f4173084a8c1" }, "downloads": -1, "filename": "django_task-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cd666035f4252d79586a6f3ec23dcc43", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42524, "upload_time": "2021-06-13T22:05:45", "upload_time_iso_8601": "2021-06-13T22:05:45.584813Z", "url": "https://files.pythonhosted.org/packages/75/ba/f1cb38f19ff3ab813595d3c50350443ca9f035d693246d9c20db2aab896b/django_task-2.0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "380d1a5f99e4592138d9ef939376a9e7", "sha256": "ce953a6add953685a92eaba9d39dc6da0789e13be85d1711e5271ba2e296900c" }, "downloads": -1, "filename": "django_task-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "380d1a5f99e4592138d9ef939376a9e7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42712, "upload_time": "2021-10-13T14:27:15", "upload_time_iso_8601": "2021-10-13T14:27:15.074800Z", "url": "https://files.pythonhosted.org/packages/53/1b/b07cce6806f906b15695060aef8ec4ea068af67eb9bb64d37eec6d72cdfd/django_task-2.0.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "8af99248c0122cfddffe92880cbe0843", "sha256": "9491898416c13334e6fa4516d527307bc06e4dc0bd664957980348339c922d45" }, "downloads": -1, "filename": "django_task-2.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8af99248c0122cfddffe92880cbe0843", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42856, "upload_time": "2021-12-27T17:49:50", "upload_time_iso_8601": "2021-12-27T17:49:50.203560Z", "url": "https://files.pythonhosted.org/packages/f7/1d/bc7144f53fb0b6cd2640793ac3ff034cb54c7ce7e17051fa35490c43cf1f/django_task-2.0.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.4": [ { "comment_text": "", "digests": { "md5": "35915a67d1454a7e09fb766cad4becf0", "sha256": "40c8cb2bbed46f61c1376cafff230e95d95f967b8ebdf057c4f959933c16cdb0" }, "downloads": -1, "filename": "django_task-2.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "35915a67d1454a7e09fb766cad4becf0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42861, "upload_time": "2021-12-31T10:05:53", "upload_time_iso_8601": "2021-12-31T10:05:53.021498Z", "url": "https://files.pythonhosted.org/packages/25/69/52eef5be56b4683057fa49767372534144f7ca4ac6041721e9f4d30f8668/django_task-2.0.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "2.0.5": [ { "comment_text": "", "digests": { "md5": "bcf0b2782e42f6a186d912bdedf56ac3", "sha256": "db88fcf7ef4819ef463436bd719a0de726e7e87d3e17f8abbddd214195c8e8d7" }, "downloads": -1, "filename": "django_task-2.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bcf0b2782e42f6a186d912bdedf56ac3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42894, "upload_time": "2021-12-31T10:30:58", "upload_time_iso_8601": "2021-12-31T10:30:58.438270Z", "url": "https://files.pythonhosted.org/packages/a4/07/7c7f9a66b08b27473ac02623407373d7b6f2595d53e2c61b4966d7b0fc72/django_task-2.0.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bcf0b2782e42f6a186d912bdedf56ac3", "sha256": "db88fcf7ef4819ef463436bd719a0de726e7e87d3e17f8abbddd214195c8e8d7" }, "downloads": -1, "filename": "django_task-2.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bcf0b2782e42f6a186d912bdedf56ac3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42894, "upload_time": "2021-12-31T10:30:58", "upload_time_iso_8601": "2021-12-31T10:30:58.438270Z", "url": "https://files.pythonhosted.org/packages/a4/07/7c7f9a66b08b27473ac02623407373d7b6f2595d53e2c61b4966d7b0fc72/django_task-2.0.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }