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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crono-0.1.8.tar.gz.
File metadata
- Download URL: crono-0.1.8.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 |
0ab937cab9713a98f84f62385d206ce9cbba28af1ef84fb4a130d099ede4949d
|
|
| MD5 |
0bd703c05b2e9ada2ec83e1ad15f5102
|
|
| BLAKE2b-256 |
9ebcaf0cb5b7279aeaa2ccc8f9d9fb53e4791ebf0e7b0f494dc83e9c37d5f7fc
|
File details
Details for the file crono-0.1.8-py3-none-any.whl.
File metadata
- Download URL: crono-0.1.8-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 |
482950b8cf4d41bddc1a37dbe2d80e9bcc9e4102da67bd8b1ac7550962ef7e26
|
|
| MD5 |
4a71088a9f2476ea9bebbecc76fbf757
|
|
| BLAKE2b-256 |
3e5ac697e0c7e2be8fbdff220b813648430a7d6b5818cfb04f4c6a6952babde0
|