{ "info": { "author": "Andrew Hawker", "author_email": "andrew.r.hawker@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "crython\n=======\n\n|Join the chat at https://gitter.im/crython/Lobby|\n\n|Build Status| |Build status| |codecov| |Code Climate| |Issue Count|\n\n|PyPI version| |PyPI versions|\n\n|Stories in Ready|\n\ncrython is a lightweight task (function) scheduler using\n`cron `__ expressions written in\npython.\n\nStatus\n~~~~~~\n\nThis module is actively maintained.\n\nInstallation\n~~~~~~~~~~~~\n\nTo install crython from `pip `__:\n\n.. code:: bash\n\n $ pip install crython\n\nTo install crython from source:\n\n.. code:: bash\n\n $ git clone git@github.com:ahawker/crython.git\n $ python setup.py install\n\nUsage\n~~~~~\n\nCrython supports seven fields (seconds, minutes, hours, day of month,\nmonth, weekday, year).\n\nCall a function once a minute:\n\n.. code:: python\n\n import crython\n\n # Fire once a minute.\n @crython.job(second=0)\n def foo():\n print \"... while heavy sack beatings are up a shocking nine hundred percent? - Kent Brockman\"\n\nCall a function every ten seconds:\n\n.. code:: python\n\n # Fire every 10 seconds.\n @crython.job(second=range(0, 60, 10))\n def foo():\n print \"I'm a big four-eyed lame-o and I wear the same stupid sweater every day. - Homer's Brain\"\n\nCall a function with a single cron expression:\n\n.. code:: python\n\n # Fire every 10 seconds.\n @crython.job(second='*/10')\n def foo():\n print \"Hail to the thee Kamp Krusty... - Kampers\"\n\nCall a function with a full cron expression:\n\n.. code:: python\n\n # Fire once a week.\n @crython.job(expr='0 0 0 * * 0 *')\n def foo():\n print \"Back in line, maggot! - Kearny\"\n\nCall a function with positional and/or keyword arguments:\n\n.. code:: python\n\n # Fire every second.\n @job('safety gloves', second='*', name='Homer Simpson')\n def foo(item, name):\n print \"Well, I don't need {0}, because I'm {1}. -- Grimey\".format(item, name)\n\nCall a function using `predefined\nkeywords `__:\n\n.. code:: python\n\n # Fire once a day.\n @crython.job(expr='@daily')\n def foo():\n print \"That's where I saw the leprechaun. He tells me to burn things! - Ralph Wiggum\"\n\n.. code:: python\n\n # Fire once immediately after scheduler starts.\n @crython.job(expr='@reboot')\n def foo():\n print \"I call the big one bitey. - Homer Simpson\"\n\nCall a function and run it within a separate thread (default behaviour\nif ``ctx`` is not specified):\n\n.. code:: python\n\n # Fire once a week.\n @crython.job(expr='@weekly', ctx='thread')\n def foo():\n print \"No, no, dig up stupid. - Chief Wiggum\"\n\nCall a function and run it within a separate process:\n\n.. code:: python\n\n # Fire every hour.\n @crython.job(expr='@hourly', ctx='multiprocess')\n def foo():\n print \"Eat my shorts. - Bart Simpson\"\n\nStart the global job scheduler:\n\n.. code:: python\n\n if __name__ == '__main__':\n crython.start()\n\nKeywords\n~~~~~~~~\n\n+-----------------------+-----------------------+-----------------------+\n| Entry | Description | Equivalent To |\n+=======================+=======================+=======================+\n| @yearly/@annually | Run once a year at | 0 0 0 0 1 1 \\* |\n| | midnight in the | |\n| | morning of January 1 | |\n+-----------------------+-----------------------+-----------------------+\n| @monthly | Run once a month at | 0 0 0 0 1 \\* \\* |\n| | midnight in the | |\n| | morning of the first | |\n| | of the month | |\n+-----------------------+-----------------------+-----------------------+\n| @weekly | Run once a week at | 0 0 0 0 \\* 0 \\* |\n| | midnight in the | |\n| | morning of Sunday | |\n+-----------------------+-----------------------+-----------------------+\n| @daily | Run once a day at | 0 0 0 \\* \\* \\* \\* |\n| | midnight | |\n+-----------------------+-----------------------+-----------------------+\n| @hourly | Run once an hour at | 0 0 \\* \\* \\* \\* \\* |\n| | the beginning of the | |\n| | hour | |\n+-----------------------+-----------------------+-----------------------+\n| @minutely | Run once a minute at | 0 \\* \\* \\* \\* \\* \\* |\n| | the beginning of the | |\n| | minute | |\n+-----------------------+-----------------------+-----------------------+\n| @reboot | Run once at startup | @reboot |\n+-----------------------+-----------------------+-----------------------+\n\nTODO\n~~~~\n\n- Support \u201cL\u201d, \u201cW\u201d and \u201c#\u201d specials.\n- Determine time delta from now -> next time expression is valid.\n\nContributing\n~~~~~~~~~~~~\n\nIf you would like to contribute, simply fork the repository, push your\nchanges and send a pull request.\n\nLicense\n~~~~~~~\n\nCrython is available under the `MIT\nlicense `__.\n\nSee Other\n~~~~~~~~~\n\nThere are similar python cron libraries out there. See:\n`pycron `__,\n`python-crontab `__,\n`cronex `__.\n\n.. |Join the chat at https://gitter.im/crython/Lobby| image:: https://badges.gitter.im/crython/Lobby.svg\n :target: https://gitter.im/crython/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n.. |Build Status| image:: https://travis-ci.org/ahawker/crython.png\n :target: https://travis-ci.org/ahawker/crython\n.. |Build status| image:: https://ci.appveyor.com/api/projects/status/lrl0vof32pkl3tu9?svg=true\n :target: https://ci.appveyor.com/project/ahawker/crython\n.. |codecov| image:: https://codecov.io/gh/ahawker/crython/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/ahawker/crython\n.. |Code Climate| image:: https://codeclimate.com/github/ahawker/crython/badges/gpa.svg\n :target: https://codeclimate.com/github/ahawker/crython\n.. |Issue Count| image:: https://codeclimate.com/github/ahawker/crython/badges/issue_count.svg\n :target: https://codeclimate.com/github/ahawker/crython\n.. |PyPI version| image:: https://badge.fury.io/py/crython.svg\n :target: https://badge.fury.io/py/crython\n.. |PyPI versions| image:: https://img.shields.io/pypi/pyversions/crython.svg\n :target: https://pypi.python.org/pypi/crython\n.. |Stories in Ready| image:: https://badge.waffle.io/ahawker/crython.svg?label=ready&title=Ready\n :target: http://waffle.io/ahawker/crython\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ahawker/crython", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "crython", "package_url": "https://pypi.org/project/crython/", "platform": "", "project_url": "https://pypi.org/project/crython/", "project_urls": { "Homepage": "https://github.com/ahawker/crython" }, "release_url": "https://pypi.org/project/crython/0.2.0/", "requires_dist": null, "requires_python": "", "summary": "Lightweight task scheduler using cron expressions.", "version": "0.2.0" }, "last_serial": 4526869, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "492a6fe996834295ab82704b6bc12dea", "sha256": "29e3e10bf2dcfed92f18d979fc6de686b8967e5df7d3bbf89a16772fdb2155ed" }, "downloads": -1, "filename": "crython-0.0.1.zip", "has_sig": false, "md5_digest": "492a6fe996834295ab82704b6bc12dea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11138, "upload_time": "2013-02-28T05:42:29", "url": "https://files.pythonhosted.org/packages/64/88/be509493b359e82f56c747fae6d0729349acb3ae2de6f92f366ea4575d30/crython-0.0.1.zip" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "4b68c5989271d1b1b84b4c2c46f163f5", "sha256": "1d72ca15dd323fd42ed739fcee1d0fade2ee147c06dddc246d964e0d9d0075b1" }, "downloads": -1, "filename": "crython-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b68c5989271d1b1b84b4c2c46f163f5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14411, "upload_time": "2017-01-22T20:56:00", "url": "https://files.pythonhosted.org/packages/b9/3d/17504086ad60d390054f25f89464308ffaa4c5fc9109027f919f09b1df02/crython-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f32e6b37ba55d33d642f679fa7fb6b3e", "sha256": "11be2f6e53a4359bf1d2e1cb7da246a2602e0b06f832549a13d676e5faaa5d23" }, "downloads": -1, "filename": "crython-0.0.3.tar.gz", "has_sig": false, "md5_digest": "f32e6b37ba55d33d642f679fa7fb6b3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12561, "upload_time": "2017-01-22T20:56:02", "url": "https://files.pythonhosted.org/packages/0f/c6/60ed0f2aa2a1c59aa92515bbe1792c1c34cd26b7c68599fe8ecce969bbd0/crython-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "28ccf8d237edb37519be78837fa1e93c", "sha256": "d0743435f1c38887d56bd002b2541ac27456b3d9c9f3fd5df029b0f274f91812" }, "downloads": -1, "filename": "crython-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "28ccf8d237edb37519be78837fa1e93c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14469, "upload_time": "2017-02-07T03:29:55", "url": "https://files.pythonhosted.org/packages/c7/c2/0d765000983c727bd4ba7120b1667b43d6bbf0b37fdcb55141878a96709b/crython-0.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc2591060ab5385dd2855ebf447dedfe", "sha256": "934cbead6e6d31a10fe00481322d919d28f68eddf2f5291a2d68b12239a0f612" }, "downloads": -1, "filename": "crython-0.0.4.tar.gz", "has_sig": false, "md5_digest": "fc2591060ab5385dd2855ebf447dedfe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12776, "upload_time": "2017-02-07T03:29:57", "url": "https://files.pythonhosted.org/packages/77/e8/d1432115a31e0666ba87cae931b9b06896fe86731bec03c78a25862d95c9/crython-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "4d147e8dde5fc5ae28ec289baeb32ed1", "sha256": "02b11690c4e3c002cc2a4a4ca39782ecf5a31d489b5e199c4e03d83cdda6be8e" }, "downloads": -1, "filename": "crython-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d147e8dde5fc5ae28ec289baeb32ed1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14499, "upload_time": "2017-04-07T04:42:34", "url": "https://files.pythonhosted.org/packages/d9/0b/dcfefeb573bc59a2af763548a4a64d8c84cd9e501e86fd49171739599d57/crython-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3f6a6bbb85f6369828a7e3d9f7399b7e", "sha256": "3ec5025c54c67faefe318a9a949b2764a0830a5b1f76e69a4c77830cd7e1dced" }, "downloads": -1, "filename": "crython-0.0.5.tar.gz", "has_sig": false, "md5_digest": "3f6a6bbb85f6369828a7e3d9f7399b7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12779, "upload_time": "2017-04-07T04:42:35", "url": "https://files.pythonhosted.org/packages/ce/82/d37dabd38e56dbff002b3eacb9153940bfc286d8620f53103ac92608a512/crython-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "d681b6f85658818ecba8cb4361332652", "sha256": "769beb599fdf2bd6ad48aa22aa80479ef0ee71a277e9021ab806a8998c411a6c" }, "downloads": -1, "filename": "crython-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d681b6f85658818ecba8cb4361332652", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14503, "upload_time": "2017-05-25T00:43:00", "url": "https://files.pythonhosted.org/packages/8a/8c/edc8d8f96756ee62a421ac0685dd6946e5377373c79852bf5aff13d66375/crython-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44018f60f259610827713da7507597cc", "sha256": "a8399900426431a00f195dbc51f9d4e293573399446af2545691e248eeebcb20" }, "downloads": -1, "filename": "crython-0.0.6.tar.gz", "has_sig": false, "md5_digest": "44018f60f259610827713da7507597cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12795, "upload_time": "2017-05-25T00:43:01", "url": "https://files.pythonhosted.org/packages/b7/fb/ff62b7c175fa1886b1b77408f1295acc073c9e58e3faed1e53ac23276999/crython-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "2d4e41f40b4b659c77cd2aa62a51ccb1", "sha256": "69d4187572688f6bad11cf1ff2545a2771421017a5bff1800c874b39362df971" }, "downloads": -1, "filename": "crython-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d4e41f40b4b659c77cd2aa62a51ccb1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14530, "upload_time": "2017-05-28T23:07:50", "url": "https://files.pythonhosted.org/packages/d2/c7/88fe625fbfd6fd9324114a221cbb774dc257ea9031cb742ad8845e2871b6/crython-0.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56416ecc125668887039a2e9955c7164", "sha256": "7b6efb8aba41f64c69d9e2c29c974bbf7fd99de38548f87b34ad03f81a683766" }, "downloads": -1, "filename": "crython-0.0.7.tar.gz", "has_sig": false, "md5_digest": "56416ecc125668887039a2e9955c7164", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12814, "upload_time": "2017-05-28T23:07:52", "url": "https://files.pythonhosted.org/packages/b5/dc/dca016dba3dbc19fcc6a17b484b02bddc8fec0406895eb7f2e33fb4f224e/crython-0.0.7.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "5ad13313cb28d6929384d7f3828ed96d", "sha256": "98014aa9826d420bd21713408e978e6ab439fec5ee58a619f84be1a89b340dcb" }, "downloads": -1, "filename": "crython-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ad13313cb28d6929384d7f3828ed96d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15701, "upload_time": "2018-09-19T23:15:28", "url": "https://files.pythonhosted.org/packages/59/38/055ada46eb9c852b7f1d76dd861d87f3e99c1761f8d6c921f22c6d515a7c/crython-0.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51d81a0f3ca217982cea9599896272b3", "sha256": "11f94e94e9e700428dfdcdbe1efc2d179392bc983ca0e2940f60dc4a85f85ee8" }, "downloads": -1, "filename": "crython-0.0.9.tar.gz", "has_sig": false, "md5_digest": "51d81a0f3ca217982cea9599896272b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17699, "upload_time": "2018-09-19T23:15:29", "url": "https://files.pythonhosted.org/packages/b2/5e/4d4b900d0cf89a3b07d90e2c4891b6788de7007fcc4c6b320fda12f99bda/crython-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "e0da00d2d66cc325ad60e14f2a330213", "sha256": "41144a3fe9198e97756e1e2076424c72b2741382d2f5caa1fad90cefd77a9341" }, "downloads": -1, "filename": "crython-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0da00d2d66cc325ad60e14f2a330213", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15921, "upload_time": "2018-11-15T16:08:58", "url": "https://files.pythonhosted.org/packages/91/1b/77a85bec40b4d5e713885ade12af919744aa5f263705b3c91b38d410422b/crython-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f48333c567609a2fccc7613da29b0d8a", "sha256": "548de06393d882f00f84a777963ea44e08e791f61d887a93b1399a3c6ea1c3ca" }, "downloads": -1, "filename": "crython-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f48333c567609a2fccc7613da29b0d8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17832, "upload_time": "2018-11-15T16:09:00", "url": "https://files.pythonhosted.org/packages/ec/bc/09829d3f8d8be62aa367913f50e66fd0bee2a68841b3021fb06d4cea376f/crython-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "65815704295d9018545b391ff3eacfbf", "sha256": "002e74a0895411571fd4e9ce89f8f674daaeff7072f05dfd5d97cfa6d91a7aa3" }, "downloads": -1, "filename": "crython-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "65815704295d9018545b391ff3eacfbf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15880, "upload_time": "2018-11-25T19:35:13", "url": "https://files.pythonhosted.org/packages/a4/53/a2459e4e55c285706465d2a003c7205a5c91f53990dd7c28bc5ed71ec04a/crython-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ad6638f95995dc2106cdf0b1317901b", "sha256": "27adb886ad3f87aaa257c8b947a5578eea05df619dff8bbabdced680971313ce" }, "downloads": -1, "filename": "crython-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6ad6638f95995dc2106cdf0b1317901b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17800, "upload_time": "2018-11-25T19:35:15", "url": "https://files.pythonhosted.org/packages/6d/d3/ca918cb4b77e219784a23cdf81a88ed2265964a30e6d89023153665bdb0f/crython-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "65815704295d9018545b391ff3eacfbf", "sha256": "002e74a0895411571fd4e9ce89f8f674daaeff7072f05dfd5d97cfa6d91a7aa3" }, "downloads": -1, "filename": "crython-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "65815704295d9018545b391ff3eacfbf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15880, "upload_time": "2018-11-25T19:35:13", "url": "https://files.pythonhosted.org/packages/a4/53/a2459e4e55c285706465d2a003c7205a5c91f53990dd7c28bc5ed71ec04a/crython-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ad6638f95995dc2106cdf0b1317901b", "sha256": "27adb886ad3f87aaa257c8b947a5578eea05df619dff8bbabdced680971313ce" }, "downloads": -1, "filename": "crython-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6ad6638f95995dc2106cdf0b1317901b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17800, "upload_time": "2018-11-25T19:35:15", "url": "https://files.pythonhosted.org/packages/6d/d3/ca918cb4b77e219784a23cdf81a88ed2265964a30e6d89023153665bdb0f/crython-0.2.0.tar.gz" } ] }