Metadata-Version: 1.0
Name: django-kronos
Version: 1.0
Summary: Kronos is a Django application that makes it easy to define and schedule tasks with cron.
Home-page: http://github.com/jgorset/django-kronos
Author: Johannes Gorset
Author-email: jgorset@gmail.com 
License: UNKNOWN
Description: .. image::  https://raw.githubusercontent.com/jgorset/django-kronos/master/docs/banner.png
        
        .. image:: https://coveralls.io/repos/github/jgorset/django-kronos/badge.svg?branch=master
            :target: https://coveralls.io/github/jgorset/django-kronos?branch=master
        .. image:: https://travis-ci.org/jgorset/django-kronos.svg?branch=master
            :target: https://travis-ci.org/jgorset/django-kronos
        .. image:: https://img.shields.io/github/license/jgorset/django-kronos.svg
            :target: https://raw.githubusercontent.com/jgorset/django-kronos/master/LICENSE
        .. image:: https://img.shields.io/pypi/v/django-kronos.svg
            :target: https://pypi.python.org/pypi/django-kronos/
        
        Usage
        -----
        
        Define tasks
        ^^^^^^^^^^^^
        
        Kronos collects tasks from ``cron`` modules in your project root and each of your applications::
        
            # app/cron.py
        
            import kronos
            import random
        
            @kronos.register('0 0 * * *')
            def complain():
                complaints = [
                    "I forgot to migrate our applications's cron jobs to our new server! Darn!",
                    "I'm out of complaints! Damnit!"
                ]
        
                print random.choice(complaints)
        
        Kronos works with Django management commands, too::
        
            # app/management/commands/task.py
        
            from django.core.management.base import BaseCommand
        
            import kronos
        
            @kronos.register('0 0 * * *')
            class Command(BaseCommand):
                def handle(self, *args, **options):
                    print('Hello, world!')
        
        If your management command accepts arguments, just pass them in the decorator::
        
            # app/management/commands/task.py
        
            from django.core.management.base import BaseCommand
        
            import kronos
        
            @kronos.register('0 0 * * *', args={'-l': 'nb'})
            class Command(BaseCommand):
        
                def add_arguments(self, parser):
                    parser.add_argument(
                        '-l', '--language',
                        dest='language',
                        type=str,
                        default='en',
                    )
        
                def handle(self, *args, **options):
                    if options['language'] == 'en':
                      print('Hello, world!')
        
                    if options['language'] == 'nb':
                      print('Hei, verden!')
        
        
        Run tasks manually
        ^^^^^^^^^^^^^^^^^^
        
        ::
        
            $ python manage.py runtask complain
            I forgot to migrate our applications's cron jobs to our new server! Darn!
        
        Keep in mind that if the registered task is a django command you have to run it
        in the normal way::
        
            $ python manage.py task
        
        
        List all registered tasks
        ^^^^^^^^^^^^^^^^^^
        
        ::
        
            $ python manage.py showtasks
            * List of tasks registered in Kronos *
            >> Kronos tasks
                >> my_task_one
                >> my_task_two
            >> Django tasks
                >> my_django_task
        
        
        Register tasks with cron
        ^^^^^^^^^^^^^^^^^^^^^^^^
        
        ::
        
            $ python manage.py installtasks
            Installed 1 task.
        
        You can review the crontab with a ``crontab -l`` command::
        
            $ crontab -l
            0 0 * * * /usr/bin/python /path/to/manage.py runtask complain --settings=myprpoject.settings $KRONOS_BREAD_CRUMB
            0 0 * * * /usr/bin/python /path/to/manage.py task --settings=myprpoject.settings $KRONOS_BREAD_CRUMB
        
        Usually this line will work pretty well for you, but there can be some rare
        cases when it requires modification. You can achieve it with a number of
        settings variables used by kronos:
        
        KRONOS_PYTHON
            Python interpreter to build a crontab line (defaults to the interpreter you used to
            invoke the management command).
        
        KRONOS_MANAGE
            Management command to build a crontab line (defaults to ``manage.py`` in the current
            working directory).
        
        KRONOS_PYTHONPATH
            Extra path which will be added as a ``--pythonpath`` option to the management command.
        
        KRONOS_POSTFIX
            Extra string added at the end of the command. For dirty thinks like ``> /dev/null 2>&1``
        
        KRONOS_PREFIX
            Extra string added at the beginning of the command. For dirty thinks like ``source /path/to/env &&``.
            If you use the ``virtualenv``, you can add the environment path by ``echo "KRONOS_PREFIX = 'source `echo $VIRTUAL_ENV`/bin/activate && '" >> myprpoject/settings.py``
        
        Define these variables in your ``settings.py`` file if you wish to alter crontab lines.
        
        The env variable ``$KRONOS_BREAD_CRUMB`` is defined to detect which tasks have to be deleted after
        being installed.
        
        Installation
        ------------
        
        ::
        
            $ pip install django-kronos
        
        ... and add ``kronos`` to ``INSTALLED_APPS``.
        
        
        Contribute
        ----------
        
        * Fork the repository.
        * Do your thing.
        * Open a pull request.
        * Receive cake.
        
        I love you
        ----------
        
        Johannes Gorset made this. You should `tweet me <http://twitter.com/jgorset>`_ if you can't get it
        to work. In fact, you should tweet me anyway.
        
        
        1.0.0
        +++++
        
        * Django 1.10 support.
        
        0.9.0
        +++++
        
        * Fixed a bug that caused Kronos to crash if the settings module resided outside
          of the project directory.
        * Fixed a bug that caused Kronos to remove other crontabs upon uninstalling.
        
        0.8.0
        +++++
        
        * Kronos is now even more compatible with Python 3.
        * Kronos is no longer compatible with Python 2.6.
        * Kronos is no longer compatible with Django 1.7.
        * You may now prefix commands with ``KRONOS_PREFIX``.
        * Fixed an issue where Kronos would not pick up on AppConfig apps.
        
        0.7.0
        +++++
        
        * You may now pass arguments to Django management commands registered with Kronos.
        * Kronos is now compatible with Python 3.
        * Kronos will now log errors when it fails to load tasks.
        
        0.6.0
        +++++
        
        * You may now register Django management commands.
        
        0.5.0
        +++++
        
        * You may now list commands with ``python manage.py showtasks``.
        
        0.4.0
        +++++
        
        * You may now postfix commands with ``KRONOS_POSTFIX``.
        
        0.3.0
        +++++
        
        * You may now customize the interpreter, management path and python path for tasks with the ``KRONOS_PYTHON``,
          ``KRONOS_MANAGE`` and ``KRONOS_PYTHONPATH`` settings, respectively.
        
        0.2.3
        +++++
        
        * Kronos now supports Django 1.4-style projects.
        * Fixed a bug that caused installation to fail for users that didn't already have a crontab.
        
        0.2.2
        +++++
        
        * Fixed a bug that caused unclosed single quotes in the crontab to raise a ValueError
        
        0.2.1
        +++++
        
        * Fixed a bug that caused 'cron'-modules in the project root to be ignored.
        
        0.2.0
        +++++
        
        * Kronos will now collect tasks from a 'cron' module in the project root.
        
Platform: UNKNOWN
