apache-airflow-providers-openlineage 2.4.0__tar.gz → 2.5.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 (128) hide show
  1. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/PKG-INFO +15 -16
  2. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/README.rst +6 -6
  3. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/changelog.rst +34 -0
  4. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/index.rst +5 -5
  5. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/provider.yaml +2 -1
  6. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/pyproject.toml +9 -10
  7. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/__init__.py +1 -1
  8. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/extractors/base.py +2 -2
  9. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/extractors/python.py +1 -1
  10. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/plugins/listener.py +21 -17
  11. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/plugins/macros.py +13 -1
  12. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/sqlparser.py +3 -2
  13. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/utils/sql.py +3 -3
  14. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/utils/utils.py +45 -15
  15. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_base_complex_dag.py +4 -1
  16. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/extractors/test_base.py +8 -2
  17. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/extractors/test_bash.py +0 -3
  18. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/extractors/test_manager.py +0 -1
  19. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/extractors/test_python.py +0 -3
  20. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/test_adapter.py +0 -2
  21. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/test_execution.py +0 -6
  22. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/test_listener.py +64 -88
  23. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/test_macros.py +22 -0
  24. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/utils/test_selective_enable.py +1 -1
  25. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/utils/test_utils.py +110 -18
  26. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/.latest-doc-only-change.txt +0 -0
  27. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/commits.rst +0 -0
  28. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/conf.py +0 -0
  29. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/configurations-ref.rst +0 -0
  30. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/guides/developer.rst +0 -0
  31. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/guides/structure.rst +0 -0
  32. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/guides/user.rst +0 -0
  33. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/installing-providers-from-sources.rst +0 -0
  34. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/integration-logos/openlineage.svg +0 -0
  35. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/macros.rst +0 -0
  36. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/security.rst +0 -0
  37. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/docs/supported_classes.rst +0 -0
  38. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/__init__.py +0 -0
  39. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/__init__.py +0 -0
  40. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/LICENSE +0 -0
  41. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/conf.py +0 -0
  42. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/extractors/__init__.py +0 -0
  43. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/extractors/bash.py +0 -0
  44. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/extractors/manager.py +0 -0
  45. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/facets/AirflowDagRunFacet.json +0 -0
  46. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/facets/AirflowDebugRunFacet.json +0 -0
  47. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/facets/AirflowJobFacet.json +0 -0
  48. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/facets/AirflowRunFacet.json +0 -0
  49. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/facets/AirflowStateRunFacet.json +0 -0
  50. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/facets/__init__.py +0 -0
  51. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/get_provider_info.py +0 -0
  52. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/plugins/__init__.py +0 -0
  53. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/plugins/adapter.py +0 -0
  54. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/plugins/facets.py +0 -0
  55. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/plugins/openlineage.py +0 -0
  56. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/utils/__init__.py +0 -0
  57. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/utils/selective_enable.py +0 -0
  58. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/utils/spark.py +0 -0
  59. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/src/airflow/providers/openlineage/version_compat.py +0 -0
  60. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/conftest.py +0 -0
  61. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/integration/__init__.py +0 -0
  62. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/integration/openlineage/__init__.py +0 -0
  63. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/integration/openlineage/operators/__init__.py +0 -0
  64. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/__init__.py +0 -0
  65. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/__init__.py +0 -0
  66. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/conftest.py +0 -0
  67. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_base_simple_dag.py +0 -0
  68. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_defer_simple_dag.py +0 -0
  69. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_mapped_simple_dag.py +0 -0
  70. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_asset_or_time_dag.py +0 -0
  71. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_cron_dag.py +0 -0
  72. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_list_complex_assets_dag.py +0 -0
  73. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_list_multiple_assets_dag.py +0 -0
  74. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_list_single_asset_dag.py +0 -0
  75. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_multiple_assets_dag.py +0 -0
  76. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_single_asset_dag.py +0 -0
  77. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_schedule_timetable_dag.py +0 -0
  78. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_task_groups_dag.py +0 -0
  79. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_trigger_dag.py +0 -0
  80. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/example_openlineage_versioned_dag.py +0 -0
  81. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/__init__.py +0 -0
  82. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af2.json +0 -0
  83. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af3.json +0 -0
  84. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af2.json +0 -0
  85. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af3.json +0 -0
  86. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_defer_simple_dag.json +0 -0
  87. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_mapped_simple_dag.json +0 -0
  88. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af2.json +0 -0
  89. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af3.json +0 -0
  90. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af2.json +0 -0
  91. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af3.json +0 -0
  92. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af2.json +0 -0
  93. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af3.json +0 -0
  94. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af2.json +0 -0
  95. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af3.json +0 -0
  96. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af2.json +0 -0
  97. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af3.json +0 -0
  98. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af2.json +0 -0
  99. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af3.json +0 -0
  100. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af2.json +0 -0
  101. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af3.json +0 -0
  102. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af2.json +0 -0
  103. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af3.json +0 -0
  104. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_task_groups_dag.json +0 -0
  105. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_trigger_dag.json +0 -0
  106. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_versioned_dag__af2.json +0 -0
  107. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/expected_events/openlineage_versioned_dag__af3.json +0 -0
  108. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/operator.py +0 -0
  109. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/transport/__init__.py +0 -0
  110. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/system/openlineage/transport/variable.py +0 -0
  111. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/__init__.py +0 -0
  112. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/__init__.py +0 -0
  113. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/dags/__init__.py +0 -0
  114. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/dags/test_openlineage_execution.py +0 -0
  115. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/extractors/__init__.py +0 -0
  116. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/log_config.py +0 -0
  117. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/__init__.py +0 -0
  118. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/openlineage_configs/__init__.py +0 -0
  119. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/openlineage_configs/http.yaml +0 -0
  120. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/test_facets.py +0 -0
  121. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/test_openlineage.py +0 -0
  122. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/plugins/test_utils.py +0 -0
  123. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/test_conf.py +0 -0
  124. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/test_sqlparser.py +0 -0
  125. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/utils/__init__.py +0 -0
  126. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/utils/custom_facet_fixture.py +0 -0
  127. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/utils/test_spark.py +0 -0
  128. {apache_airflow_providers_openlineage-2.4.0 → apache_airflow_providers_openlineage-2.5.0rc1}/tests/unit/openlineage/utils/test_sql.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-openlineage
