{"id":15132514,"url":"https://github.com/miksus/rocketry","last_synced_at":"2025-05-14T04:07:48.364Z","repository":{"id":41236813,"uuid":"270611419","full_name":"Miksus/rocketry","owner":"Miksus","description":"Modern scheduling library for Python","archived":false,"fork":false,"pushed_at":"2023-11-15T13:05:55.000Z","size":2604,"stargazers_count":3328,"open_issues_count":59,"forks_count":110,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-10T20:55:49.909Z","etag":null,"topics":["automation","automation-framework","framework","pydantic","python","scheduler","scheduling"],"latest_commit_sha":null,"homepage":"https://rocketry.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Miksus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.rst","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"Miksus"}},"created_at":"2020-06-08T09:39:43.000Z","updated_at":"2025-04-06T02:31:52.000Z","dependencies_parsed_at":"2024-06-18T14:02:51.115Z","dependency_job_id":"84cbf919-7a06-4c13-9042-1219efc08062","html_url":"https://github.com/Miksus/rocketry","commit_stats":{"total_commits":1572,"total_committers":16,"mean_commits":98.25,"dds":"0.029262086513994867","last_synced_commit":"8da223c743003166f5567a017b4ba3dfb34454ef"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miksus%2Frocketry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miksus%2Frocketry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miksus%2Frocketry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miksus%2Frocketry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Miksus","download_url":"https://codeload.github.com/Miksus/rocketry/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254069599,"owners_count":22009558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","automation-framework","framework","pydantic","python","scheduler","scheduling"],"created_at":"2024-09-26T04:20:22.790Z","updated_at":"2025-05-14T04:07:48.324Z","avatar_url":"https://github.com/Miksus.png","language":"Python","funding_links":["https://github.com/sponsors/Miksus"],"categories":[],"sub_categories":[],"readme":"\n\n\u003ch1 align=\"center\"\u003e\u003ca href=\"https://rocketry.readthedocs.io\"\u003eRocketry\u003c/a\u003e\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eThe engine to power your Python apps\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/Miksus/rocketry/actions/workflows/main.yml/badge.svg?branch=master\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://github.com/Miksus/rocketry/actions/workflows/main.yml/badge.svg?branch=master\" alt=\"Test\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://codecov.io/gh/Miksus/rocketry\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://codecov.io/gh/Miksus/rocketry/branch/master/graph/badge.svg?token=U2KF1QA5HT\" alt=\"Test coverage\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/rocketry\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://badgen.net/pypi/v/rocketry?color=969696\" alt=\"Package version\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/rocketry\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://badgen.net/pypi/python/rocketry?color=969696\u0026labelColor=black\" alt=\"Supported Python versions\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n-----------------\n\n## What is it?\n\nRocketry is a modern statement-based scheduling framework \nfor Python. It is simple, clean and extensive.\nIt is suitable for small and big projects.\n\nThis is how it looks like:\n\n```python\nfrom rocketry import Rocketry\nfrom rocketry.conds import daily\n\napp = Rocketry()\n\n@app.task(daily)\ndef do_daily():\n    ...\n\nif __name__ == '__main__':\n    app.run()\n```\n\nCore functionalities:\n\n- Powerful scheduling\n- Concurrency (async, threading, multiprocess)\n- Parametrization\n- Task pipelining\n- Modifiable session also in runtime\n- Async support\n\nLinks:\n\n- Documentation: https://rocketry.readthedocs.io\n- Source code: https://github.com/Miksus/rocketry\n- Releases: https://pypi.org/project/rocketry/\n\n## Why Rocketry?\n\nUnlike the alternatives, Rocketry's scheduler is \nstatement-based. Rocketry natively supports the \nsame scheduling strategies as the other options, \nincluding cron and task pipelining, but it can also be\narbitrarily extended using custom scheduling statements.\n\nHere is an example of custom conditions:\n\n```python\nfrom rocketry.conds import daily, time_of_week\nfrom pathlib import Path\n\n@app.cond()\ndef file_exists(file):\n    return Path(file).exists()\n\n@app.task(daily.after(\"08:00\") \u0026 file_exists(\"myfile.csv\"))\ndef do_work():\n    ...\n```\n\nRocketry is suitable for quick automation projects\nand for larger scale applications. It does not make\nassumptions of your project structure.\n\n## Installation\n\nInstall Rocketry from [PyPI](https://pypi.org/project/rocketry/):\n\n```shell\npip install rocketry\n```\n\n\n## More Examples\n\nHere are some more examples of what it can do.\n\n**Scheduling:**\n\n```python\nfrom rocketry.conds import every\nfrom rocketry.conds import hourly, daily, weekly, \nfrom rocketry.conds import time_of_day\nfrom rocketry.conds import cron\n\n@app.task(every(\"10 seconds\"))\ndef do_continuously():\n    ...\n\n@app.task(daily.after(\"07:00\"))\ndef do_daily_after_seven():\n    ...\n\n@app.task(hourly \u0026 time_of_day.between(\"22:00\", \"06:00\"))\ndef do_hourly_at_night():\n    ...\n\n@app.task((weekly.on(\"Mon\") | weekly.on(\"Sat\")) \u0026 time_of_day.after(\"10:00\"))\ndef do_twice_a_week_after_ten():\n    ...\n\n@app.task(cron(\"* 2 * * *\"))\ndef do_based_on_cron():\n    ...\n```\n\n**Pipelining tasks:**\n\n```python\nfrom rocketry.conds import daily, after_success\nfrom rocketry.args import Return\n\n@app.task(daily.after(\"07:00\"))\ndef do_first():\n    ...\n    return 'Hello World'\n\n@app.task(after_success(do_first))\ndef do_second(arg=Return('do_first')):\n    # arg contains the value of the task do_first's return\n    ...\n    return 'Hello Python'\n```\n\n\n**Parallelizing tasks:**\n\n```python\nfrom rocketry.conds import daily\n\n@app.task(daily, execution=\"main\")\ndef do_unparallel():\n    ...\n\n@app.task(daily, execution=\"async\")\nasync def do_async():\n    ...\n\n@app.task(daily, execution=\"thread\")\ndef do_on_separate_thread():\n    ...\n\n@app.task(daily, execution=\"process\")\ndef do_on_separate_process():\n    ...\n```\n\n---\n\n## Interested?\n\nRead more from [the documentation](https://rocketry.readthedocs.io).\n\n## About Library\n\n- **Author:** Mikael Koli ([Miksus](https://github.com/Miksus)) - koli.mikael@gmail.com\n- **License:** MIT\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiksus%2Frocketry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiksus%2Frocketry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiksus%2Frocketry/lists"}