Code Monkey home page Code Monkey logo

django-kronos's Introduction

https://raw.githubusercontent.com/jgorset/django-kronos/master/docs/banner.png

https://coveralls.io/repos/github/jgorset/django-kronos/badge.svg?branch=master https://travis-ci.org/jgorset/django-kronos.svg?branch=master

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 things like > /dev/null 2>&1
KRONOS_PREFIX
Extra string added at the beginning of the command. For dirty things 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 if you can't get it to work. In fact, you should tweet me anyway.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.