3
- Version: 2.4.0
3
+ Version: 2.5.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>
7
7
  Maintainer-email: Apache Software Foundation <dev@airflow.apache.org>
8
- Requires-Python: ~=3.9
8
+ Requires-Python: ~=3.10
9
9
  Description-Content-Type: text/x-rst
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Environment :: Console
@@ -15,20 +15,19 @@ Classifier: Intended Audience :: System Administrators
15
15
  Classifier: Framework :: Apache Airflow
16
16
  Classifier: Framework :: Apache Airflow :: Provider
17
17
  Classifier: License :: OSI Approved :: Apache Software License
18
- Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
21
20
  Classifier: Programming Language :: Python :: 3.12
22
21
  Classifier: Topic :: System :: Monitoring
23
- Requires-Dist: apache-airflow>=2.10.0
24
- Requires-Dist: apache-airflow-providers-common-sql>=1.20.0
25
- Requires-Dist: apache-airflow-providers-common-compat>=1.4.0
22
+ Requires-Dist: apache-airflow>=2.10.0rc1
23
+ Requires-Dist: apache-airflow-providers-common-sql>=1.20.0rc1
24
+ Requires-Dist: apache-airflow-providers-common-compat>=1.4.0rc1
26
25
  Requires-Dist: attrs>=22.2
27
- Requires-Dist: openlineage-integration-common>=1.31.0
28
- Requires-Dist: openlineage-python>=1.31.0
26
+ Requires-Dist: openlineage-integration-common>=1.34.0
27
+ Requires-Dist: openlineage-python>=1.34.0
29
28
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
30
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0/changelog.html
31
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0
29
+ Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/changelog.html
30
+ Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.5.0
32
31
  Project-URL: Mastodon, https://fosstodon.org/@airflow
33
32
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
34
33
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -59,7 +58,7 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
59
58
 
60
59
  Package ``apache-airflow-providers-openlineage``
61
60
 
62
- Release: ``2.4.0``
61
+ Release: ``2.5.0``
63
62
 
64
63
 
65
64
  `OpenLineage <https://openlineage.io/>`__
@@ -72,7 +71,7 @@ This is a provider package for ``openlineage`` provider. All classes for this pr
72
71
  are in ``airflow.providers.openlineage`` python package.
73
72
 
74
73
  You can find package information and changelog for the provider
75
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0/>`_.
74
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/>`_.
76
75
 
77
76
  Installation
78
77
  ------------
@@ -81,7 +80,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
81
80
  for the minimum Airflow version supported) via
82
81
  ``pip install apache-airflow-providers-openlineage``
83
82
 
