DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
Status
| State | Draft |
| Discussion Thread | Email: tbd. Slack: #sig-examples |
| Vote Thread | tbd. |
| Vote Result Thread | tbd. |
| Progress Tracking (PR/GitHub Project/Issue Label) | |
| Date Created |
|
| Version Released | tbd. |
| Authors |
Motivation
Airflow Examples have been grown in number and focus over the past years. They purpose multiple things:
- Serve as tutorials to learn Airflow DAG implementation
- Serve with code snippets for documentation
- Serve for testing the setup
- (some) service for CI integration testing
Some example DAGs are in a good quality, some are not following best practices. Current examples do not follow a structure.
There are example DAGs contained in the Airflow core (currently pushed to standard provider/example_dags) as well as there are more examples in other providers. But examples from other providers are lot loaded automatically.
So in the Airflow 3 Dev Calls there was a demand named to clean-up and optimize example DAGs.
Considerations / Targets
- The number of examples should be reduced to 20-30
- If possible examples from docs should be represented in examples. Some code examples which are stand-alone in code should be moved into examples if possible.
- Otherwise example content not referenced in documentation might be questioned if beneficial
- Examples should be arranged along a story-line if possible which might represent a virtual company and support real-life use cases
- Examples should follow best practices in coding
- Existing examples should be reviewed which DAGs are just used for testing. Testing DAGs should be separated and not pollute the example collection
- Some examples are specific for providers. They should be moved to provider packages
- A mechanism is to be created that uses DAG bundle loading mechanism to load example DAGs from providers w/o need to copy them to global examples.
- Same like today if loading of example DAGs is enabled also needed plugins e.g. timetables should be usable out-of-the-box
- (more tbd?)
Storyline
Note
Technical Work Packages → Features
WIP
Work in progress
--load-example-dagsmust load examples from standard provider at least in Airflow 3.1 (same like in breeze hack today)- Testing DAGs must be loadable (at least in breeze) to be able to remove them from example tree
- DAG Budles must be extended depending on installed/available providers to extend examples - allowing to move examples from core to providers (e.g.
example_kubernetes_executor.py→ cncf.kubernetes)
Proposed Technical Excellence in Example DAGs
Note
Draft / Brainstorming quality.
- All code has documentation (pydoc)
- All DAGs have DAG MD docs and task MD docs
- All DAGs and Tasks use Typing
- The Examples use tags mapping to use cases of storyline.
- All examples carry the the tag "
Example" - If the DAG is serving as a tuutorial, it is having the tag "
Tutorial" - Current examples that we move off for testing (or which are dual-use) get a tag "
Testing"
- All examples carry the the tag "
- Ruff + Mypy checks are enabled and examples follow code quality guidelines
- DAGs and Tasks have nice display names
- Examples do not use deprecated functions
- Examples do not carry top-level code
- All examples are running in the standard setup out-of-the-box. They need to run out-of-the-box (e.g. no connections, SW packages need to be created prior run)
- Examples should integrate into the storyline and not just stand-alone to showcase a technical feature
Current Examples → Example DAG Target Panning
See https://github.com/apache/airflow/tree/main/airflow-core/src/airflow/example_dags
| Name | Gaps | Proposed Change |
|---|---|---|
Core - airflow-core/src/airflow/example_dags | ||
example_asset_alias.py | ||
example_asset_alias_with_no_taskflow.py | ||
example_asset_decorator.py | ||
example_assets.py | ||
example_asset_with_watchers.py | ||
example_bash_decorator.py | ||
example_bash_operator.py | ||
example_branch_datetime_operator.py | ||
example_branch_day_of_week_operator.py | ||
example_branch_labels.py | ||
example_branch_operator_decorator.py | ||
example_branch_operator.py | ||
example_branch_python_dop_operator_3.py | ||
example_complex.py | ||
example_custom_weight.py | ||
example_dag_decorator.py | ||
example_display_name.py | ||
example_dynamic_task_mapping.py | ||
example_dynamic_task_mapping_with_no_taskflow_operators.py | ||
example_external_task_marker_dag.py | ||
example_inlet_event_extra.py | ||
example_kubernetes_executor.py | ||
example_latest_only.py | ||
example_latest_only_with_trigger.py | ||
example_local_kubernetes_executor.py | ||
example_nested_branch_dag.py | ||
example_outlet_event_extra.py | ||
example_params_trigger_ui.py | ||
example_params_ui_tutorial.py | ||
example_passing_params_via_test_command.py | ||
example_python_decorator.py | ||
example_python_operator.py | ||
example_sensor_decorator.py | ||
example_sensors.py | ||
example_setup_teardown.py | ||
example_setup_teardown_taskflow.py | ||
example_short_circuit_decorator.py | ||
example_short_circuit_operator.py | ||
example_simplest_dag.py | ||
example_skip_dag.py | ||
example_task_group_decorator.py | ||
example_task_group.py | ||
example_time_delta_sensor_async.py | ||
example_trigger_controller_dag.py | ||
example_trigger_target_dag.py | ||
example_workday_timetable.py | ||
example_xcomargs.py | ||
example_xcom.py | ||
ArangoDB - providers/arangodb/src/airflow/providers/arangodb/example_dags | ||
example_arangodb.py | ||
Oracle - providers/oracle/src/airflow/providers/oracle/example_dags | ||
example_oracle.py | ||
Edge - providers/edge3/src/airflow/providers/edge3/example_dags | ||
integration_test.py | ||
win_notepad.py | ||
win_test.py | ||