Programmatic time-based job scheduler
Project description
🔮 Crono
Crono is a programmatic time-based job scheduler that gives your application a sense of timing.
import crono
crono.request('POST', 'https://your.app/').after(hours=42)
Install
Install package:
pip install crono
Run the servers:
redis-server &
celery worker --app=crono.queue:queue --hostname=worker1@%h
celery beat --app=crono.queue:queue
Usage
Triggers
A trigger defines when a job will be executed. There are 4 types of triggers: after
, on
, every
, and cron
.
after
after
specifies a countdown until the execution of a task. It will only occur once. It takes at least 1 keyword argument: hours, minutes, and/or seconds, of type . Those keywords arguments are cumulative (same for the every
trigger). For example, hours=1, minutes=30
equals minutes=90
.
crono.after(minutes=30).…
on
on
specifies the execution of a task at a specific date and time. It will only occur once. It takes 1 positional argument of type <datetime.datetime>
.
import datetime
date = datetime.datetime(2019, 7, 4)
crono.on(date).…
every
every
specifies a frequency at which to execute a task. It will occur multiple times. It takes at least 1 keyword argument: hours, minutes, and/or seconds, of type . Those keywords arguments are cumulative (similarly to the after
trigger). For example, hours=1, minutes=30
equals minutes=90
.
crono.every(hours=1, minutes=30).…
cron
cron
uses an expression to specify the execution time. It will occur mutiple times. It takes exactly 1 positional argument of type <str>
.
crono.cron('0 6 * * 2').…
Tasks
A task defines what a job will do. There are 4 types of tasks: log
, request
, message
, and email
.
log
log
uses the standard logging Python library.
crono.log('DEBUG', '{text}', *args, **kwargs)
request
request
sends an HTTP request. It is powered by the Requests library.
crono.request('POST', '{url}', **kwargs).…
message
message
sends an SMS. It is powered by Twilio. To use it, you will have to specify twilio_account_sid
and twilio_auth_id
.
Not implemented, yet.
email
sends an email. It is powered by Postmark. To use it, you will have to specify postmark_api_key
and postmark_sender
.
Not implemented, yet.
Examples
import crono
# Timer
crono.request('POST', '{url}').after(minutes=1)
# Datetime
crono.log('DEBUG', '{text}').on(<datetime>)
# Interval
crono.email(…).every(hours=1) # `email` task not implemented (yet)
# Cron
crono.message(…).cron('0 6 * * 2') # `message` task not implemented (yet)
Configuration
Crono comes with sensible default values that you can override:
# Required
CELERY_BROKER
# Optional
CELERY_RESULT_BACKEND
REDIS_MAX_CONNECTIONS (default: 20)
CELERY_BROKER_POOL_LIMIT (default: 0)
CELERY_TASK_IGNORE_RESULT (default: True)
CELERY_BEAT_MAX_LOOP_INTERVAL (default: 300)
CELERY_WORKER_MAX_TASKS_PER_CHILD (default: 100)
Test
python -m pytest
Development
Packaging
# Generating distribution archives
$ python setup.py sdist bdist_wheel
# Uploading the distribution archives
$ twine upload --skip-existing dist/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file crono-0.1.7.tar.gz
.
File metadata
- Download URL: crono-0.1.7.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.25.1 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.44.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a56c1f6fffcdbbbf3a5db61b1da8bcc44796e922fcf29ccc529e317e940c212 |
|
MD5 | 81bf538f7549b090ac53b9b99075d9de |
|
BLAKE2b-256 | 3876468ae66ed38569bd2b018b4b1cfee2d0f705a8431539b7e02147fe1c0f46 |
File details
Details for the file crono-0.1.7-py3-none-any.whl
.
File metadata
- Download URL: crono-0.1.7-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.25.1 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.44.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13d5c3fad864be282eb91acac019ab40ed1ef025e1fdecf30f70ba2fdf3ca821 |
|
MD5 | 7e6d35e9865900baf96c0accfe722c50 |
|
BLAKE2b-256 | 25d0a4c400e0055db2d9d6ef1253e38bfcecd86088ee384458333dbefb556241 |