84
- The package supports the following python versions: 3.9,3.10,3.11,3.12
83
+ The package supports the following python versions: 3.10,3.11,3.12
85
84
 
86
85
  Requirements
87
86
  ------------
@@ -93,8 +92,8 @@ PIP package Version required
93
92
  ``apache-airflow-providers-common-sql`` ``>=1.20.0``
94
93
  ``apache-airflow-providers-common-compat`` ``>=1.4.0``
95
94
  ``attrs`` ``>=22.2``
96
- ``openlineage-integration-common`` ``>=1.31.0``
97
- ``openlineage-python`` ``>=1.31.0``
95
+ ``openlineage-integration-common`` ``>=1.34.0``
96
+ ``openlineage-python`` ``>=1.34.0``
98
97
  ========================================== ==================
99
98
 
100
99
  Cross provider package dependencies
@@ -118,5 +117,5 @@ Dependent package
118
117
  ================================================================================================================== =================
119
118
 
120
119
  The changelog for the provider package can be found in the
121
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0/changelog.html>`_.
120
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/changelog.html>`_.
122
121
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-openlineage``
25
25
 
26
- Release: ``2.4.0``
26
+ Release: ``2.5.0``
27
27
 
28
28
 
29
29
  `OpenLineage <https://openlineage.io/>`__
@@ -36,7 +36,7 @@ This is a provider package for ``openlineage`` provider. All classes for this pr
36
36
  are in ``airflow.providers.openlineage`` python package.
37
37
 
38
38
  You can find package information and changelog for the provider
39
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/>`_.
40
40
 
41
41
  Installation
42
42
  ------------
@@ -45,7 +45,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
45
45
  for the minimum Airflow version supported) via
46
46
  ``pip install apache-airflow-providers-openlineage``
47
47
 
48
- The package supports the following python versions: 3.9,3.10,3.11,3.12
48
+ The package supports the following python versions: 3.10,3.11,3.12
49
49
 
50
50
  Requirements
51
51
  ------------
@@ -57,8 +57,8 @@ PIP package Version required
57
57
  ``apache-airflow-providers-common-sql`` ``>=1.20.0``
58
58
  ``apache-airflow-providers-common-compat`` ``>=1.4.0``
59
59
  ``attrs`` ``>=22.2``
60
- ``openlineage-integration-common`` ``>=1.31.0``
61
- ``openlineage-python`` ``>=1.31.0``
60
+ ``openlineage-integration-common`` ``>=1.34.0``
61
+ ``openlineage-python`` ``>=1.34.0``
62
62
  ========================================== ==================
63
63
 
64
64
  Cross provider package dependencies
@@ -82,4 +82,4 @@ Dependent package
82
82
  ================================================================================================================== =================
83
83
 
84
84
  The changelog for the provider package can be found in the
85
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0/changelog.html>`_.
85
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/changelog.html>`_.
@@ -26,6 +26,40 @@
26
26
  Changelog
27
27
  ---------
28
28
 
29
+ 2.5.0
30
+ .....
31
+
32
+ Features
33
+ ~~~~~~~~
34
+
35
+ * ``[OpenLineage] Added operator_provider_version to task event (#52468)``
36
+
37
+ Bug Fixes
38
+ ~~~~~~~~~
39
+
40
+ * ``fix non existing 'ti.dag_run' access in openlineage provider (#51932)``
41
+ * ``Fix type import to AbstractOperator (#51773)``
42
+
43
+ Misc
44
+ ~~~~
45
+
46
+ * ``Move 'BaseHook' implementation to task SDK (#51873)``
47
+ * ``Disable UP038 ruff rule and revert mandatory 'X | Y' in insintance checks (#52644)``
48
+ * ``Add a bunch of no-redef ignores so Mypy is happy (#52507)``
49
+ * ``chore: use task_instance as source for all airflow identifiers used in listener (#52339)``
50
+ * ``Drop support for Python 3.9 (#52072)``
51
+ * ``Replace 'models.BaseOperator' to Task SDK one for Standard Provider (#52292)``
52
+ * ``Use BaseSensorOperator from task sdk in providers (#52296)``
53
+ * ``nit: bump openlineage libraries requirement to 1.34 (#52075)``
54
+ * ``Fixing ruff static check failures on main (#51937)``
55
+
56
+ .. Below changes are excluded from the changelog. Move them to
57
+ appropriate section above if needed. Do not delete the lines(!):
58
+ * ``Make sure all test version imports come from test_common (#52425)``
59
+ * ``Remove db_tests from openlineage provider (#52239)``
60
+ * ``Fix compatibility test for Open Lineage (#51931)``
61
+ * ``Fix failing openlineage test (#51928)``
62
+
29
63
  2.4.0
30
64
  .....
31
65
 
@@ -81,7 +81,7 @@ apache-airflow-providers-openlineage package
81
81
  `OpenLineage <https://openlineage.io/>`__
