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.
Files changed (141) hide show
  1. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/PKG-INFO +7 -8
  2. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/README.rst +4 -5
  3. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/changelog.rst +44 -0
  4. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/guides/developer.rst +8 -8
  5. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/guides/structure.rst +5 -5
  6. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/guides/user.rst +16 -16
  7. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/index.rst +4 -6
  8. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/provider.yaml +2 -1
  9. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/pyproject.toml +4 -4
  10. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/__init__.py +1 -1
  11. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/adapter.py +5 -2
  12. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/facets.py +2 -0
  13. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/listener.py +9 -3
  14. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/utils.py +22 -8
  15. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/version_compat.py +8 -4
  16. {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
  17. {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
  18. apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/example_openlineage_setup_teardown_dag.py +70 -0
  19. apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/example_openlineage_short_circuit_dag.py +92 -0
  20. apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/example_openlineage_taskflow_simple_dag.py +63 -0
  21. {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
  22. {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
  23. apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_setup_teardown_dag__af2.json +194 -0
  24. apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_setup_teardown_dag__af3.json +114 -0
  25. apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_short_circuit_dag.json +77 -0
  26. apache_airflow_providers_openlineage-2.7.0rc1/tests/system/openlineage/expected_events/openlineage_taskflow_simple_dag.json +325 -0
  27. {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
  28. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_adapter.py +60 -32
  29. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_facets.py +5 -1
  30. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_listener.py +34 -14
  31. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_utils.py +22 -13
  32. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/test_utils.py +2 -2
  33. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/.latest-doc-only-change.txt +0 -0
  34. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/commits.rst +0 -0
  35. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/conf.py +0 -0
  36. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/configurations-ref.rst +0 -0
  37. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/installing-providers-from-sources.rst +0 -0
  38. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/integration-logos/openlineage.svg +0 -0
  39. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/macros.rst +0 -0
  40. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/security.rst +0 -0
  41. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/docs/supported_classes.rst +0 -0
  42. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/__init__.py +0 -0
  43. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/__init__.py +0 -0
  44. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/LICENSE +0 -0
  45. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/conf.py +0 -0
  46. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/__init__.py +0 -0
  47. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/base.py +0 -0
  48. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/bash.py +0 -0
  49. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/manager.py +0 -0
  50. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/extractors/python.py +0 -0
  51. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowDagRunFacet.json +0 -0
  52. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowDebugRunFacet.json +0 -0
  53. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowJobFacet.json +0 -0
  54. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowRunFacet.json +0 -0
  55. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/AirflowStateRunFacet.json +0 -0
  56. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/facets/__init__.py +0 -0
  57. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/get_provider_info.py +0 -0
  58. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/operators/__init__.py +0 -0
  59. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/operators/empty.py +0 -0
  60. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/__init__.py +0 -0
  61. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/macros.py +0 -0
  62. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/plugins/openlineage.py +0 -0
  63. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/sqlparser.py +0 -0
  64. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/__init__.py +0 -0
  65. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/selective_enable.py +0 -0
  66. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/spark.py +0 -0
  67. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/src/airflow/providers/openlineage/utils/sql.py +0 -0
  68. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/conftest.py +0 -0
  69. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/integration/__init__.py +0 -0
  70. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/integration/openlineage/__init__.py +0 -0
  71. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/integration/openlineage/operators/__init__.py +0 -0
  72. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/__init__.py +0 -0
  73. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/__init__.py +0 -0
  74. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/conftest.py +0 -0
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {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
  86. {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
  87. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_trigger_dag.py +0 -0
  88. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/example_openlineage_versioned_dag.py +0 -0
  89. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/expected_events/__init__.py +0 -0
  90. {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
  91. {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
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {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
  98. {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
  99. {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
  100. {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
  101. {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
  102. {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
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {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
  111. {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
  112. {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
  113. {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
  114. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/operator.py +0 -0
  115. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/transport/__init__.py +0 -0
  116. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/system/openlineage/transport/variable.py +0 -0
  117. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/__init__.py +0 -0
  118. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/__init__.py +0 -0
  119. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/dags/__init__.py +0 -0
  120. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/dags/test_openlineage_execution.py +0 -0
  121. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/__init__.py +0 -0
  122. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_base.py +0 -0
  123. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_bash.py +0 -0
  124. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_manager.py +0 -0
  125. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/extractors/test_python.py +0 -0
  126. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/log_config.py +0 -0
  127. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/operators/__init__.py +0 -0
  128. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/operators/test_empty.py +0 -0
  129. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/__init__.py +0 -0
  130. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/openlineage_configs/__init__.py +0 -0
  131. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/openlineage_configs/http.yaml +0 -0
  132. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_execution.py +0 -0
  133. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_macros.py +0 -0
  134. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/plugins/test_openlineage.py +0 -0
  135. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/test_conf.py +0 -0
  136. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/test_sqlparser.py +0 -0
  137. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/__init__.py +0 -0
  138. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/custom_facet_fixture.py +0 -0
  139. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/test_selective_enable.py +0 -0
  140. {apache_airflow_providers_openlineage-2.6.1rc1 → apache_airflow_providers_openlineage-2.7.0rc1}/tests/unit/openlineage/utils/test_spark.py +0 -0
  141. {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.6.1rc1
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.6.1/changelog.html
31
- Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.6.1
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.6.1``
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.6.1/>`_.
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 2 installation (see ``Requirements`` below
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.6.1/changelog.html>`_.
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.6.1``
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.6.1/>`_.
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 2 installation (see ``Requirements`` below
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.6.1/changelog.html>`_.
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 DAG is using, and extracting lineage data from them using corresponding Extractors class.
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/amazon/aws/src/airflow/providers/openlineage/extractors/bash.py>`_ or
374
- `PythonExtractor <https://github.com/apache/airflow/blob/main/providers/amazon/aws/src/airflow/providers/openlineage/extractors/python.py>`_.
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: DAGs, large and independently schedulable units, comprise smaller, executable tasks.
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 DAG scheduling, a START event is emitted.
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 DAG termination, a completion event (COMPLETE or FAILED) is emitted.
489
+ - Finally, upon Dag termination, a completion event (COMPLETE or FAILED) is emitted.
490
490
 
491
- TaskInstance events' ParentRunFacet references the originating DAG run.
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-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.
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 DAGs or TaskInstances start, complete or fail.
64
- For DAGs, the listener runs in Airflow Scheduler. For TaskInstances, the listener runs on Airflow Worker.
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 DAG files is required to use OpenLineage**. Basic configuration is needed so that OpenLineage knows where to send events.
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 DAGs are run.
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 DAG/task level
355
+ Enabling OpenLineage on Dag/task level
356
356
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
357
357
 
358
- One can selectively enable OpenLineage for specific DAGs and tasks by using the ``selective_enable`` policy.
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 DAGs and tasks regardless of the ``selective_enable`` setting.
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 DAGs and tasks using the ``enable_lineage`` and ``disable_lineage`` functions.
377
+ for individual Dags and tasks using the ``enable_lineage`` and ``disable_lineage`` functions.
378
378
 
379
- 1. Enabling Lineage on a DAG:
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(DAG(...)):
386
- # Tasks within this DAG will have lineage tracking enabled
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 DAG implicitly enables it for all tasks within that DAG, you can still selectively disable it for specific tasks:
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 DAG(...) as dag:
399
+ with Dag(...) as dag:
400
400
  t1 = MyOperator(...)
401
401
  t2 = AnotherOperator(...)
402
402
 
403
- # Enable lineage for the entire DAG
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 DAG level automatically enables it for all tasks within that DAG unless explicitly disabled per task.
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 DAG.
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 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.
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.6.1
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 2 installation via
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.6.1 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.6.1.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.6.1.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.6.1.tar.gz.sha512>`__)
144
- * `The apache-airflow-providers-openlineage 2.6.1 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.6.1-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.6.1-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.6.1-py3-none-any.whl.sha512>`__)
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: 1754503416
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.6.1rc1"
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 ``breeze static-checks --type update-providers-dependencies --all-files``
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.6.1"
109
- "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.6.1/changelog.html"
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.6.1"
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.execution_time.secrets_masker import SecretsMasker, _secrets_masker
58
+ from airflow.sdk._shared.secrets_masker import SecretsMasker, _secrets_masker
59
59
  except ImportError:
60
- from airflow.utils.log.secrets_masker import SecretsMasker, _secrets_masker
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.execution_time.secrets_masker import (
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
- from airflow.utils.log.secrets_masker import (
108
- Redactable,
109
- Redacted,
110
- SecretsMasker,
111
- should_hide_value_for_key,
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._task_type
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
- __all__ = [
43
- "AIRFLOW_V_3_0_PLUS",
44
- "BaseOperator",
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 >> check_events
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)