{"id":13468726,"url":"https://github.com/ovh/celery-director","last_synced_at":"2025-05-16T04:04:39.355Z","repository":{"id":37697931,"uuid":"237214292","full_name":"ovh/celery-director","owner":"ovh","description":"Simple and rapid framework to build workflows with Celery","archived":false,"fork":false,"pushed_at":"2025-04-22T13:28:15.000Z","size":3201,"stargazers_count":541,"open_issues_count":17,"forks_count":61,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-22T13:39:32.070Z","etag":null,"topics":["celery","python","workflow"],"latest_commit_sha":null,"homepage":"https://ovh.github.io/celery-director/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ovh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-30T13:02:40.000Z","updated_at":"2025-04-22T13:14:25.000Z","dependencies_parsed_at":"2024-01-11T23:24:39.132Z","dependency_job_id":"3cc473fa-b6c4-4a08-9437-18d6602fbe2b","html_url":"https://github.com/ovh/celery-director","commit_stats":{"total_commits":190,"total_committers":21,"mean_commits":9.047619047619047,"dds":0.7315789473684211,"last_synced_commit":"13c20414359f2a37c575f710bedba29dc4c2e0be"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fcelery-director","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fcelery-director/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fcelery-director/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovh%2Fcelery-director/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ovh","download_url":"https://codeload.github.com/ovh/celery-director/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254464894,"owners_count":22075570,"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":["celery","python","workflow"],"created_at":"2024-07-31T15:01:17.565Z","updated_at":"2025-05-16T04:04:39.339Z","avatar_url":"https://github.com/ovh.png","language":"Python","funding_links":[],"categories":["Python","Task flow and organization","Building"],"sub_categories":["Workflows"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Celery Director logo\" src=\"https://raw.githubusercontent.com/ovh/celery-director/master/logo.png\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ovh/celery-director/actions/workflows/tests.yml\"\u003e\u003cimg alt=\"Tests\" src=\"https://github.com/ovh/celery-director/workflows/Tests/badge.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.python.org/\"\u003e\u003cimg alt=\"Python versions\" src=\"https://img.shields.io/badge/python-3.8%2B-blue.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ovh/depc/blob/master/LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/license-BSD%203--Clause-blue.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/python/black\"\u003e\u003cimg alt=\"Code style: black\" src=\"https://img.shields.io/badge/code%20style-black-000000.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/ovh/celery-director/master/director.gif\"\u003e\u003cimg alt=\"Celery Director\" src=\"https://raw.githubusercontent.com/ovh/celery-director/master/director.gif\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n----------------\n\nDirector is a simple and rapid framework used to manage tasks and build workflows using Celery.\n\nThe objective is to make Celery easier to use by providing :\n\n- a WebUI, an API and a CLI to manage and execute the workflows,\n- a WebUI to track the tasks states,\n- a YAML syntax used to combine tasks into workflows,\n- the ability to periodically launch a whole workflow,\n- and many others.\n\nSee how to use Director with the quickstart and guides in the [documentation](https://ovh.github.io/celery-director/).\n\n## Installation\n\nInstall the latest version of Director with pip (requires at least `Python 3.7`):\n\n```bash\npip install celery-director\n```\n\n## Usage\n\n### Write your code in Python\n\n```python\n# tasks/orders.py\nfrom director import task\nfrom .utils import Order, Mail\n\n@task(name=\"ORDER_PRODUCT\")\ndef order_product(*args, **kwargs):\n    order = Order(\n      user=kwargs[\"payload\"][\"user\"],\n      product=kwargs[\"payload\"][\"product\"]\n    ).save()\n    return {\"id\": order.id}\n\n@task(name=\"SEND_MAIL\")\ndef send_mail(*args, **kwargs):\n    order_id = args[0][\"id\"]\n    mail = Mail(\n      title=f\"Your order #{order_id} has been received\",\n      user=kwargs[\"payload\"][\"user\"]\n    )\n    mail.send()\n```\n\n### Build your workflows in YAML\n\n```yaml\n# workflows.yml\nproduct.ORDER:\n  tasks:\n    - ORDER_PRODUCT\n    - SEND_MAIL\n```\n\n### Run it\n\nYou can simply test your workflow in local :\n\n```bash\n$ director workflow run product.ORDER '{\"user\": 1234, \"product\": 1000}'\n```\n\nAnd run it in production using the director API :\n\n```bash\n$ curl --header \"Content-Type: application/json\" \\\n  --request POST \\\n  --data '{\"project\": \"product\", \"name\": \"ORDER\", \"payload\": {\"user\": 1234, \"product\": 1000}}' \\\n  http://localhost:8000/api/workflows\n```\n\nRead the [documentation](https://ovh.github.io/celery-director/) to try the quickstart and see advanced usages of Celery Director.\n\n## Project layout\n\n    .env                # The configuration file.\n    workflows.yml       # The workflows definition.\n    tasks/\n        example.py      # A file containing some tasks.\n        ...             # Other files containing other tasks.\n\n## Commands\n\n* `director init [path]` - Create a new project.\n* `director celery [worker|beat|flower]` - Start Celery daemons.\n* `director webserver` - Start the webserver.\n* `director workflow [list|show|run]` - Manage your project workflows.\n\n## License\n\nSee https://github.com/ovh/celery-director/blob/master/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovh%2Fcelery-director","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fovh%2Fcelery-director","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovh%2Fcelery-director/lists"}