82
82
 
83
83
 
84
- Release: 2.4.0
84
+ Release: 2.5.0
85
85
 
86
86
  Provider package
87
87
  ----------------
@@ -108,8 +108,8 @@ PIP package Version required
108
108
  ``apache-airflow-providers-common-sql`` ``>=1.20.0``
109
109
  ``apache-airflow-providers-common-compat`` ``>=1.4.0``
110
110
  ``attrs`` ``>=22.2``
111
- ``openlineage-integration-common`` ``>=1.31.0``
112
- ``openlineage-python`` ``>=1.31.0``
111
+ ``openlineage-integration-common`` ``>=1.34.0``
112
+ ``openlineage-python`` ``>=1.34.0``
113
113
  ========================================== ==================
114
114
 
115
115
  Cross provider package dependencies
@@ -138,5 +138,5 @@ Downloading official packages
138
138
  You can download officially released packages and verify their checksums and signatures from the
139
139
  `Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
140
140
 
141
- * `The apache-airflow-providers-openlineage 2.4.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.4.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.4.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.4.0.tar.gz.sha512>`__)
142
- * `The apache-airflow-providers-openlineage 2.4.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.4.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.4.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.4.0-py3-none-any.whl.sha512>`__)
141
+ * `The apache-airflow-providers-openlineage 2.5.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.5.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.5.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.5.0.tar.gz.sha512>`__)
142
+ * `The apache-airflow-providers-openlineage 2.5.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.5.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.5.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_openlineage-2.5.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: 1749896859
25
+ source-date-epoch: 1751473929
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.5.0
31
32
  - 2.4.0
32
33
  - 2.3.0
33
34
  - 2.2.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.4.0"
28
+ version = "2.5.0rc1"
29
29
  description = "Provider package apache-airflow-providers-openlineage for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  authors = [
@@ -44,25 +44,24 @@ classifiers = [
44
44
  "Framework :: Apache Airflow",
45
45
  "Framework :: Apache Airflow :: Provider",
46
46
  "License :: OSI Approved :: Apache Software License",
47
- "Programming Language :: Python :: 3.9",
48
47
  "Programming Language :: Python :: 3.10",
49
48
  "Programming Language :: Python :: 3.11",
50
49
  "Programming Language :: Python :: 3.12",
51
50
  "Topic :: System :: Monitoring",
52
51
  ]
53
- requires-python = "~=3.9"
52
+ requires-python = "~=3.10"
54
53
 
55
54
  # The dependencies should be modified in place in the generated file.
56
55
  # Any change in the dependencies is preserved when the file is regenerated
57
56
  # Make sure to run ``breeze static-checks --type update-providers-dependencies --all-files``
58
57
  # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
59
58
  dependencies = [
60
- "apache-airflow>=2.10.0",
61
- "apache-airflow-providers-common-sql>=1.20.0",
62
- "apache-airflow-providers-common-compat>=1.4.0",
59
+ "apache-airflow>=2.10.0rc1",
60
+ "apache-airflow-providers-common-sql>=1.20.0rc1",
61
+ "apache-airflow-providers-common-compat>=1.4.0rc1",
63
62
  "attrs>=22.2",
64
- "openlineage-integration-common>=1.31.0",
65
- "openlineage-python>=1.31.0",
63
+ "openlineage-integration-common>=1.34.0",
64
+ "openlineage-python>=1.34.0",
66
65
  ]
67
66
 
68
67
  [dependency-groups]
@@ -105,8 +104,8 @@ apache-airflow-providers-common-sql = {workspace = true}
105
104
  apache-airflow-providers-standard = {workspace = true}
106
105
 
107
106
  [project.urls]
108
- "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0"
109
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.4.0/changelog.html"
107
+ "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.5.0"
108
+ "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/changelog.html"
110
109
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
111
110
  "Source Code" = "https://github.com/apache/airflow"
112
111
  "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.4.0"
32
+ __version__ = "2.5.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.10.0"
@@ -19,7 +19,7 @@ from __future__ import annotations
19
19
 
20
20
  import warnings
21
21
  from abc import ABC, abstractmethod
