{"id":16556929,"url":"https://github.com/maxg203/airflow-workflows","last_synced_at":"2025-07-27T07:39:14.511Z","repository":{"id":57409307,"uuid":"188023719","full_name":"maxg203/airflow-workflows","owner":"maxg203","description":"Provides a clean, Django-inspired class-based DAG syntax for Apache Airflow.","archived":false,"fork":false,"pushed_at":"2019-05-28T14:07:16.000Z","size":23,"stargazers_count":10,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-01T17:51:14.083Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://pypi.org/project/airflow-workflows/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxg203.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-22T11:20:14.000Z","updated_at":"2024-12-11T02:56:41.000Z","dependencies_parsed_at":"2022-08-24T18:50:43.229Z","dependency_job_id":null,"html_url":"https://github.com/maxg203/airflow-workflows","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxg203%2Fairflow-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxg203%2Fairflow-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxg203%2Fairflow-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxg203%2Fairflow-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxg203","download_url":"https://codeload.github.com/maxg203/airflow-workflows/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238710654,"owners_count":19517741,"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":[],"created_at":"2024-10-11T20:06:06.709Z","updated_at":"2025-02-13T18:34:14.652Z","avatar_url":"https://github.com/maxg203.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Workflows\nWorkflows are a cleaner way of implementing DAGs using a Django-inspired class-based syntax.\n\n## Simple Example\nLet's create a single Airflow DAG, whose name is a camelcased version of the class name, and whose operator dependencies are in the order they are defined.\n\nThere is an option to override the default [`dependencies`](https://github.com/maxg203/airflow-workflows/blob/master/workflows.py#L165) method implementation to customise the dependency chain for your use case.\n\n```python\nimport workflows\n\n\nclass ExampleWorkflow(workflows.Workflow):\n    class Meta:\n        schedule_interval = '0 9 * * *'\n\n    do_something_useful = workflows.PythonOperator(\n        python_callable=lambda **kwargs: print('something useful'),\n    )\n    something_else = workflows.PythonOperator(\n        python_callable=lambda **kwargs: print('Something not useful'),\n    )\n\n\nglobals()[ExampleWorkflow.DAG.dag_id] = ExampleWorkflow.DAG\n```\n\n\n## Dynamic DAG Example\nLet's create (in this case three) DAGs, created dynamically and based on the `ExampleWorkflow` class as implemented above. In other words, they will share the same DAG metadata (so schedule in this case).\n\n```python\nimport workflows\n\nworkflow_names = [\n    'Test1',\n    'Test2',\n    'Test3',\n]\n\nfor workflow in workflow_names:\n    WorkflowClass = workflows.create_workflow(\n        workflow,\n        base=ExampleWorkflow,\n    )\n    globals()[WorkflowClass.DAG.dag_id] = WorkflowClass.DAG\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxg203%2Fairflow-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxg203%2Fairflow-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxg203%2Fairflow-workflows/lists"}