{ "info": { "author": "Chris Spencer", "author_email": "chrisspen@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 6 - Mature", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "Chroniker - Django Controlled Cron Jobs\n=============================================================================\n\n[![](https://img.shields.io/pypi/v/django-chroniker.svg)](https://pypi.python.org/pypi/django-chroniker) [![Build Status](https://img.shields.io/travis/chrisspen/django-chroniker.svg?branch=master)](https://travis-ci.org/chrisspen/django-chroniker) [![](https://pyup.io/repos/github/chrisspen/django-chroniker/shield.svg)](https://pyup.io/repos/github/chrisspen/django-chroniker)\n\nOverview\n--------\n\nDjango Chroniker is a Python package that allows\nyou to use cron to schedule Django management commands through Django's admin.\n\nCreating cron jobs for Django apps can be a pain, annoying and repetitive.\nWith django-chroniker you simply create a single cron job to run every minute,\npoint it at your site's directory and run `manage.py cron`.\nThen, you can create, update and delete jobs through Django's admin.\n\nThis is a fork of Weston Nielson's [Chronograph](https://bitbucket.org/wnielson/django-chronograph/) project.\n\nFeatures\n--------\n\nThis package contains the following improvements over the parent Chronograph project:\n\n* Allow Django management commands to record their percent-progress and display it in admin. e.g.\n\n from chroniker.models import Job\n Job.update_progress(total_parts=77, total_parts_complete=13)\n \n* Improved logging of management command stdout and stderr, and efficiently displaying these in admin.\n* Creation of the `Monitor` model, a proxy of the `Job` model, to allow easier setup of system and database state monitoring.\n* Addition of a model for documenting inter-job dependencies as well as flags for controlling job behavior based on these dependencies. e.g. You can configure one job to not run until another job has successfully run, or run at a later date.\n* Improved support for coordinating job execution in a multi-server environment. e.g. You can configure a job to only run on a specific host or any host.\n\nUnlike some scheduling systems, Chroniker attempts to ensure that every job may\nhave at most only one running instance at any given time. This greatly\nsimplifies scheduling, but necessarily imposes some restrictions. If you need\nto schedule multiple instances of a task to run simultaneously, especially in\nreal-time, consider using a system like [Celery](http://www.celeryproject.org/)\ninstead.\n\nInstallation\n------------\n\nInstall the package from PyPI via pip with:\n\n pip install django-chroniker\n \nor directly from github with (warning, this may be less stable than the official release on PyPI):\n\n pip install https://github.com/chrisspen/django-chroniker/tarball/master\n \nAdd 'chroniker' and 'django.contrib.sites' to the `INSTALLED_APPS` list in your `settings.py` like:\n\n INSTALLED_APPS = (\n ...\n 'django.contrib.sites',\n 'chroniker',\n ...\n )\n\nIf you're using Django 1.7 or higher (which you should be), install Chroniker's models by running:\n\n python manage.py migrate\n \notherwise run:\n\n python manage.py syncdb\n\nUsage\n-----\n\nIn your admin, creating and jobs under the Chroniker section.\n\nIf you're in a development setting, you can test your Chroniker-based cron jobs by first checking \"force run\" on your job, and then running:\n\n python manage.py cron\n\nAlso, you can simulate a simple cron server that will automatically run any pending cron jobs every N seconds with:\n\n python manage.py cronserver\n\nTo allow Chroniker can send email, ensure you have valid email parameters in your settings.py. A very basic example using Gmail might be:\n\n EMAIL_USE_TLS = True\n EMAIL_HOST = 'smtp.gmail.com'\n EMAIL_HOST_USER = 'myusername@gmail.com'\n EMAIL_HOST_PASSWORD = os.environ['GMAILPASS']\n\nYou can customize the \"name\" Chroniker uses in its emails with:\n\n CHRONIKER_EMAIL_SENDER = 'Jon Doe'\n\nYou can also specify a separate email user for Chroniker with:\n\n CHRONIKER_EMAIL_HOST_USER = 'someotherusername@otherdomain.com'\n\nWhen installing Chroniker in a production environment, you'll need to add a single cron job that calls `bin/chroniker` or `python manage.py cron`.\nWithin the call, you'll need to specify where this script is installed, where your Python virtual environment is located (if you're using one), and where your Django project is located.\nAn example of this might be: \n\n * * * * * /usr/local/myproject/bin/chroniker -e /usr/local/myproject/.env/bin/activate_this.py -p /usr/local/myproject\n\nRun `bin/chroniker --help` for a full listing of options.\n\nSettings\n--------\n\nDepending on your usage, there are a few options that could greatly help or harm job scheduling.\n\n`CHRONIKER_USE_PID`\n\n* If this is set to True, the `cron` management command will wait for the previous run to complete using a local PID file.\n\n`CHRONIKER_SELECT_FOR_UPDATE`\n\n* If this is set to True, the Job record [will be locked](https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-for-update) when updating job status in the database. This may not be supported on all database backends.\n\n`CHRONIKER_CHECK_LOCK_FILE`\n\n* If this is set to True, chroniker will check for a local lockfile to determine if the job is running or not.\n* You should set this to True in a single-server environment, and False in a multi-server environment.\n\n`CHRONIKER_DISABLE_RAW_COMMAND`\n\n* If this is set to True, chroniker will not run raw commands. This reduces the attack surface in case less trusted people have access to the admin interface.\n\nMaintenance\n-----------\n\nIf you'd like an easy way to delete old job logs, there is a management command\nthat will do it for you: ``cron_clean``. You can use it like so::\n\n python manage.py cron_clean [weeks|days|hours|minutes] [integer]\n\nSo, if you want to remove all jobs that are older than a week, you can do the\nfollowing::\n\n python manage.py cron_clean weeks 1\n\nSince this is just a simple management command, you can also easily add it to\n``chroniker``, via the admin, so that it will clear out old logs\nautomatically.\n\nTools\n-----\n\nThere is anther included management command, ``cronserver`` which can be used\nto test the periodic running of jobs. It'll print out information to the\nscreen about which job are due and also run them. Here is how you would use\nit::\n\n python manage.py cronserver\n\nThis will start up a process that will check for and run any jobs that are due\nevery 60 seconds. The interval can be changed by simply passing the number of\nseconds in between runs. For example, to make the process check for due jobs\nevery 2 minutes, you would run::\n\n python manage.py cronserver 120\n\nArchitecture\n------------\n\nThe trickiest thing to get right in ``Chroniker`` is the ability to properly\nmanage the state of a ``Job``, i.e. reliably determining whether or not a\njob is or isn't running, if it has been killed or terminated prematurely. In\nthe first version of ``Chroniker`` this issue was \"solved\" by keeping track\nof the PID of each running job and using the ``ps`` command to have the\noperating system tell us if the job was still running. However, this route was\nless than ideal, for a few reasons, but most importantly because isn't wasn't\ncross-platform. Additionally, using a series of ``subprocess.Popen`` calls was\nleading to path-related issues for some users, even on \"supported\" platforms.\n\nNewer version of ``Chroniker`` have attempted to solve this problem in the\nfollowing way:\n\n 1. Get a list of ``Job``\\s that are \"due\"\n 2. For each ``Job``, launch a ``multiprocessing.Process`` instance, which\n internally calls ``django.core.management.call_command``\n 3. When the ``Job`` is run, we spawn a ``threading.Thread`` instance whose\n sole purpose is to keep track of a lock file. This thread exists only\n while the Job is running and updates the file every second. We store\n the path to this temporary file (an instance of\n ``tempfile.NamedTemporaryFile``) on the ``Job`` model (which is then\n stored in the database). When we want to check if a ``Job`` is running\n we do the following:\n \n 1. If ``is_running`` equals ``True``, and ``lock_file`` point to a\n file, then:\n \n 1. If the lock file actually exists and has been updated more\n recently than ``CHRONIKER_LOCK_TIMEOUT`` seconds, then we\n can assume that the ``Job`` is still running\n 2. Else we assume the ``Job`` is not running and update the database\n accordingly\n\nThis new method should would much more reliably across all platforms that\nsupport the threading and multiprocess libraries.\n\nDevelopment\n-----------\n\nTo run unittests across multiple Python versions, install:\n\n sudo add-apt-repository ppa:deadsnakes/ppa\n sudo apt-get update\n sudo apt-get install python-dev python3-dev python3.3-minimal python3.3-dev python3.4-minimal python3.4-dev python3.5-minimal python3.5-dev python3.6 python3.6-dev\n\nTo run all [tests](http://tox.readthedocs.org/en/latest/):\n\n export TESTNAME=; tox\n\nTo run tests for a specific environment (e.g. Python 2.7 with Django 1.11):\n \n export TESTNAME=; tox -e py27-django111\n\nTo run a specific test:\n \n export TESTNAME=.testTimezone2; tox -e py36-django21\n\nTo run the [documentation server](http://www.mkdocs.org/#getting-started) locally:\n\n mkdocs serve -a :9999\n\nTo [deploy documentation](http://www.mkdocs.org/user-guide/deploying-your-docs/), run:\n\n mkdocs gh-deploy --clean\n\nTo build and deploy a versioned package to PyPI, verify [all unittests are passing](https://travis-ci.org/chrisspen/django-chroniker), and then run:\n\n python setup.py sdist\n python setup.py sdist upload\n\nTo commit while skipping the pre-commit hooks:\n\n SKIP=yapf git commit -m \"foo\"", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chrisspen/django-chroniker", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-chroniker", "package_url": "https://pypi.org/project/django-chroniker/", "platform": "", "project_url": "https://pypi.org/project/django-chroniker/", "project_urls": { "Homepage": "https://github.com/chrisspen/django-chroniker" }, "release_url": "https://pypi.org/project/django-chroniker/1.0.16/", "requires_dist": null, "requires_python": "", "summary": "Easily control cron jobs via Django's admin.", "version": "1.0.16" }, "last_serial": 5997385, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "7f9f8ad89b873e7d02cd867b52c75ac0", "sha256": "6775303333bb3a7da9a4824301f973dd9a25b83727871ddedbeace2265c34ebf" }, "downloads": -1, "filename": "django_chroniker-0.2.0-py2.7.egg", "has_sig": false, "md5_digest": "7f9f8ad89b873e7d02cd867b52c75ac0", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 48150, "upload_time": "2019-10-18T20:22:40", "url": "https://files.pythonhosted.org/packages/d6/72/39a4f695a4b5d28ea68c293f7b295af9a01beb4c9f92c9c7fc050e9897f3/django_chroniker-0.2.0-py2.7.egg" } ], "0.3.10": [ { "comment_text": "", "digests": { "md5": "4b6dc5457629241cfb19029c4cfe6f93", "sha256": "b675f42c27445caf4d3a8e260d91ccc04f2a1df6ea963dbefd9d134a47dba3f9" }, "downloads": -1, "filename": "django-chroniker-0.3.10.tar.gz", "has_sig": false, "md5_digest": "4b6dc5457629241cfb19029c4cfe6f93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29748, "upload_time": "2013-05-29T18:47:57", "url": "https://files.pythonhosted.org/packages/42/e6/e3642aad68f187f1942d195a849c0972afa7e24aca63cd389f7d25bc3115/django-chroniker-0.3.10.tar.gz" } ], "0.3.11": [ { "comment_text": "", "digests": { "md5": "740df47ac0f1470f031e55573901a0e7", "sha256": "1e56c0c9892b09bbe48f9bd707b8bf62a35d00727a6161969dc19dfc73970790" }, "downloads": -1, "filename": "django-chroniker-0.3.11.tar.gz", "has_sig": false, "md5_digest": "740df47ac0f1470f031e55573901a0e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29770, "upload_time": "2013-05-29T18:50:42", "url": "https://files.pythonhosted.org/packages/c1/05/42dba0f9a8300672af12382a95bdf183d7ad77657e83505f735834deb3ac/django-chroniker-0.3.11.tar.gz" } ], "0.3.17": [ { "comment_text": "", "digests": { "md5": "25480e18d09c397d9bd77063f1aa96ff", "sha256": "ec8436b0ca862421097d7a29fba676901b0ee784442486ec9e07cabd797604c5" }, "downloads": -1, "filename": "django-chroniker-0.3.17.tar.gz", "has_sig": false, "md5_digest": "25480e18d09c397d9bd77063f1aa96ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30656, "upload_time": "2013-11-22T20:04:04", "url": "https://files.pythonhosted.org/packages/0c/bc/a62e4d1d1031bea26c9b18afe379ec7e0fa6113017dbc43dad8523b4dd5d/django-chroniker-0.3.17.tar.gz" } ], "0.4.7": [ { "comment_text": "", "digests": { "md5": "b9439b51e62be0226edc84146cc753e0", "sha256": "3942f9650a0b56c2a6c7463bccb4ad1b07cc0b2cae65d7e82d1e74c1320279ca" }, "downloads": -1, "filename": "django-chroniker-0.4.7.tar.gz", "has_sig": false, "md5_digest": "b9439b51e62be0226edc84146cc753e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41510, "upload_time": "2014-03-13T20:20:30", "url": "https://files.pythonhosted.org/packages/20/d2/50dba58ba308678f75ddb0e53c4001a594d02c3818af0565b23e27a393e3/django-chroniker-0.4.7.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "33d7506aedf17ba29bec2c18c1bc7aaa", "sha256": "bedb9b0cd126a6a097868b8c8dffb4b88aa9da4f60fec57d201f3d5dca11afe9" }, "downloads": -1, "filename": "django-chroniker-0.5.0.tar.gz", "has_sig": false, "md5_digest": "33d7506aedf17ba29bec2c18c1bc7aaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42572, "upload_time": "2014-04-03T22:11:13", "url": "https://files.pythonhosted.org/packages/a3/6e/b778c71deede181a12c564e6ec944a2c3837c7f94d342b8e07876147984a/django-chroniker-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "d9bc438871c707f97b066b14703016e7", "sha256": "43c25609473732ddd696fcbd82128d5c492c8a2f6be7ec10fbf1e66fe76c2796" }, "downloads": -1, "filename": "django-chroniker-0.6.0.tar.gz", "has_sig": false, "md5_digest": "d9bc438871c707f97b066b14703016e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43440, "upload_time": "2014-06-18T23:39:53", "url": "https://files.pythonhosted.org/packages/e6/cf/8d2929d576448723797100ba2f38afc2e9bb6cc1ba086b1ccba3f15a747a/django-chroniker-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "18b21248a5c3b2598a86fe7665192565", "sha256": "af1031d5488945e73452cb86432a0fefb9ecfef46d129911ee7ef5169837d642" }, "downloads": -1, "filename": "django-chroniker-0.6.1.tar.gz", "has_sig": false, "md5_digest": "18b21248a5c3b2598a86fe7665192565", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43551, "upload_time": "2014-06-19T20:41:34", "url": "https://files.pythonhosted.org/packages/36/60/f935b2539ec7a162755f578b9d8a0d3319977aceb54d449af1834ad0748f/django-chroniker-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "09418b31f753f92ffd81ea0ceaa73eec", "sha256": "6f11a1efe71473c66e9ef891afe64d1f496fbe754417ff451059b4997ef3ebfe" }, "downloads": -1, "filename": "django-chroniker-0.6.2.tar.gz", "has_sig": false, "md5_digest": "09418b31f753f92ffd81ea0ceaa73eec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85411, "upload_time": "2014-06-25T03:17:38", "url": "https://files.pythonhosted.org/packages/ab/70/141f27ccdb140c8e5486598c0f4a2c4cc30b32c54b49369f053f24fed850/django-chroniker-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "7281cf283d3827c095305485810fd243", "sha256": "5a78812434b484154570f5c6f6b4055c82a85a0a9b2d5166419433930bc7a201" }, "downloads": -1, "filename": "django-chroniker-0.6.3.tar.gz", "has_sig": false, "md5_digest": "7281cf283d3827c095305485810fd243", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85783, "upload_time": "2014-06-25T16:13:29", "url": "https://files.pythonhosted.org/packages/7d/94/e4dabebfb36644aed27fd894aaec08171ffe8327d6b44026ccb1f3f3cc8e/django-chroniker-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "16a027a70aebccb8f11d0c83e0052279", "sha256": "f37983380c2fb978346a1559502bd841724f32e2433a3faeb4c403bdac76c9a7" }, "downloads": -1, "filename": "django-chroniker-0.6.4.tar.gz", "has_sig": false, "md5_digest": "16a027a70aebccb8f11d0c83e0052279", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85799, "upload_time": "2014-06-26T14:16:03", "url": "https://files.pythonhosted.org/packages/56/b1/c49692d9c1513897540d352d6c0719f05dbf06a9a28e38147755ee82c839/django-chroniker-0.6.4.tar.gz" } ], "0.6.6": [ { "comment_text": "", "digests": { "md5": "003a7a1d524a6ec4123263d1daf0b294", "sha256": "4b1792ff72f17793d99c10738a92c91e01647ac86d4601857b4b188b52806136" }, "downloads": -1, "filename": "django-chroniker-0.6.6.tar.gz", "has_sig": false, "md5_digest": "003a7a1d524a6ec4123263d1daf0b294", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86178, "upload_time": "2014-07-09T19:17:03", "url": "https://files.pythonhosted.org/packages/b5/a2/f5b514efc86fceff808f1ba6d76ddfe6b70ee8baf1e3943704a67cd241d0/django-chroniker-0.6.6.tar.gz" } ], "0.6.7": [ { "comment_text": "", "digests": { "md5": "49b374c7d7ba5fbd5f451a55a2e6bc22", "sha256": "c4dd8435cc6d9804bf61126afc3a9b8506eb920457ce48b48e050fd8d160e39d" }, "downloads": -1, "filename": "django-chroniker-0.6.7.tar.gz", "has_sig": false, "md5_digest": "49b374c7d7ba5fbd5f451a55a2e6bc22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86164, "upload_time": "2014-07-11T03:12:14", "url": "https://files.pythonhosted.org/packages/37/81/15444389c83c9a02f8546ae54120f913f3f19c77e7740a2a144963c250e1/django-chroniker-0.6.7.tar.gz" } ], "0.6.8": [ { "comment_text": "", "digests": { "md5": "533b8d53f60d2dec08b9a4be4b8205d1", "sha256": "760ba8944d4a3dd19aa34df87e7eeb005652056ff30c606c9b6c0008da6413b0" }, "downloads": -1, "filename": "django-chroniker-0.6.8.tar.gz", "has_sig": false, "md5_digest": "533b8d53f60d2dec08b9a4be4b8205d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86077, "upload_time": "2014-11-24T20:14:01", "url": "https://files.pythonhosted.org/packages/50/f8/f0e787757daaaa35a807aa0970d3dae2a34ea0f598016518c35f0317442a/django-chroniker-0.6.8.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "2871b72d059c670ccaabf69f8359fd50", "sha256": "952456eb2ebb62eaee3d4ee3cab28804a93d8450adc5425f89f469a116234d0e" }, "downloads": -1, "filename": "django-chroniker-0.7.0.tar.gz", "has_sig": false, "md5_digest": "2871b72d059c670ccaabf69f8359fd50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86348, "upload_time": "2015-03-30T15:31:55", "url": "https://files.pythonhosted.org/packages/a1/95/b8cfacbb850a884242703a1be2016c6c710fe90c53f9354b8321b0cef3d7/django-chroniker-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "796dde09e3d273c3170bcba008b804d0", "sha256": "268cb3585fb17d36d721926313320af34c266e6d1ac59a596982a10c20b4d1fc" }, "downloads": -1, "filename": "django-chroniker-0.8.0.tar.gz", "has_sig": false, "md5_digest": "796dde09e3d273c3170bcba008b804d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86628, "upload_time": "2015-04-23T20:55:00", "url": "https://files.pythonhosted.org/packages/7c/bb/acbe35f547211b73b2c4ebc36160f2e1be94ebdb54a472c6806f3da7f40f/django-chroniker-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "3240a96c9c8e41c9873a10954bb025c5", "sha256": "68f3820adf91385f3260e9d098540b4547a9d82dfb1751dc09153d51e07a0d6f" }, "downloads": -1, "filename": "django-chroniker-0.8.1.tar.gz", "has_sig": false, "md5_digest": "3240a96c9c8e41c9873a10954bb025c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87044, "upload_time": "2015-04-23T21:33:14", "url": "https://files.pythonhosted.org/packages/5e/59/291f4e406a3067c41bced439810b4df2cb70be0d037d2aad79e743238c2a/django-chroniker-0.8.1.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "528604ca76107c2ba50a271dce190609", "sha256": "7b1221b62e1a814e79749863017796ee625f885155ada8b36be4c984be41653d" }, "downloads": -1, "filename": "django-chroniker-0.8.4.tar.gz", "has_sig": false, "md5_digest": "528604ca76107c2ba50a271dce190609", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89724, "upload_time": "2016-01-29T23:07:34", "url": "https://files.pythonhosted.org/packages/2f/55/861ab8ae5a1529851e2800727701f72960c205a5959bf4b46bd438d1d314/django-chroniker-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "20a0d6e9752f5dc67dd915ad41a47079", "sha256": "5b371d760f1302877e83feb700bdbf42ff7d835af1fd4b70e9036c6b921e9727" }, "downloads": -1, "filename": "django-chroniker-0.8.5.tar.gz", "has_sig": false, "md5_digest": "20a0d6e9752f5dc67dd915ad41a47079", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89739, "upload_time": "2016-02-02T19:28:35", "url": "https://files.pythonhosted.org/packages/9e/d6/c9dd93389acb05c5b6f2bb5b378ea37d50746aa3f221a849b3012c5037f0/django-chroniker-0.8.5.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "7028932ff4e80ba6b26f1ce86006239f", "sha256": "61b74947687cc586274f18605507b0f71128a0d15c9557ed67018d2d107a9065" }, "downloads": -1, "filename": "django-chroniker-0.9.2.tar.gz", "has_sig": false, "md5_digest": "7028932ff4e80ba6b26f1ce86006239f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92253, "upload_time": "2016-06-06T15:01:00", "url": "https://files.pythonhosted.org/packages/64/28/95c2e95c99dfb7bd4a587995e606549fdafbf2ba83802e82fe3f62212bee/django-chroniker-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "d3ca3b8f88d0e3c1211dbef72f73fc1d", "sha256": "093c735196841815e3c8c916594bbf5e4f7dbfd36e5bee366ef89b6fc4a050c1" }, "downloads": -1, "filename": "django-chroniker-0.9.3.tar.gz", "has_sig": false, "md5_digest": "d3ca3b8f88d0e3c1211dbef72f73fc1d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92399, "upload_time": "2016-08-30T23:33:25", "url": "https://files.pythonhosted.org/packages/3b/33/07380bef4d6eb5b00a4c82537679c7a17df6a7e0e35cf29c0ae071010e09/django-chroniker-0.9.3.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "6544808d0d98f8f74680c0c4f85a5924", "sha256": "0f9e62fdf5b1fa6cafc27c5081dd7bd289d0287b225d731266e5f3ef681595f8" }, "downloads": -1, "filename": "django-chroniker-0.9.5.tar.gz", "has_sig": false, "md5_digest": "6544808d0d98f8f74680c0c4f85a5924", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92742, "upload_time": "2016-10-16T04:42:04", "url": "https://files.pythonhosted.org/packages/ab/c7/674e41f0aac22f350eee27c67c4023b4bb6f255e3b809aee7b5882fd4278/django-chroniker-0.9.5.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "87e33a019b93ff36bfb2baa47646cb95", "sha256": "bd068617571c561a917360b2c63df2c3c7f50c82e3d4b3e4cd1e09535de00f66" }, "downloads": -1, "filename": "django-chroniker-0.9.7.tar.gz", "has_sig": false, "md5_digest": "87e33a019b93ff36bfb2baa47646cb95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 93401, "upload_time": "2016-10-22T03:57:27", "url": "https://files.pythonhosted.org/packages/52/6f/7e49fef619773704fc8df01378ca8536954fde35799b46602184709d4a57/django-chroniker-0.9.7.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "b87d5d9dd7bb507b29b54a5a4da937a8", "sha256": "a07423afbb068f1b3d1ad0a2deb743ec6aa6fef699dd99a5103c8a7a37558925" }, "downloads": -1, "filename": "django-chroniker-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b87d5d9dd7bb507b29b54a5a4da937a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 93820, "upload_time": "2016-10-31T23:41:10", "url": "https://files.pythonhosted.org/packages/9c/af/af3b51ff7535b845655041d51136ff974a1f4c2968e7a199f03733c09aa8/django-chroniker-1.0.0.tar.gz" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "b4b86def109e72fb4974d723935a94dd", "sha256": "99610f5659e6580e4f46f6f7eacd597e1ed546b645cd47a5294dc126f4106db6" }, "downloads": -1, "filename": "django-chroniker-1.0.10.tar.gz", "has_sig": false, "md5_digest": "b4b86def109e72fb4974d723935a94dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 99116, "upload_time": "2017-11-14T00:19:07", "url": "https://files.pythonhosted.org/packages/8a/b3/e7552c6ceb83682a4b5f9a18d90889255a696c9f6e066383742237a76ca7/django-chroniker-1.0.10.tar.gz" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "52e0d3ea67836a394de3929f0d12c2a2", "sha256": "06df8d347edb487bfc1c8bd64ec45b73c1baab707f55598df700db581fd9c1f0" }, "downloads": -1, "filename": "django-chroniker-1.0.11.tar.gz", "has_sig": false, "md5_digest": "52e0d3ea67836a394de3929f0d12c2a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 99607, "upload_time": "2019-03-22T19:47:01", "url": "https://files.pythonhosted.org/packages/bd/1e/759899dce29b98ef17891b893577402ac31abd6dce1aee9d82166e24c2da/django-chroniker-1.0.11.tar.gz" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "0563565c59fed09956b2baca0a81271b", "sha256": "28259bd9d2d94a27fd58efab153d661cbd524da86a9ef727a92cf1d438f507b7" }, "downloads": -1, "filename": "django-chroniker-1.0.12.tar.gz", "has_sig": false, "md5_digest": "0563565c59fed09956b2baca0a81271b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 100080, "upload_time": "2019-04-13T23:05:04", "url": "https://files.pythonhosted.org/packages/61/98/8090901e2b5381f86e8f69d894dd2af2a15bbbff56a3c93b70355431c7f5/django-chroniker-1.0.12.tar.gz" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "738b853906f7030e6fa1233a03871c27", "sha256": "b021875d2c1471f05f0ee917d66828deca876c8147c8b497243570d33b826a29" }, "downloads": -1, "filename": "django-chroniker-1.0.13.tar.gz", "has_sig": false, "md5_digest": "738b853906f7030e6fa1233a03871c27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 100309, "upload_time": "2019-06-18T17:24:08", "url": "https://files.pythonhosted.org/packages/ff/b9/69376ebef88b8f0c6ba3255076496e740034b5f2d26380bd2b4bcfa0d434/django-chroniker-1.0.13.tar.gz" } ], "1.0.14": [ { "comment_text": "", "digests": { "md5": "3e4521c7a6cd2bd8b0811e8beb5271ca", "sha256": "d70759bd024075c4ad0e83968ffd37a1e505c6779a568d246aa7192d8baac995" }, "downloads": -1, "filename": "django-chroniker-1.0.14.tar.gz", "has_sig": false, "md5_digest": "3e4521c7a6cd2bd8b0811e8beb5271ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 93480, "upload_time": "2019-08-13T18:57:27", "url": "https://files.pythonhosted.org/packages/a7/81/fa5639f966579fabbb2529a402a2ac4ece3fbfe71e731ec78e74e883f686/django-chroniker-1.0.14.tar.gz" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "dd7cd4e30e1ad97946fcb85c4b87454f", "sha256": "8a5db05b48db0cdb26e32ee033176ff5d2b9880ac2004d339df01fb11b8d7f01" }, "downloads": -1, "filename": "django-chroniker-1.0.15.tar.gz", "has_sig": false, "md5_digest": "dd7cd4e30e1ad97946fcb85c4b87454f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 97618, "upload_time": "2019-09-04T23:09:24", "url": "https://files.pythonhosted.org/packages/e7/95/61c87401fc8584603c39caeae793bb34a41398cb655746eb85316bbc5d74/django-chroniker-1.0.15.tar.gz" } ], "1.0.16": [ { "comment_text": "", "digests": { "md5": "66235a329f2cf7102dc2a2303e9a0af4", "sha256": "4ec8ee0da8c8246607f6d51fea5438de84dd56bf3c756f896c13d38b7349437e" }, "downloads": -1, "filename": "django-chroniker-1.0.16.tar.gz", "has_sig": false, "md5_digest": "66235a329f2cf7102dc2a2303e9a0af4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 97644, "upload_time": "2019-10-18T20:23:24", "url": "https://files.pythonhosted.org/packages/05/62/e5416f15c95004f8eea03478ded6e3f74011abbaaf202256ff95438776e7/django-chroniker-1.0.16.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "b9e522c2e6c81929c03aebde59476abf", "sha256": "a80ea2e88e7f8400cd57ffc47fcc74d7d545966238272cdee1b16011800e3cff" }, "downloads": -1, "filename": "django-chroniker-1.0.2.tar.gz", "has_sig": false, "md5_digest": "b9e522c2e6c81929c03aebde59476abf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94551, "upload_time": "2017-02-09T01:08:42", "url": "https://files.pythonhosted.org/packages/ca/44/b87f0925d470cef810e44e34b81e22df7fcdfe1a34bd0d28682321b359b8/django-chroniker-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "c23f4ffcb2a688170d30b369289b1cce", "sha256": "7738a5f586465a6f81469808e0000fd2c5d45f18d4ed40a5e9a9957cb694f13b" }, "downloads": -1, "filename": "django-chroniker-1.0.3.tar.gz", "has_sig": false, "md5_digest": "c23f4ffcb2a688170d30b369289b1cce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94788, "upload_time": "2017-02-10T15:09:57", "url": "https://files.pythonhosted.org/packages/23/73/df9331c3d2520fe486051782084b7efbedb4e41d4c51275eabdbbd702f23/django-chroniker-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "9caaed5006e1b4c855592fa90d5dea23", "sha256": "cbeb0d67fdad21a63277c4af4931cdc12ebd52415b75bc3fa60854dba7653a44" }, "downloads": -1, "filename": "django-chroniker-1.0.4.tar.gz", "has_sig": false, "md5_digest": "9caaed5006e1b4c855592fa90d5dea23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94490, "upload_time": "2017-04-22T02:50:53", "url": "https://files.pythonhosted.org/packages/37/3f/bb2badf03eb6f09bcb640a0d9ca9263971ad626a22f3b1902fc57196d315/django-chroniker-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "f4e934b8a1f6ade8e89aaf5a21b1b3e3", "sha256": "2e6156eda1c90db722532c4c37fa04389316f86e6ad7be32d3a1f2806323d453" }, "downloads": -1, "filename": "django-chroniker-1.0.5.tar.gz", "has_sig": false, "md5_digest": "f4e934b8a1f6ade8e89aaf5a21b1b3e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94730, "upload_time": "2017-05-02T21:40:30", "url": "https://files.pythonhosted.org/packages/3f/a0/2d742791e7a4aa151b4ec81fb021cedb4a04b90d0519ba4ad8392f90a71c/django-chroniker-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "262d4c34eb130039dc68bdf0e7856bac", "sha256": "f8272d09e42416c8aae3ee2e16c2fd94469dff2fd86752694020b81c54c03226" }, "downloads": -1, "filename": "django-chroniker-1.0.6.tar.gz", "has_sig": false, "md5_digest": "262d4c34eb130039dc68bdf0e7856bac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94845, "upload_time": "2017-05-04T21:18:18", "url": "https://files.pythonhosted.org/packages/94/10/98e52ed2cf83c23ee1c262f74259238ca9211ab49cb4fda95a05040b8a1b/django-chroniker-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "a241a97e842ad3177dd3bf41ebbf5884", "sha256": "eff7f9fc81fd120abcebce715f0621b77fe59ec2b1bd84592642f1e6dc67a008" }, "downloads": -1, "filename": "django-chroniker-1.0.7.tar.gz", "has_sig": false, "md5_digest": "a241a97e842ad3177dd3bf41ebbf5884", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95253, "upload_time": "2017-06-17T04:30:11", "url": "https://files.pythonhosted.org/packages/9d/24/ece062634cd84f7b540ea8373aeb8500eb24b26542dbb022e5cb60bcf544/django-chroniker-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "37b02e0a131cb892182a1ba83bfbd14a", "sha256": "3d201307ab4474cac4e15f0e34736510512d2528e34ff8bbd2845ca4e28bdc6d" }, "downloads": -1, "filename": "django-chroniker-1.0.8.tar.gz", "has_sig": false, "md5_digest": "37b02e0a131cb892182a1ba83bfbd14a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95411, "upload_time": "2017-06-20T22:53:24", "url": "https://files.pythonhosted.org/packages/da/40/f2e426103e3fb856e23733acddebe20d03f232142d0447254894ad99a250/django-chroniker-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "3d7f7ab1cc844dd1fc905c4a6ded6ee9", "sha256": "88fe97ec6a2a2f920b88ae36e85fc90f3083b0e698ba7929b6523a37fc1398e1" }, "downloads": -1, "filename": "django-chroniker-1.0.9.tar.gz", "has_sig": false, "md5_digest": "3d7f7ab1cc844dd1fc905c4a6ded6ee9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95537, "upload_time": "2017-11-01T22:54:56", "url": "https://files.pythonhosted.org/packages/40/53/18f619f83afe1ecdb4aba076636af0b8c6e77cfe411071532633225df21a/django-chroniker-1.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "66235a329f2cf7102dc2a2303e9a0af4", "sha256": "4ec8ee0da8c8246607f6d51fea5438de84dd56bf3c756f896c13d38b7349437e" }, "downloads": -1, "filename": "django-chroniker-1.0.16.tar.gz", "has_sig": false, "md5_digest": "66235a329f2cf7102dc2a2303e9a0af4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 97644, "upload_time": "2019-10-18T20:23:24", "url": "https://files.pythonhosted.org/packages/05/62/e5416f15c95004f8eea03478ded6e3f74011abbaaf202256ff95438776e7/django-chroniker-1.0.16.tar.gz" } ] }