22
- from typing import Generic, TypeVar, Union
22
+ from typing import Generic, TypeVar
23
23
 
24
24
  from attrs import Factory, define
25
25
  from openlineage.client.event_v2 import Dataset as OLDataset
@@ -33,7 +33,7 @@ from airflow.utils.log.logging_mixin import LoggingMixin
33
33
 
34
34
  # this is not to break static checks compatibility with v1 OpenLineage facet classes
35
35
  DatasetSubclass = TypeVar("DatasetSubclass", bound=OLDataset)
36
- BaseFacetSubclass = TypeVar("BaseFacetSubclass", bound=Union[BaseFacet_V1, RunFacet, JobFacet])
36
+ BaseFacetSubclass = TypeVar("BaseFacetSubclass", bound=BaseFacet_V1 | RunFacet | JobFacet)
37
37
 
38
38
  OL_METHOD_NAME_START = "get_openlineage_facets_on_start"
39
39
  OL_METHOD_NAME_COMPLETE = "get_openlineage_facets_on_complete"
@@ -18,7 +18,7 @@
18
18
  from __future__ import annotations
19
19
 
20
20
  import inspect
21
- from typing import Callable
21
+ from collections.abc import Callable
22
22
 
23
23
  from openlineage.client.facet_v2 import source_code_job
24
24
 
@@ -147,7 +147,7 @@ class OpenLineageListener:
147
147
  "Skipping OpenLineage event emission for task `%s` "
148
148
  "due to lack of explicit lineage enablement for task or DAG while "
149
149
  "[openlineage] selective_enable is on.",
150
- task.task_id,
150
+ task_instance.task_id,
151
151
  )
152
152
  return
153
153
 
@@ -170,14 +170,14 @@ class OpenLineageListener:
170
170
  clear_number = dagrun.clear_number
171
171
 
172
172
  parent_run_id = self.adapter.build_dag_run_id(
173
- dag_id=dag.dag_id,
173
+ dag_id=task_instance.dag_id,
174
174
  logical_date=date,
175
175
  clear_number=clear_number,
176
176
  )
177
177
 
