apache-airflow-providers-openlineage 2.6.1rc1__tar.gz → 2.7.0rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/PKG-INFO +7 -8
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/README.rst +4 -5
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/changelog.rst +44 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/guides/developer.rst +8 -8
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/guides/structure.rst +5 -5
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/guides/user.rst +16 -16
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/index.rst +4 -6
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/provider.yaml +2 -1
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/pyproject.toml +4 -4
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/__init__.py +1 -1
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/adapter.py +5 -2
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/facets.py +2 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/listener.py +9 -3
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/utils.py +22 -8
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/version_compat.py +8 -4
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_base_complex_dag.py +1 -1
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_base_simple_dag.py +6 -1
- apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/example_openlineage_setup_teardown_dag.py +70 -0
- apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/example_openlineage_short_circuit_dag.py +92 -0
- apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/example_openlineage_taskflow_simple_dag.py +63 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af2.json +2 -2
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af3.json +4 -4
- apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_setup_teardown_dag__af2.json +194 -0
- apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_setup_teardown_dag__af3.json +114 -0
- apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_short_circuit_dag.json +77 -0
- apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_taskflow_simple_dag.json +325 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_trigger_dag.json +3 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_adapter.py +60 -32
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_facets.py +5 -1
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_listener.py +34 -14
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_utils.py +22 -13
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/test_utils.py +2 -2
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/.latest-doc-only-change.txt +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/commits.rst +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/conf.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/configurations-ref.rst +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/integration-logos/openlineage.svg +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/macros.rst +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/security.rst +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/supported_classes.rst +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/LICENSE +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/conf.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/base.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/bash.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/manager.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/python.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowDagRunFacet.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowDebugRunFacet.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowJobFacet.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowRunFacet.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowStateRunFacet.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/get_provider_info.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/operators/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/operators/empty.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/macros.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/openlineage.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/sqlparser.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/selective_enable.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/spark.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/sql.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/conftest.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/integration/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/integration/openlineage/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/integration/openlineage/operators/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/conftest.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_defer_simple_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_docs_file_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_mapped_simple_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_asset_or_time_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_cron_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_list_complex_assets_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_list_multiple_assets_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_list_single_asset_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_multiple_assets_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_single_asset_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_schedule_timetable_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_task_groups_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_trigger_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_versioned_dag.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_defer_simple_dag.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_docs_file_dag.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_mapped_simple_dag.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_task_groups_dag.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_versioned_dag__af2.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/openlineage_versioned_dag__af3.json +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/operator.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/transport/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/transport/variable.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/dags/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/dags/test_openlineage_execution.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_base.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_bash.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_manager.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_python.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/log_config.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/operators/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/operators/test_empty.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/openlineage_configs/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/openlineage_configs/http.yaml +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_execution.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_macros.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_openlineage.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/test_conf.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/test_sqlparser.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/__init__.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/custom_facet_fixture.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/test_selective_enable.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/test_spark.py +0 -0
- {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/test_sql.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-openlineage
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.0rc1
|
|
4
4
|
Summary: Provider package apache-airflow-providers-openlineage for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,openlineage,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
@@ -27,8 +27,8 @@ Requires-Dist: attrs>=22.2
|
|
|
27
27
|
Requires-Dist: openlineage-integration-common>=1.36.0
|
|
28
28
|
Requires-Dist: openlineage-python>=1.36.0
|
|
29
29
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
30
|
-
Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
31
|
-
Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
30
|
+
Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.7.0/changelog.html
|
|
31
|
+
Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.7.0
|
|
32
32
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
|
33
33
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
34
34
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
@@ -59,9 +59,8 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
|
59
59
|
|
|
60
60
|
Package ``apache-airflow-providers-openlineage``
|
|
61
61
|
|
|
62
|
-
Release: ``2.
|
|
62
|
+
Release: ``2.7.0``
|
|
63
63
|
|
|
64
|
-
Release Date: ``|PypiReleaseDate|``
|
|
65
64
|
|
|
66
65
|
`OpenLineage <https://openlineage.io/>`__
|
|
67
66
|
|
|
@@ -73,12 +72,12 @@ This is a provider package for ``openlineage`` provider. All classes for this pr
|
|
|
73
72
|
are in ``airflow.providers.openlineage`` python package.
|
|
74
73
|
|
|
75
74
|
You can find package information and changelog for the provider
|
|
76
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
75
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.7.0/>`_.
|
|
77
76
|
|
|
78
77
|
Installation
|
|
79
78
|
------------
|
|
80
79
|
|
|
81
|
-
You can install this package on top of an existing Airflow
|
|
80
|
+
You can install this package on top of an existing Airflow installation (see ``Requirements`` below
|
|
82
81
|
for the minimum Airflow version supported) via
|
|
83
82
|
``pip install apache-airflow-providers-openlineage``
|
|
84
83
|
|
|
@@ -119,5 +118,5 @@ Dependent package
|
|
|
119
118
|
================================================================================================================== =================
|
|
120
119
|
|
|
121
120
|
The changelog for the provider package can be found in the
|
|
122
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
121
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.7.0/changelog.html>`_.
|
|
123
122
|
|
|
@@ -23,9 +23,8 @@
|
|
|
23
23
|
|
|
24
24
|
Package ``apache-airflow-providers-openlineage``
|
|
25
25
|
|
|
26
|
-
Release: ``2.
|
|
26
|
+
Release: ``2.7.0``
|
|
27
27
|
|
|
28
|
-
Release Date: ``|PypiReleaseDate|``
|
|
29
28
|
|
|
30
29
|
`OpenLineage <https://openlineage.io/>`__
|
|
31
30
|
|
|
@@ -37,12 +36,12 @@ This is a provider package for ``openlineage`` provider. All classes for this pr
|
|
|
37
36
|
are in ``airflow.providers.openlineage`` python package.
|
|
38
37
|
|
|
39
38
|
You can find package information and changelog for the provider
|
|
40
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
39
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.7.0/>`_.
|
|
41
40
|
|
|
42
41
|
Installation
|
|
43
42
|
------------
|
|
44
43
|
|
|
45
|
-
You can install this package on top of an existing Airflow
|
|
44
|
+
You can install this package on top of an existing Airflow installation (see ``Requirements`` below
|
|
46
45
|
for the minimum Airflow version supported) via
|
|
47
46
|
``pip install apache-airflow-providers-openlineage``
|
|
48
47
|
|
|
@@ -83,4 +82,4 @@ Dependent package
|
|
|
83
82
|
================================================================================================================== =================
|
|
84
83
|
|
|
85
84
|
The changelog for the provider package can be found in the
|
|
86
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
85
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.7.0/changelog.html>`_.
|
|
@@ -26,6 +26,50 @@
|
|
|
26
26
|
Changelog
|
|
27
27
|
---------
|
|
28
28
|
|
|
29
|
+
2.7.0
|
|
30
|
+
.....
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
Release Date: ``|PypiReleaseDate|``
|
|
34
|
+
|
|
35
|
+
Features
|
|
36
|
+
~~~~~~~~
|
|
37
|
+
|
|
38
|
+
* ``add tasksDuration to state run facet (#53644)``
|
|
39
|
+
|
|
40
|
+
Bug Fixes
|
|
41
|
+
~~~~~~~~~
|
|
42
|
+
|
|
43
|
+
* ``Fix setproctitle usage on macos (#53122)``
|
|
44
|
+
* ``Fix mypy no-redef errors for timeout imports in providers (#54471)``
|
|
45
|
+
|
|
46
|
+
Misc
|
|
47
|
+
~~~~
|
|
48
|
+
|
|
49
|
+
* ``Decouple serialization and deserialization code for tasks (#54569)``
|
|
50
|
+
* ``Move secrets_masker over to airflow_shared distribution (#54449)``
|
|
51
|
+
* ``Remove MappedOperator inheritance (#53696)``
|
|
52
|
+
* ``Update usage of timeout contextmanager from SDK where possible (#54183)``
|
|
53
|
+
|
|
54
|
+
Doc-only
|
|
55
|
+
~~~~~~~~
|
|
56
|
+
|
|
57
|
+
* ``Make term Dag consistent in providers docs (#55101)``
|
|
58
|
+
* ``docs: fix broken link on OpenLineage developer section (#54356)``
|
|
59
|
+
|
|
60
|
+
.. Below changes are excluded from the changelog. Move them to
|
|
61
|
+
appropriate section above if needed. Do not delete the lines(!):
|
|
62
|
+
* ``Remove airflow.models.DAG (#54383)``
|
|
63
|
+
* ``chore: add more test cases to OpenLineage system tests (#55138)``
|
|
64
|
+
* ``chore: update ol system tests after bug fix in AF3 (#54629)``
|
|
65
|
+
* ``Switch pre-commit to prek (#54258)``
|
|
66
|
+
* ``Remove SDK BaseOperator in TaskInstance (#53223)``
|
|
67
|
+
* ``chore: Adjust OL system tests to latest changes (#54352)``
|
|
68
|
+
|
|
69
|
+
.. Review and move the new changes to one of the sections above:
|
|
70
|
+
* ``Move email notifications from scheduler to DAG processor (#55238)``
|
|
71
|
+
* ``Fix Airflow 2 reference in README/index of providers (#55240)``
|
|
72
|
+
|
|
29
73
|
2.6.1
|
|
30
74
|
.....
|
|
31
75
|
|
|
@@ -180,7 +180,7 @@ Custom Extractors
|
|
|
180
180
|
This approach is recommended when dealing with Operators that you can not modify (f.e. third party providers), but still want the lineage to be extracted from them.
|
|
181
181
|
If you want to extract lineage from your own Operators, you may prefer directly implementing OpenLineage methods as described in :ref:`openlineage_methods:openlineage`.
|
|
182
182
|
|
|
183
|
-
This approach works by detecting which Airflow Operators your
|
|
183
|
+
This approach works by detecting which Airflow Operators your Dag is using, and extracting lineage data from them using corresponding Extractors class.
|
|
184
184
|
|
|
185
185
|
Interface
|
|
186
186
|
^^^^^^^^^
|
|
@@ -288,7 +288,7 @@ To learn more about how Operators and Extractors work together under the hood, c
|
|
|
288
288
|
When testing an Extractor, we want to firstly verify if ``OperatorLineage`` object is being created,
|
|
289
289
|
specifically verifying that the object is being built with the correct input and output datasets and relevant facets.
|
|
290
290
|
This is done in OpenLineage via pytest, with appropriate mocking and patching for connections and objects.
|
|
291
|
-
Check out `example tests <https://github.com/apache/airflow/blob/main/providers/openlineage/tests/openlineage/extractors/test_base.py>`_.
|
|
291
|
+
Check out `example tests <https://github.com/apache/airflow/blob/main/providers/openlineage/tests/unit/openlineage/extractors/test_base.py>`_.
|
|
292
292
|
|
|
293
293
|
Testing each facet is also important, as data or graphs in the UI can render incorrectly if the facets are wrong.
|
|
294
294
|
For example, if the facet name is created incorrectly in the Extractor, then the Operator's task will not show up in the lineage graph,
|
|
@@ -370,8 +370,8 @@ like extracting column level lineage and inputs/outputs from SQL query with SQL
|
|
|
370
370
|
return lineage_metadata
|
|
371
371
|
|
|
372
372
|
For more examples of OpenLineage Extractors, check out the source code of
|
|
373
|
-
`BashExtractor <https://github.com/apache/airflow/blob/main/providers/
|
|
374
|
-
`PythonExtractor <https://github.com/apache/airflow/blob/main/providers/
|
|
373
|
+
`BashExtractor <https://github.com/apache/airflow/blob/main/providers/openlineage/src/airflow/providers/openlineage/extractors/bash.py>`_ or
|
|
374
|
+
`PythonExtractor <https://github.com/apache/airflow/blob/main/providers/openlineage/src/airflow/providers/openlineage/extractors/python.py>`_.
|
|
375
375
|
|
|
376
376
|
.. _custom_facets:openlineage:
|
|
377
377
|
|
|
@@ -476,19 +476,19 @@ a string of semicolon separated full import path to the functions.
|
|
|
476
476
|
Job Hierarchy
|
|
477
477
|
=============
|
|
478
478
|
|
|
479
|
-
Apache Airflow features an inherent job hierarchy:
|
|
479
|
+
Apache Airflow features an inherent job hierarchy: Dags, large and independently schedulable units, comprise smaller, executable tasks.
|
|
480
480
|
|
|
481
481
|
OpenLineage reflects this structure in its Job Hierarchy model.
|
|
482
482
|
|
|
483
|
-
- Upon
|
|
483
|
+
- Upon Dag scheduling, a START event is emitted.
|
|
484
484
|
- Subsequently, following Airflow's task order, each task triggers:
|
|
485
485
|
|
|
486
486
|
- START events at TaskInstance start.
|
|
487
487
|
- COMPLETE/FAILED events upon completion.
|
|
488
488
|
|
|
489
|
-
- Finally, upon
|
|
489
|
+
- Finally, upon Dag termination, a completion event (COMPLETE or FAILED) is emitted.
|
|
490
490
|
|
|
491
|
-
TaskInstance events' ParentRunFacet references the originating
|
|
491
|
+
TaskInstance events' ParentRunFacet references the originating Dag run.
|
|
492
492
|
|
|
493
493
|
.. _troubleshooting:openlineage:
|
|
494
494
|
|
|
@@ -47,9 +47,9 @@ The metadata collected can answer questions like:
|
|
|
47
47
|
- Are there redundant data processes that can be optimized or removed?
|
|
48
48
|
- What data dependencies exist for this critical report?
|
|
49
49
|
|
|
50
|
-
Understanding complex inter-
|
|
51
|
-
OpenLineage integrates with Airflow to collect
|
|
52
|
-
and viewable via a lineage graph, while also keeping a catalog of historical runs of
|
|
50
|
+
Understanding complex inter-Dag dependencies and providing up-to-date runtime visibility into Dag execution can be challenging.
|
|
51
|
+
OpenLineage integrates with Airflow to collect Dag lineage metadata so that inter-Dag dependencies are easily maintained
|
|
52
|
+
and viewable via a lineage graph, while also keeping a catalog of historical runs of Dags.
|
|
53
53
|
|
|
54
54
|
For OpenLineage backend that will receive events, you can use `Marquez <https://marquezproject.ai/>`_
|
|
55
55
|
|
|
@@ -60,8 +60,8 @@ OpenLineage integration implements `AirflowPlugin <https://airflow.apache.org/do
|
|
|
60
60
|
This allows it to be discovered on Airflow start and register
|
|
61
61
|
`Airflow Listener <https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/listeners.html>`_.
|
|
62
62
|
|
|
63
|
-
The ``OpenLineageListener`` is then called by Airflow when certain events happen - when
|
|
64
|
-
For
|
|
63
|
+
The ``OpenLineageListener`` is then called by Airflow when certain events happen - when Dags or TaskInstances start, complete or fail.
|
|
64
|
+
For Dags, the listener runs in Airflow Scheduler. For TaskInstances, the listener runs on Airflow Worker.
|
|
65
65
|
|
|
66
66
|
When TaskInstance listener method gets called, the ``OpenLineageListener`` constructs metadata like event's unique ``run_id`` and event time.
|
|
67
67
|
Then, it tries to extract metadata from Airflow Operators as described in :ref:`extraction_precedence:openlineage`.
|
|
@@ -24,7 +24,7 @@ Using OpenLineage integration
|
|
|
24
24
|
OpenLineage is an open framework for data lineage collection and analysis. At its core is an extensible specification that systems can use to interoperate with lineage metadata.
|
|
25
25
|
`Check out OpenLineage docs <https://openlineage.io/docs/>`_.
|
|
26
26
|
|
|
27
|
-
**No change to user
|
|
27
|
+
**No change to user Dag files is required to use OpenLineage**. Basic configuration is needed so that OpenLineage knows where to send events.
|
|
28
28
|
|
|
29
29
|
Quickstart
|
|
30
30
|
==========
|
|
@@ -57,7 +57,7 @@ This example is a basic demonstration of OpenLineage setup.
|
|
|
57
57
|
|
|
58
58
|
AIRFLOW__OPENLINEAGE__TRANSPORT='{"type": "http", "url": "http://example.com:5000", "endpoint": "api/v1/lineage"}'
|
|
59
59
|
|
|
60
|
-
3. **That's it !** OpenLineage events should be sent to the configured backend when
|
|
60
|
+
3. **That's it !** OpenLineage events should be sent to the configured backend when Dags are run.
|
|
61
61
|
|
|
62
62
|
Usage
|
|
63
63
|
=====
|
|
@@ -352,10 +352,10 @@ reproducing your environment setup by setting ``debug_mode`` option to ``true``
|
|
|
352
352
|
By setting this variable to true, OpenLineage integration may log and emit extensive details. It should only be enabled temporary for debugging purposes.
|
|
353
353
|
|
|
354
354
|
|
|
355
|
-
Enabling OpenLineage on
|
|
355
|
+
Enabling OpenLineage on Dag/task level
|
|
356
356
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
357
357
|
|
|
358
|
-
One can selectively enable OpenLineage for specific
|
|
358
|
+
One can selectively enable OpenLineage for specific Dags and tasks by using the ``selective_enable`` policy.
|
|
359
359
|
To enable this policy, set the ``selective_enable`` option to True in the [openlineage] section of your Airflow configuration file:
|
|
360
360
|
|
|
361
361
|
.. code-block:: ini
|
|
@@ -371,47 +371,47 @@ To enable this policy, set the ``selective_enable`` option to True in the [openl
|
|
|
371
371
|
|
|
372
372
|
|
|
373
373
|
While ``selective_enable`` enables selective control, the ``disabled`` :ref:`option <options:disable>` still has precedence.
|
|
374
|
-
If you set ``disabled`` to True in the configuration, OpenLineage will be disabled for all
|
|
374
|
+
If you set ``disabled`` to True in the configuration, OpenLineage will be disabled for all Dags and tasks regardless of the ``selective_enable`` setting.
|
|
375
375
|
|
|
376
376
|
Once the ``selective_enable`` policy is enabled, you can choose to enable OpenLineage
|
|
377
|
-
for individual
|
|
377
|
+
for individual Dags and tasks using the ``enable_lineage`` and ``disable_lineage`` functions.
|
|
378
378
|
|
|
379
|
-
1. Enabling Lineage on a
|
|
379
|
+
1. Enabling Lineage on a Dag:
|
|
380
380
|
|
|
381
381
|
.. code-block:: python
|
|
382
382
|
|
|
383
383
|
from airflow.providers.openlineage.utils.selective_enable import disable_lineage, enable_lineage
|
|
384
384
|
|
|
385
|
-
with enable_lineage(
|
|
386
|
-
# Tasks within this
|
|
385
|
+
with enable_lineage(Dag(...)):
|
|
386
|
+
# Tasks within this Dag will have lineage tracking enabled
|
|
387
387
|
MyOperator(...)
|
|
388
388
|
|
|
389
389
|
AnotherOperator(...)
|
|
390
390
|
|
|
391
391
|
2. Enabling Lineage on a Task:
|
|
392
392
|
|
|
393
|
-
While enabling lineage on a
|
|
393
|
+
While enabling lineage on a Dag implicitly enables it for all tasks within that Dag, you can still selectively disable it for specific tasks:
|
|
394
394
|
|
|
395
395
|
.. code-block:: python
|
|
396
396
|
|
|
397
397
|
from airflow.providers.openlineage.utils.selective_enable import disable_lineage, enable_lineage
|
|
398
398
|
|
|
399
|
-
with
|
|
399
|
+
with Dag(...) as dag:
|
|
400
400
|
t1 = MyOperator(...)
|
|
401
401
|
t2 = AnotherOperator(...)
|
|
402
402
|
|
|
403
|
-
# Enable lineage for the entire
|
|
403
|
+
# Enable lineage for the entire Dag
|
|
404
404
|
enable_lineage(dag)
|
|
405
405
|
|
|
406
406
|
# Disable lineage for task t1
|
|
407
407
|
disable_lineage(t1)
|
|
408
408
|
|
|
409
|
-
Enabling lineage on the
|
|
409
|
+
Enabling lineage on the Dag level automatically enables it for all tasks within that Dag unless explicitly disabled per task.
|
|
410
410
|
|
|
411
|
-
Enabling lineage on the task level implicitly enables lineage on its
|
|
411
|
+
Enabling lineage on the task level implicitly enables lineage on its Dag.
|
|
412
412
|
This is because each emitting task sends a `ParentRunFacet <https://openlineage.io/docs/spec/facets/run-facets/parent_run>`_,
|
|
413
|
-
which requires the
|
|
414
|
-
Disabling
|
|
413
|
+
which requires the Dag-level lineage to be enabled in some OpenLineage backend systems.
|
|
414
|
+
Disabling Dag-level lineage while enabling task-level lineage might cause errors or inconsistencies.
|
|
415
415
|
|
|
416
416
|
.. _options:spark_inject_parent_job_info:
|
|
417
417
|
|
|
@@ -81,9 +81,7 @@ apache-airflow-providers-openlineage package
|
|
|
81
81
|
`OpenLineage <https://openlineage.io/>`__
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
Release: 2.
|
|
85
|
-
|
|
86
|
-
Release Date: ``|PypiReleaseDate|``
|
|
84
|
+
Release: 2.7.0
|
|
87
85
|
|
|
88
86
|
Provider package
|
|
89
87
|
----------------
|
|
@@ -94,7 +92,7 @@ All classes for this package are included in the ``airflow.providers.openlineage
|
|
|
94
92
|
Installation
|
|
95
93
|
------------
|
|
96
94
|
|
|
97
|
-
You can install this package on top of an existing Airflow
|
|
95
|
+
You can install this package on top of an existing Airflow installation via
|
|
98
96
|
``pip install apache-airflow-providers-openlineage``.
|
|
99
97
|
For the minimum Airflow version supported, see ``Requirements`` below.
|
|
100
98
|
|
|
@@ -140,5 +138,5 @@ Downloading official packages
|
|
|
140
138
|
You can download officially released packages and verify their checksums and signatures from the
|
|
141
139
|
`Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
|
|
142
140
|
|
|
143
|
-
* `The apache-airflow-providers-openlineage 2.
|
|
144
|
-
* `The apache-airflow-providers-openlineage 2.
|
|
141
|
+
* `The apache-airflow-providers-openlineage 2.7.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.7.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.7.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.7.0.tar.gz.sha512>`__)
|
|
142
|
+
* `The apache-airflow-providers-openlineage 2.7.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.7.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.7.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.7.0-py3-none-any.whl.sha512>`__)
|
|
@@ -22,12 +22,13 @@ description: |
|
|
|
22
22
|
`OpenLineage <https://openlineage.io/>`__
|
|
23
23
|
|
|
24
24
|
state: ready
|
|
25
|
-
source-date-epoch:
|
|
25
|
+
source-date-epoch: 1756877213
|
|
26
26
|
# Note that those versions are maintained by release manager - do not update them manually
|
|
27
27
|
# with the exception of case where other provider in sources has >= new provider version.
|
|
28
28
|
# In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
|
|
29
29
|
# to be done in the same PR
|
|
30
30
|
versions:
|
|
31
|
+
- 2.7.0
|
|
31
32
|
- 2.6.1
|
|
32
33
|
- 2.6.0
|
|
33
34
|
- 2.5.0
|
|
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
|
|
|
25
25
|
|
|
26
26
|
[project]
|
|
27
27
|
name = "apache-airflow-providers-openlineage"
|
|
28
|
-
version = "2.
|
|
28
|
+
version = "2.7.0rc1"
|
|
29
29
|
description = "Provider package apache-airflow-providers-openlineage for Apache Airflow"
|
|
30
30
|
readme = "README.rst"
|
|
31
31
|
authors = [
|
|
@@ -54,7 +54,7 @@ requires-python = ">=3.10"
|
|
|
54
54
|
|
|
55
55
|
# The dependencies should be modified in place in the generated file.
|
|
56
56
|
# Any change in the dependencies is preserved when the file is regenerated
|
|
57
|
-
# Make sure to run ``
|
|
57
|
+
# Make sure to run ``prek update-providers-dependencies --all-files``
|
|
58
58
|
# After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
|
|
59
59
|
dependencies = [
|
|
60
60
|
"apache-airflow>=2.10.0rc1",
|
|
@@ -105,8 +105,8 @@ apache-airflow-providers-common-sql = {workspace = true}
|
|
|
105
105
|
apache-airflow-providers-standard = {workspace = true}
|
|
106
106
|
|
|
107
107
|
[project.urls]
|
|
108
|
-
"Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
109
|
-
"Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.
|
|
108
|
+
"Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.7.0"
|
|
109
|
+
"Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.7.0/changelog.html"
|
|
110
110
|
"Bug Tracker" = "https://github.com/apache/airflow/issues"
|
|
111
111
|
"Source Code" = "https://github.com/apache/airflow"
|
|
112
112
|
"Slack Chat" = "https://s.apache.org/airflow-slack"
|
|
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "2.
|
|
32
|
+
__version__ = "2.7.0"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
35
|
"2.10.0"
|
|
@@ -55,9 +55,12 @@ if TYPE_CHECKING:
|
|
|
55
55
|
from airflow.utils.state import DagRunState
|
|
56
56
|
else:
|
|
57
57
|
try:
|
|
58
|
-
from airflow.sdk.
|
|
58
|
+
from airflow.sdk._shared.secrets_masker import SecretsMasker, _secrets_masker
|
|
59
59
|
except ImportError:
|
|
60
|
-
|
|
60
|
+
try:
|
|
61
|
+
from airflow.sdk.execution_time.secrets_masker import SecretsMasker, _secrets_masker
|
|
62
|
+
except ImportError:
|
|
63
|
+
from airflow.utils.log.secrets_masker import SecretsMasker, _secrets_masker
|
|
61
64
|
|
|
62
65
|
_PRODUCER = f"https://github.com/apache/airflow/tree/providers-openlineage/{OPENLINEAGE_PROVIDER_VERSION}"
|
|
63
66
|
|
|
@@ -76,10 +76,12 @@ class AirflowStateRunFacet(RunFacet):
|
|
|
76
76
|
Attributes:
|
|
77
77
|
dagRunState: This indicates the final status of the entire DAG run (e.g., "success", "failed").
|
|
78
78
|
tasksState: A dictionary mapping task IDs to their respective states. (e.g., "failed", "skipped").
|
|
79
|
+
tasksDuration: A dictionary mapping task IDs to it's duration in seconds.
|
|
79
80
|
"""
|
|
80
81
|
|
|
81
82
|
dagRunState: str
|
|
82
83
|
tasksState: dict[str, str]
|
|
84
|
+
tasksDuration: dict[str, float]
|
|
83
85
|
|
|
84
86
|
|
|
85
87
|
@define
|
|
@@ -18,13 +18,13 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
import logging
|
|
20
20
|
import os
|
|
21
|
+
import sys
|
|
21
22
|
from concurrent.futures import ProcessPoolExecutor
|
|
22
23
|
from datetime import datetime
|
|
23
24
|
from typing import TYPE_CHECKING
|
|
24
25
|
|
|
25
26
|
import psutil
|
|
26
27
|
from openlineage.client.serde import Serde
|
|
27
|
-
from setproctitle import getproctitle, setproctitle
|
|
28
28
|
|
|
29
29
|
from airflow import settings
|
|
30
30
|
from airflow.listeners import hookimpl
|
|
@@ -48,16 +48,22 @@ from airflow.providers.openlineage.utils.utils import (
|
|
|
48
48
|
is_selective_lineage_enabled,
|
|
49
49
|
print_warning,
|
|
50
50
|
)
|
|
51
|
+
from airflow.providers.openlineage.version_compat import timeout, timezone
|
|
51
52
|
from airflow.settings import configure_orm
|
|
52
53
|
from airflow.stats import Stats
|
|
53
|
-
from airflow.utils import timezone
|
|
54
54
|
from airflow.utils.state import TaskInstanceState
|
|
55
|
-
from airflow.utils.timeout import timeout
|
|
56
55
|
|
|
57
56
|
if TYPE_CHECKING:
|
|
58
57
|
from airflow.sdk.execution_time.task_runner import RuntimeTaskInstance
|
|
59
58
|
from airflow.settings import Session
|
|
60
59
|
|
|
60
|
+
if sys.platform == "darwin":
|
|
61
|
+
from setproctitle import getproctitle
|
|
62
|
+
|
|
63
|
+
setproctitle = lambda title: logging.getLogger(__name__).debug("Mac OS detected, skipping setproctitle")
|
|
64
|
+
else:
|
|
65
|
+
from setproctitle import getproctitle, setproctitle
|
|
66
|
+
|
|
61
67
|
_openlineage_listener: OpenLineageListener | None = None
|
|
62
68
|
|
|
63
69
|
|
|
@@ -97,19 +97,27 @@ else:
|
|
|
97
97
|
from airflow.datasets import Dataset as Asset
|
|
98
98
|
|
|
99
99
|
try:
|
|
100
|
-
from airflow.sdk.
|
|
100
|
+
from airflow.sdk._shared.secrets_masker import (
|
|
101
101
|
Redactable,
|
|
102
102
|
Redacted,
|
|
103
103
|
SecretsMasker,
|
|
104
104
|
should_hide_value_for_key,
|
|
105
105
|
)
|
|
106
106
|
except ImportError:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
107
|
+
try:
|
|
108
|
+
from airflow.sdk.execution_time.secrets_masker import (
|
|
109
|
+
Redactable,
|
|
110
|
+
Redacted,
|
|
111
|
+
SecretsMasker,
|
|
112
|
+
should_hide_value_for_key,
|
|
113
|
+
)
|
|
114
|
+
except ImportError:
|
|
115
|
+
from airflow.utils.log.secrets_masker import (
|
|
116
|
+
Redactable,
|
|
117
|
+
Redacted,
|
|
118
|
+
SecretsMasker,
|
|
119
|
+
should_hide_value_for_key,
|
|
120
|
+
)
|
|
113
121
|
|
|
114
122
|
log = logging.getLogger(__name__)
|
|
115
123
|
_NOMINAL_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
|
|
@@ -308,7 +316,7 @@ def get_user_provided_run_facets(ti: TaskInstance, ti_state: TaskInstanceState)
|
|
|
308
316
|
def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator) -> str:
|
|
309
317
|
if isinstance(operator, (MappedOperator, SerializedBaseOperator)):
|
|
310
318
|
# as in airflow.api_connexion.schemas.common_schema.ClassReferenceSchema
|
|
311
|
-
return operator._task_module + "." + operator.
|
|
319
|
+
return operator._task_module + "." + operator.task_type
|
|
312
320
|
op_class = get_operator_class(operator)
|
|
313
321
|
return op_class.__module__ + "." + op_class.__name__
|
|
314
322
|
|
|
@@ -732,6 +740,12 @@ def get_airflow_state_run_facet(
|
|
|
732
740
|
"airflowState": AirflowStateRunFacet(
|
|
733
741
|
dagRunState=dag_run_state,
|
|
734
742
|
tasksState={ti.task_id: ti.state for ti in tis},
|
|
743
|
+
tasksDuration={
|
|
744
|
+
ti.task_id: ti.duration
|
|
745
|
+
if ti.duration is not None
|
|
746
|
+
else (ti.end_date - ti.start_date).total_seconds()
|
|
747
|
+
for ti in tis
|
|
748
|
+
},
|
|
735
749
|
)
|
|
736
750
|
}
|
|
737
751
|
|
|
@@ -39,7 +39,11 @@ if AIRFLOW_V_3_0_PLUS:
|
|
|
39
39
|
else:
|
|
40
40
|
from airflow.models import BaseOperator
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
try:
|
|
43
|
+
from airflow.sdk import timezone
|
|
44
|
+
from airflow.sdk.execution_time.timeout import timeout
|
|
45
|
+
except ImportError:
|
|
46
|
+
from airflow.utils import timezone # type: ignore[attr-defined,no-redef]
|
|
47
|
+
from airflow.utils.timeout import timeout # type: ignore[assignment,attr-defined,no-redef]
|
|
48
|
+
|
|
49
|
+
__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseOperator", "timeout", "timezone"]
|
|
@@ -106,7 +106,7 @@ with DAG(
|
|
|
106
106
|
task_2 = PythonOperator(
|
|
107
107
|
task_id="task_2",
|
|
108
108
|
python_callable=do_nothing,
|
|
109
|
-
inlets=[Asset(uri="s3://bucket2/dir2/file2.txt")],
|
|
109
|
+
inlets=[Asset(uri="s3://bucket2/dir2/file2.txt"), Asset(uri="s3://bucket2/dir2/file3.txt")],
|
|
110
110
|
max_retry_delay=42,
|
|
111
111
|
doc="text doc",
|
|
112
112
|
doc_md="should be skipped",
|
|
@@ -33,6 +33,11 @@ from airflow.providers.standard.operators.python import PythonOperator
|
|
|
33
33
|
from system.openlineage.expected_events import get_expected_event_file_path
|
|
34
34
|
from system.openlineage.operator import OpenLineageTestOperator
|
|
35
35
|
|
|
36
|
+
try:
|
|
37
|
+
from airflow.sdk import chain
|
|
38
|
+
except ImportError:
|
|
39
|
+
from airflow.models.baseoperator import chain # type: ignore[no-redef]
|
|
40
|
+
|
|
36
41
|
|
|
37
42
|
def do_nothing():
|
|
38
43
|
pass
|
|
@@ -53,7 +58,7 @@ with DAG(
|
|
|
53
58
|
task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
|
|
54
59
|
)
|
|
55
60
|
|
|
56
|
-
do_nothing_task
|
|
61
|
+
chain(do_nothing_task, check_events)
|
|
57
62
|
|
|
58
63
|
|
|
59
64
|
from tests_common.test_utils.system_tests import get_test_run # noqa: E402
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
"""
|
|
18
|
+
Simple DAG with setup and teardown operators.
|
|
19
|
+
|
|
20
|
+
It checks:
|
|
21
|
+
- if setup and teardown information is included in DAG event for all tasks
|
|
22
|
+
- if setup and teardown information is included in task events for AF2
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
from datetime import datetime
|
|
28
|
+
|
|
29
|
+
from airflow import DAG
|
|
30
|
+
from airflow.providers.standard.operators.python import PythonOperator
|
|
31
|
+
|
|
32
|
+
from system.openlineage.expected_events import get_expected_event_file_path
|
|
33
|
+
from system.openlineage.operator import OpenLineageTestOperator
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def do_nothing():
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
DAG_ID = "openlineage_setup_teardown_dag"
|
|
41
|
+
|
|
42
|
+
with DAG(
|
|
43
|
+
dag_id=DAG_ID,
|
|
44
|
+
start_date=datetime(2021, 1, 1),
|
|
45
|
+
schedule=None,
|
|
46
|
+
catchup=False,
|
|
47
|
+
default_args={"retries": 0},
|
|
48
|
+
) as dag:
|
|
49
|
+
create_cluster = PythonOperator(task_id="create_cluster", python_callable=do_nothing)
|
|
50
|
+
run_query = PythonOperator(task_id="run_query", python_callable=do_nothing)
|
|
51
|
+
run_query2 = PythonOperator(task_id="run_query2", python_callable=do_nothing)
|
|
52
|
+
delete_cluster = PythonOperator(task_id="delete_cluster", python_callable=do_nothing)
|
|
53
|
+
|
|
54
|
+
check_events = OpenLineageTestOperator(
|
|
55
|
+
task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
(
|
|
59
|
+
create_cluster
|
|
60
|
+
>> run_query
|
|
61
|
+
>> run_query2
|
|
62
|
+
>> delete_cluster.as_teardown(setups=create_cluster)
|
|
63
|
+
>> check_events
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
from tests_common.test_utils.system_tests import get_test_run # noqa: E402
|
|
68
|
+
|
|
69
|
+
# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
|
|
70
|
+
test_run = get_test_run(dag)
|