Name | cron-descriptor JSON |
Version |
2.0.6
JSON |
| download |
home_page | None |
Summary | A Python library that converts cron expressions into human readable strings. |
upload_time | 2025-09-03 16:30:22 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | None |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Cron Descriptor
[](https://github.com/Salamek/cron-descriptor/actions/workflows/python-test.yml)
[](https://www.paypal.me/salamek)
A Python library that converts cron expressions into human readable strings. Ported to Python from https://github.com/bradyholt/cron-expression-descriptor.
**Author**: Adam Schubert (https://www.salamek.cz)
**Original Author & Credit**: Brady Holt (http://www.geekytidbits.com)
**License**: [MIT](http://opensource.org/licenses/MIT)
## Features
* Supports all cron expression special characters including * / , - ? L W, #
* Supports 5, 6 (w/ seconds or year), or 7 (w/ seconds and year) part cron expressions
* Provides casing options (Sentence, Title, Lower, etc.)
* Localization with support for ~31 languages
* Supports Python 3.9 - 3.13
## Installation
Using PIP
```bash
pip install cron-descriptor
```
## Usage example
### Simple
```python
from cron_descriptor import get_description, ExpressionDescriptor
print(get_description("* 2 3 * *"))
#OR
print(str(ExpressionDescriptor("* 2 3 * *")))
```
### Advanced
```python
# Consult Options.py/CasingTypeEnum.py/DescriptionTypeEnum.py for more info
from cron_descriptor import Options, CasingTypeEnum, DescriptionTypeEnum, ExpressionDescriptor
descriptor = ExpressionDescriptor(
expression = "*/10 * * * *",
casing_type = CasingTypeEnum.Sentence,
use_24hour_time_format = True
)
# GetDescription uses DescriptionTypeEnum.FULL by default:
print(descriptor.get_description())
print(f"{descriptor = }")
# Or passing Options class as second argument:
options = Options()
options.casing_type = CasingTypeEnum.Sentence
options.use_24hour_time_format = True
descriptor = ExpressionDescriptor("*/10 * * * *", options)
print(descriptor.get_description(DescriptionTypeEnum.FULL))
```
## Languages Available
| Language | Locale Code | Contributor |
|---------------------|-------------|---------------------------------------------------------|
| English | en | [Brady Holt](https://github.com/bradyholt) |
| Chinese Simplified | zh_CN | [Star Peng](https://github.com/starpeng) |
| Chinese Traditional | zh_TW | [Ricky Chiang](https://github.com/metavige) |
| Czech | cs_CZ | [Adam Schubert](https://github.com/salamek) |
| Danish | da_DK | [Rasmus Melchior Jacobsen](https://github.com/rmja) |
| Dutch | nl_NL | [TotalMace](https://github.com/TotalMace) |
| Finnish | fi_FI | [Mikael Rosenberg](https://github.com/MR77FI) |
| French | fr_FR | [Arnaud TAMAILLON](https://github.com/Greybird) |
| German | de_DE | [Michael Schuler](https://github.com/mschuler) |
| Hebrew | he_IL | [Ariel Deil](https://github.com/arieldeil) |
| Hungarian | hu_HU | [Varga Miklós](https://github.com/Micky2149) |
| Italian | it_IT | [rinaldihno](https://github.com/rinaldihno) |
| Japanese | ja_JP | [Tho Nguyen](https://github.com/tho-asterist) |
| Korean | ko_KR | [KyuJoo Han](https://github.com/hanqyu) |
| Norwegian | nb_NO | [Siarhei Khalipski](https://github.com/KhalipskiSiarhei)|
| Persian | fa_IR | [A. Bahrami](https://github.com/alirezakoo) |
| Polish | pl_PL | [foka](https://github.com/foka) |
| Portuguese | pt_PT | [Renato Lima](https://github.com/natenho) |
| Portuguese (Brazil) | pt_BR | [Renato Lima](https://github.com/natenho) |
| Romanian | ro_RO | [Illegitimis](https://github.com/illegitimis) |
| Russian | ru_RU | [LbISS](https://github.com/LbISS) |
| Slovenian | sl_SI | [Jani Bevk](https://github.com/jenzy) |
| Spanish | es_ES | [Ivan Santos](https://github.com/ivansg) |
| Spanish (Mexico) | es_MX | [Ion Mincu](https://github.com/ionmincu) |
| Swedish | sv_SE | [Åke Engelbrektson](https://github.com/eson57) |
| Vietnamese | vi_VN | [Nguyen Duc Son](https://github.com/ali33) |
| Turkish | tr_TR | [Mustafa SADEDİL](https://github.com/sadedil) |
| Tamil | ta_IN | [Sankar Hari](https://github.com/sankarhari) |
| Ukrainian | uk_UA | [Taras](https://github.com/tbudurovych) |
| Greek | el_GR | [hardra1n](https://github.com/Hardra1n) |
| Kazakh | kk_KZ | [hardra1n](https://github.com/Hardra1n) |
<!-- SOON
## Demo
## Download
-->
## Original Source
- .NET - [https://github.com/bradyholt/cron-expression-descriptor](https://github.com/bradyholt/cron-expression-descriptor)
## Ports
- Java - [https://github.com/RedHogs/cron-parser](https://github.com/RedHogs/cron-parser)
- Ruby - [https://github.com/alpinweis/cronex](https://github.com/alpinweis/cronex)
- Golang - [https://github.com/jsuar/go-cron-descriptor](https://github.com/jsuar/go-cron-descriptor)
## Running Unit Tests
```bash
python setup.py test
```
## Translating
cron-descriptor is using [Gettext](https://www.gnu.org/software/gettext/) for translations.
> To create new translation or edit existing one, i suggest using [Poedit](https://poedit.net/).
You can copy/rename and translate any file from `locale` directory:
```bash
cp ./cron_descriptor/locale/de_DE.po ./cron_descriptor/locale/YOUR_LOCALE_CODE.po
poedit ./cron_descriptor/locale/YOUR_LOCALE_CODE.po
```
or you can generate new untranslated *.po file from sources by running in `cron_descriptor` directory:
```bash
cd cron_descriptor
xgettext *.py -o locale/YOUR_LOCALE_CODE.po
```
Generating *.mo file from *.po file. In root directory run command:
```bash
msgfmt -o cron_descriptor/locale/YOUR_LOCALE_CODE.mo cron_descriptor/locale/YOUR_LOCALE_CODE.po
```
## Developing
All suggestions and PR's are welcomed
Just clone this repository and register pre-commit hook by running:
```bash
ln -s ../../code-check.sh .git/hooks/pre-commit
```
Then install dev requirements:
```bash
pip install .[dev,test]
```
Raw data
{
"_id": null,
"home_page": null,
"name": "cron-descriptor",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Adam Schubert <adam.schubert@sg1-game.net>",
"download_url": "https://files.pythonhosted.org/packages/7c/31/0b21d1599656b2ffa6043e51ca01041cd1c0f6dacf5a3e2b620ed120e7d8/cron_descriptor-2.0.6.tar.gz",
"platform": null,
"description": "# Cron Descriptor\n\n[](https://github.com/Salamek/cron-descriptor/actions/workflows/python-test.yml)\n[](https://www.paypal.me/salamek)\n\nA Python library that converts cron expressions into human readable strings. Ported to Python from https://github.com/bradyholt/cron-expression-descriptor.\n\n**Author**: Adam Schubert (https://www.salamek.cz) \n**Original Author & Credit**: Brady Holt (http://www.geekytidbits.com) \n**License**: [MIT](http://opensource.org/licenses/MIT)\n\n## Features \n * Supports all cron expression special characters including * / , - ? L W, #\n * Supports 5, 6 (w/ seconds or year), or 7 (w/ seconds and year) part cron expressions\n * Provides casing options (Sentence, Title, Lower, etc.)\n * Localization with support for ~31 languages\n * Supports Python 3.9 - 3.13\n\n## Installation\nUsing PIP\n```bash\npip install cron-descriptor\n```\n\n## Usage example\n\n### Simple\n```python\nfrom cron_descriptor import get_description, ExpressionDescriptor\n\nprint(get_description(\"* 2 3 * *\"))\n\n#OR\n\nprint(str(ExpressionDescriptor(\"* 2 3 * *\")))\n```\n\n### Advanced\n```python\n# Consult Options.py/CasingTypeEnum.py/DescriptionTypeEnum.py for more info\nfrom cron_descriptor import Options, CasingTypeEnum, DescriptionTypeEnum, ExpressionDescriptor\n\ndescriptor = ExpressionDescriptor(\n expression = \"*/10 * * * *\",\n casing_type = CasingTypeEnum.Sentence,\n use_24hour_time_format = True\n)\n\n# GetDescription uses DescriptionTypeEnum.FULL by default:\nprint(descriptor.get_description())\nprint(f\"{descriptor = }\")\n\n# Or passing Options class as second argument:\n\noptions = Options()\noptions.casing_type = CasingTypeEnum.Sentence\noptions.use_24hour_time_format = True\ndescriptor = ExpressionDescriptor(\"*/10 * * * *\", options)\nprint(descriptor.get_description(DescriptionTypeEnum.FULL))\n```\n\n## Languages Available\n\n| Language | Locale Code | Contributor |\n|---------------------|-------------|---------------------------------------------------------|\n| English | en | [Brady Holt](https://github.com/bradyholt) |\n| Chinese Simplified | zh_CN | [Star Peng](https://github.com/starpeng) |\n| Chinese Traditional | zh_TW | [Ricky Chiang](https://github.com/metavige) |\n| Czech | cs_CZ | [Adam Schubert](https://github.com/salamek) |\n| Danish | da_DK | [Rasmus Melchior Jacobsen](https://github.com/rmja) |\n| Dutch | nl_NL | [TotalMace](https://github.com/TotalMace) |\n| Finnish | fi_FI | [Mikael Rosenberg](https://github.com/MR77FI) |\n| French | fr_FR | [Arnaud TAMAILLON](https://github.com/Greybird) |\n| German | de_DE | [Michael Schuler](https://github.com/mschuler) |\n| Hebrew | he_IL | [Ariel Deil](https://github.com/arieldeil) |\n| Hungarian | hu_HU | [Varga Mikl\u00f3s](https://github.com/Micky2149) |\n| Italian | it_IT | [rinaldihno](https://github.com/rinaldihno) |\n| Japanese | ja_JP | [Tho Nguyen](https://github.com/tho-asterist) |\n| Korean | ko_KR | [KyuJoo Han](https://github.com/hanqyu) |\n| Norwegian | nb_NO | [Siarhei Khalipski](https://github.com/KhalipskiSiarhei)|\n| Persian | fa_IR | [A. Bahrami](https://github.com/alirezakoo) |\n| Polish | pl_PL | [foka](https://github.com/foka) |\n| Portuguese | pt_PT | [Renato Lima](https://github.com/natenho) |\n| Portuguese (Brazil) | pt_BR | [Renato Lima](https://github.com/natenho) |\n| Romanian | ro_RO | [Illegitimis](https://github.com/illegitimis) |\n| Russian | ru_RU | [LbISS](https://github.com/LbISS) |\n| Slovenian | sl_SI | [Jani Bevk](https://github.com/jenzy) |\n| Spanish | es_ES | [Ivan Santos](https://github.com/ivansg) |\n| Spanish (Mexico) | es_MX | [Ion Mincu](https://github.com/ionmincu) |\n| Swedish | sv_SE | [\u00c5ke Engelbrektson](https://github.com/eson57) |\n| Vietnamese | vi_VN | [Nguyen Duc Son](https://github.com/ali33) |\n| Turkish | tr_TR | [Mustafa SADED\u0130L](https://github.com/sadedil) |\n| Tamil | ta_IN | [Sankar Hari](https://github.com/sankarhari) |\n| Ukrainian | uk_UA | [Taras](https://github.com/tbudurovych) |\n| Greek | el_GR | [hardra1n](https://github.com/Hardra1n) |\n| Kazakh | kk_KZ | [hardra1n](https://github.com/Hardra1n) |\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<!-- SOON\n## Demo\n\n\n\n## Download\n\n-->\n\n## Original Source\n - .NET - [https://github.com/bradyholt/cron-expression-descriptor](https://github.com/bradyholt/cron-expression-descriptor)\n\n## Ports\n - Java - [https://github.com/RedHogs/cron-parser](https://github.com/RedHogs/cron-parser)\n - Ruby - [https://github.com/alpinweis/cronex](https://github.com/alpinweis/cronex)\n - Golang - [https://github.com/jsuar/go-cron-descriptor](https://github.com/jsuar/go-cron-descriptor)\n\n## Running Unit Tests\n\n```bash\npython setup.py test\n```\n\n## Translating\ncron-descriptor is using [Gettext](https://www.gnu.org/software/gettext/) for translations.\n\n> To create new translation or edit existing one, i suggest using [Poedit](https://poedit.net/).\n\nYou can copy/rename and translate any file from `locale` directory:\n```bash\ncp ./cron_descriptor/locale/de_DE.po ./cron_descriptor/locale/YOUR_LOCALE_CODE.po\npoedit ./cron_descriptor/locale/YOUR_LOCALE_CODE.po\n```\nor you can generate new untranslated *.po file from sources by running in `cron_descriptor` directory:\n```bash\ncd cron_descriptor\nxgettext *.py -o locale/YOUR_LOCALE_CODE.po\n```\n\nGenerating *.mo file from *.po file. In root directory run command:\n```bash\nmsgfmt -o cron_descriptor/locale/YOUR_LOCALE_CODE.mo cron_descriptor/locale/YOUR_LOCALE_CODE.po\n```\n\n## Developing\n\nAll suggestions and PR's are welcomed\n\nJust clone this repository and register pre-commit hook by running:\n\n```bash\nln -s ../../code-check.sh .git/hooks/pre-commit\n```\n\nThen install dev requirements:\n\n```bash\npip install .[dev,test]\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "A Python library that converts cron expressions into human readable strings.",
"version": "2.0.6",
"project_urls": {
"Homepage": "https://github.com/Salamek/cron-descriptor"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "21cc361326a54ad92e2e12845ad15e335a4e14b8953665007fb514d3393dfb0f",
"md5": "bb099e395999872109f85036e20adbc3",
"sha256": "3a1c0d837c0e5a32e415f821b36cf758eb92d510e6beff8fbfe4fa16573d93d6"
},
"downloads": -1,
"filename": "cron_descriptor-2.0.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bb099e395999872109f85036e20adbc3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 74446,
"upload_time": "2025-09-03T16:30:21",
"upload_time_iso_8601": "2025-09-03T16:30:21.397858Z",
"url": "https://files.pythonhosted.org/packages/21/cc/361326a54ad92e2e12845ad15e335a4e14b8953665007fb514d3393dfb0f/cron_descriptor-2.0.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7c310b21d1599656b2ffa6043e51ca01041cd1c0f6dacf5a3e2b620ed120e7d8",
"md5": "3a70cae4c8a2b050c531c530c0d36b08",
"sha256": "e39d2848e1d8913cfb6e3452e701b5eec662ee18bea8cc5aa53ee1a7bb217157"
},
"downloads": -1,
"filename": "cron_descriptor-2.0.6.tar.gz",
"has_sig": false,
"md5_digest": "3a70cae4c8a2b050c531c530c0d36b08",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 49456,
"upload_time": "2025-09-03T16:30:22",
"upload_time_iso_8601": "2025-09-03T16:30:22.434026Z",
"url": "https://files.pythonhosted.org/packages/7c/31/0b21d1599656b2ffa6043e51ca01041cd1c0f6dacf5a3e2b620ed120e7d8/cron_descriptor-2.0.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-03 16:30:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Salamek",
"github_project": "cron-descriptor",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "cron-descriptor"
}