178
178
  task_uuid = self.adapter.build_task_instance_run_id(
179
- dag_id=dag.dag_id,
180
- task_id=task.task_id,
179
+ dag_id=task_instance.dag_id,
180
+ task_id=task_instance.task_id,
181
181
  try_number=task_instance.try_number,
182
182
  logical_date=date,
183
183
  map_index=task_instance.map_index,
@@ -199,7 +199,7 @@ class OpenLineageListener:
199
199
 
200
200
  redacted_event = self.adapter.start_task(
201
201
  run_id=task_uuid,
202
- job_name=get_job_name(task),
202
+ job_name=get_job_name(task_instance),
203
203
  job_description=dag.description,
204
204
  event_time=start_date.isoformat(),
205
205
  nominal_start_time=data_interval_start,
@@ -278,7 +278,7 @@ class OpenLineageListener:
278
278
  "Skipping OpenLineage event emission for task `%s` "
279
279
  "due to lack of explicit lineage enablement for task or DAG while "
280
280
  "[openlineage] selective_enable is on.",
281
- task.task_id,
281
+ task_instance.task_id,
282
282
  )
283
283
  return
284
284
 
@@ -289,14 +289,14 @@ class OpenLineageListener:
289
289
  date = dagrun.run_after
290
290
 
291
291
  parent_run_id = self.adapter.build_dag_run_id(
292
- dag_id=dag.dag_id,
292
+ dag_id=task_instance.dag_id,
293
293
  logical_date=date,
294
294
  clear_number=dagrun.clear_number,
295
295
  )
296
296
 
297
297
  task_uuid = self.adapter.build_task_instance_run_id(
298
- dag_id=dag.dag_id,
299
- task_id=task.task_id,
298
+ dag_id=task_instance.dag_id,
299
+ task_id=task_instance.task_id,
300
300
  try_number=task_instance.try_number,
301
301
  logical_date=date,
302
302
  map_index=task_instance.map_index,
@@ -321,7 +321,7 @@ class OpenLineageListener:
321
321
 
322
322
  redacted_event = self.adapter.complete_task(
323
323
  run_id=task_uuid,
324
- job_name=get_job_name(task),
324
+ job_name=get_job_name(task_instance),
325
325
  end_time=end_date.isoformat(),
326
326
  task=task_metadata,
327
327
  # If task owner is default ("airflow"), use DAG owner instead that may have more details
@@ -409,7 +409,7 @@ class OpenLineageListener:
409
409
  "Skipping OpenLineage event emission for task `%s` "
410
410
  "due to lack of explicit lineage enablement for task or DAG while "
411
411
  "[openlineage] selective_enable is on.",
412
- task.task_id,
412
+ task_instance.task_id,
413
413
  )
414
414
  return
415
415
 
@@ -420,14 +420,14 @@ class OpenLineageListener:
420
420
  date = dagrun.run_after
421
421
 
422
422
  parent_run_id = self.adapter.build_dag_run_id(
423
- dag_id=dag.dag_id,
423
+ dag_id=task_instance.dag_id,
424
424
  logical_date=date,
425
425
  clear_number=dagrun.clear_number,
426
426
  )
427
427
 
428
428
  task_uuid = self.adapter.build_task_instance_run_id(
429
- dag_id=dag.dag_id,
430
- task_id=task.task_id,
429
+ dag_id=task_instance.dag_id,
430
+ task_id=task_instance.task_id,
431
431
  try_number=task_instance.try_number,
432
432
  logical_date=date,
433
433
  map_index=task_instance.map_index,
@@ -452,7 +452,7 @@ class OpenLineageListener:
452
452
 
453
453
  redacted_event = self.adapter.fail_task(
454
454
  run_id=task_uuid,
455
- job_name=get_job_name(task),
455
+ job_name=get_job_name(task_instance),
456
456
  end_time=end_date.isoformat(),
457
457
  task=task_metadata,
458
458
  error=error,
@@ -489,13 +489,13 @@ class OpenLineageListener:
489
489
  def on_state_change():
490
490
  date = dagrun.logical_date or dagrun.run_after
491
491
  parent_run_id = self.adapter.build_dag_run_id(
492
- dag_id=dagrun.dag_id,
492
+ dag_id=ti.dag_id,
493
493
  logical_date=date,
494
494
  clear_number=dagrun.clear_number,
495
495
  )
496
496
 
497
497
  task_uuid = self.adapter.build_task_instance_run_id(
498
- dag_id=dagrun.dag_id,
498
+ dag_id=ti.dag_id,
499
499
  task_id=ti.task_id,
500
500
  try_number=ti.try_number,
501
501
  logical_date=date,
@@ -507,6 +507,10 @@ class OpenLineageListener:
507
507
  "job_name": get_job_name(ti),
508
508
  "end_time": end_date.isoformat(),
509
509
  "task": OperatorLineage(),
510
+ "nominal_start_time": None,
511
+ "nominal_end_time": None,
512
+ "tags": None,
513
+ "owners": None,
510
514
  "run_facets": {
511
515
  **get_task_parent_run_facet(parent_run_id=parent_run_id, parent_job_name=ti.dag_id),
512
516
  **get_airflow_debug_facet(),
@@ -117,10 +117,22 @@ def lineage_root_run_id(task_instance: TaskInstance):
117
117
  return OpenLineageAdapter.build_dag_run_id(
118
118
  dag_id=task_instance.dag_id,
119
119
  logical_date=_get_logical_date(task_instance),
120
- clear_number=task_instance.dag_run.clear_number,
120
+ clear_number=_get_dag_run_clear_number(task_instance),
121
121
  )
122
122
 
123
123
 
124
+ def _get_dag_run_clear_number(task_instance: TaskInstance):
125
+ # todo: remove when min airflow version >= 3.0
126
+ if AIRFLOW_V_3_0_PLUS:
127
+ context = task_instance.get_template_context()
128
+ if hasattr(task_instance, "dag_run"):
129
+ dag_run = task_instance.dag_run
130
+ else:
131
+ dag_run = context["dag_run"]
132
+ return dag_run.clear_number
133
+ return task_instance.dag_run.clear_number
134
+
135
+
124
136
  def _get_logical_date(task_instance):
125
137
  # todo: remove when min airflow version >= 3.0
126
138
  if AIRFLOW_V_3_0_PLUS:
@@ -17,7 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import logging
20
- from typing import TYPE_CHECKING, Callable, TypedDict
20
+ from collections.abc import Callable
21
+ from typing import TYPE_CHECKING, TypedDict
21
22
 
22
23
  import sqlparse
23
24
  from attrs import define
@@ -38,8 +39,8 @@ if TYPE_CHECKING:
38
39
  from openlineage.client.facet_v2 import JobFacet, RunFacet
39
40
  from sqlalchemy.engine import Engine
40
41
 
41
- from airflow.hooks.base import BaseHook
42
42
  from airflow.providers.common.sql.hooks.sql import DbApiHook
43
+ from airflow.sdk import BaseHook
43
44
 
44
45
  log = logging.getLogger(__name__)
45
46
 
@@ -20,7 +20,7 @@ import logging
20
20
  from collections import defaultdict
21
21
  from contextlib import closing
22
22
  from enum import IntEnum
23
- from typing import TYPE_CHECKING, Optional
23
+ from typing import TYPE_CHECKING
24
24
 
25
25
  from attrs import define
26
26
  from openlineage.client.event_v2 import Dataset
@@ -31,7 +31,7 @@ if TYPE_CHECKING:
31
31
  from sqlalchemy.engine import Engine
32
32
  from sqlalchemy.sql import ClauseElement
33
33
 
34
- from airflow.hooks.base import BaseHook
34
+ from airflow.sdk import BaseHook
35
35
 
36
36
 
37
37
  log = logging.getLogger(__name__)
@@ -50,7 +50,7 @@ class ColumnIndex(IntEnum):
50
50
  DATABASE = 5
51
51
 
52
52
 
53
- TablesHierarchy = dict[Optional[str], dict[Optional[str], list[str]]]
53
+ TablesHierarchy = dict[str | None, dict[str | None, list[str]]]
54
54
 
55
55
 
56
56
  @define
@@ -20,10 +20,11 @@ from __future__ import annotations
20
20
  import datetime
21
21
  import json
22
22
  import logging
23
+ from collections.abc import Callable
23
24
  from contextlib import suppress
24
25
  from functools import wraps
25
26
  from importlib import metadata
26
- from typing import TYPE_CHECKING, Any, Callable
27
+ from typing import TYPE_CHECKING, Any
27
28
 
28
29
  import attrs
29
30
  from openlineage.client.facet_v2 import parent_run
@@ -32,7 +33,7 @@ from openlineage.client.utils import RedactMixin
32
33
  from airflow import __version__ as AIRFLOW_VERSION
33
34
 
34
35
  # TODO: move this maybe to Airflow's logic?
35
- from airflow.models import BaseOperator, DagRun, TaskReschedule
36
+ from airflow.models import DagRun, TaskReschedule
36
37
  from airflow.providers.openlineage import (
37
38
  __version__ as OPENLINEAGE_PROVIDER_VERSION,
38
39
  conf,
@@ -52,18 +53,17 @@ from airflow.providers.openlineage.utils.selective_enable import (
52
53
  is_task_lineage_enabled,
53
54
  )
54
55
  from airflow.providers.openlineage.version_compat import AIRFLOW_V_3_0_PLUS
55
- from airflow.sensors.base import BaseSensorOperator
56
56
  from airflow.serialization.serialized_objects import SerializedBaseOperator
57
57
  from airflow.utils.module_loading import import_string
58
58
 
59
+ if AIRFLOW_V_3_0_PLUS:
60
+ from airflow.sdk import BaseSensorOperator
61
+ else:
62
+ from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef]
63
+
59
64
  if not AIRFLOW_V_3_0_PLUS:
60
65
  from airflow.utils.session import NEW_SESSION, provide_session
61
66
 
62
- try:
63
- from airflow.sdk import BaseOperator as SdkBaseOperator
64
- except ImportError:
65
- SdkBaseOperator = BaseOperator # type: ignore[misc]
66
-
67
67
  if TYPE_CHECKING:
68
68
  from openlineage.client.event_v2 import Dataset as OpenLineageDataset
69
69
  from openlineage.client.facet_v2 import RunFacet, processing_engine_run
@@ -71,6 +71,7 @@ if TYPE_CHECKING:
71
71
  from airflow.models import TaskInstance
72
72
  from airflow.providers.common.compat.assets import Asset
73
73
  from airflow.sdk import DAG
74
+ from airflow.sdk.bases.operator import BaseOperator
74
75
  from airflow.sdk.definitions.mappedoperator import MappedOperator
75
76
  from airflow.sdk.execution_time.secrets_masker import (
76
77
  Redactable,
@@ -78,13 +79,15 @@ if TYPE_CHECKING:
78
79
  SecretsMasker,
79
80
  should_hide_value_for_key,
80
81
  )
82
+ from airflow.sdk.execution_time.task_runner import RuntimeTaskInstance
81
83
  from airflow.utils.state import DagRunState, TaskInstanceState
82
84
  else:
83
85
  try:
84
86
  from airflow.sdk import DAG
87
+ from airflow.sdk.bases.operator import BaseOperator
85
88
  from airflow.sdk.definitions.mappedoperator import MappedOperator
86
89
  except ImportError:
87
- from airflow.models import DAG, MappedOperator
90
+ from airflow.models import DAG, BaseOperator, MappedOperator
88
91
 
89
92
  try:
90
93
  from airflow.providers.common.compat.assets import Asset
@@ -119,13 +122,39 @@ def try_import_from_string(string: str) -> Any:
119
122
  return import_string(string)
120
123
 
121
124
 
122
- def get_operator_class(task: BaseOperator | SdkBaseOperator) -> type:
125
+ def get_operator_class(task: BaseOperator) -> type:
123
126
  if task.__class__.__name__ in ("DecoratedMappedOperator", "MappedOperator"):
124
127
  return task.operator_class
125
128
  return task.__class__
126
129
 
127
130
 
128
- def get_job_name(task: TaskInstance) -> str:
131
+ def get_operator_provider_version(operator: BaseOperator | MappedOperator) -> str | None:
132
+ """Get the provider package version for the given operator."""
133
+ try:
134
+ class_path = get_fully_qualified_class_name(operator)
135
+
136
+ if not class_path.startswith("airflow.providers."):
137
+ return None
138
+
139
+ from airflow.providers_manager import ProvidersManager
140
+
141
+ providers_manager = ProvidersManager()
142
+
143
+ for package_name, provider_info in providers_manager.providers.items():
144
+ if package_name.startswith("apache-airflow-providers-"):
145
+ provider_module_path = package_name.replace(
146
+ "apache-airflow-providers-", "airflow.providers."
147
+ ).replace("-", ".")
148
+ if class_path.startswith(provider_module_path + "."):
149
+ return provider_info.version
150
+
151
+ return None
152
+
153
+ except Exception:
154
+ return None
155
+
156
+
157
+ def get_job_name(task: TaskInstance | RuntimeTaskInstance) -> str:
129
158
  return f"{task.dag_id}.{task.task_id}"
130
159
 
131
160
 
@@ -203,7 +232,7 @@ def get_user_provided_run_facets(ti: TaskInstance, ti_state: TaskInstanceState)
203
232
  return custom_facets
204
233
 
205
234
 
206
- def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator | SdkBaseOperator) -> str:
235
+ def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator) -> str:
207
236
  if isinstance(operator, (MappedOperator, SerializedBaseOperator)):
208
237
  # as in airflow.api_connexion.schemas.common_schema.ClassReferenceSchema
209
238
  return operator._task_module + "." + operator._task_type # type: ignore
@@ -211,17 +240,17 @@ def get_fully_qualified_class_name(operator: BaseOperator | MappedOperator | Sdk
211
240
  return op_class.__module__ + "." + op_class.__name__
212
241
 
213
242
 
214
- def is_operator_disabled(operator: BaseOperator | MappedOperator | SdkBaseOperator) -> bool:
243
+ def is_operator_disabled(operator: BaseOperator | MappedOperator) -> bool:
215
244
  return get_fully_qualified_class_name(operator) in conf.disabled_operators()
216
245
 
217
246
 
218
- def is_selective_lineage_enabled(obj: DAG | BaseOperator | MappedOperator | SdkBaseOperator) -> bool:
247
+ def is_selective_lineage_enabled(obj: DAG | BaseOperator | MappedOperator) -> bool:
219
248
  """If selective enable is active check if DAG or Task is enabled to emit events."""
220
249
  if not conf.selective_enable():
221
250
  return True
222
251
  if isinstance(obj, DAG):
223
252
  return is_dag_lineage_enabled(obj)
224
- if isinstance(obj, (BaseOperator, MappedOperator, SdkBaseOperator)):
253
+ if isinstance(obj, (BaseOperator, MappedOperator)):
225
254
  return is_task_lineage_enabled(obj)
226
255
  raise TypeError("is_selective_lineage_enabled can only be used on DAG or Operator objects")
227
256
 
@@ -508,6 +537,7 @@ class TaskInfo(InfoJsonEncodable):
508
537
  ),
509
538
  "inlets": lambda task: [AssetInfo(i) for i in task.inlets if isinstance(i, Asset)],
510
539
  "outlets": lambda task: [AssetInfo(o) for o in task.outlets if isinstance(o, Asset)],
540
+ "operator_provider_version": lambda task: get_operator_provider_version(task),
511
541
  }
512
542
 
513
543