apache-airflow-providers-common-compat 1.10.1__tar.gz → 1.12.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 (67) hide show
  1. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/NOTICE +1 -1
  2. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/PKG-INFO +7 -7
  3. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/README.rst +3 -3
  4. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/docs/changelog.rst +43 -0
  5. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/docs/index.rst +3 -3
  6. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/provider.yaml +3 -1
  7. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/pyproject.toml +4 -4
  8. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/__init__.py +1 -1
  9. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/check.py +1 -1
  10. apache_airflow_providers_common_compat-1.12.0rc1/src/airflow/providers/common/compat/module_loading/__init__.py +49 -0
  11. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/openlineage/check.py +1 -1
  12. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/sdk.py +31 -1
  13. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/version_compat.py +2 -5
  14. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/openlineage/test_check.py +1 -1
  15. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/test_check.py +1 -1
  16. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/.pre-commit-config.yaml +0 -0
  17. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/LICENSE +0 -0
  18. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/docs/.latest-doc-only-change.txt +0 -0
  19. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/docs/commits.rst +0 -0
  20. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/docs/conf.py +0 -0
  21. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/docs/installing-providers-from-sources.rst +0 -0
  22. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/docs/security.rst +0 -0
  23. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/__init__.py +0 -0
  24. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/__init__.py +0 -0
  25. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/__init__.py +0 -0
  26. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/_compat_utils.py +0 -0
  27. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/assets/__init__.py +0 -0
  28. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/connection/__init__.py +0 -0
  29. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/get_provider_info.py +0 -0
  30. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/lineage/__init__.py +0 -0
  31. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/lineage/entities.py +0 -0
  32. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/lineage/hook.py +0 -0
  33. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/notifier/__init__.py +0 -0
  34. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/openlineage/__init__.py +0 -0
  35. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/openlineage/facet.py +0 -0
  36. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/openlineage/utils/__init__.py +0 -0
  37. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/openlineage/utils/spark.py +0 -0
  38. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/openlineage/utils/sql.py +0 -0
  39. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/openlineage/utils/utils.py +0 -0
  40. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/security/__init__.py +0 -0
  41. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/security/permissions.py +0 -0
  42. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/sqlalchemy/__init__.py +0 -0
  43. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/sqlalchemy/orm.py +0 -0
  44. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/standard/__init__.py +0 -0
  45. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/standard/operators.py +0 -0
  46. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/standard/triggers.py +0 -0
  47. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/src/airflow/providers/common/compat/standard/utils.py +0 -0
  48. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/conftest.py +0 -0
  49. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/__init__.py +0 -0
  50. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/__init__.py +0 -0
  51. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/__init__.py +0 -0
  52. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/connection/__init__.py +0 -0
  53. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/connection/test_connection.py +0 -0
  54. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/lineage/__init__.py +0 -0
  55. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/lineage/test_hook.py +0 -0
  56. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/openlineage/__init__.py +0 -0
  57. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/openlineage/test_facet.py +0 -0
  58. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/openlineage/utils/__init__.py +0 -0
  59. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/openlineage/utils/test_spark.py +0 -0
  60. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/openlineage/utils/test_sql.py +0 -0
  61. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/openlineage/utils/test_utils.py +0 -0
  62. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/security/__init__.py +0 -0
  63. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/security/test_permissions.py +0 -0
  64. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/sqlalchemy/__init__.py +0 -0
  65. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/sqlalchemy/test_orm.py +0 -0
  66. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/test__compat_utils.py +0 -0
  67. {apache_airflow_providers_common_compat-1.10.1 → apache_airflow_providers_common_compat-1.12.0rc1}/tests/unit/common/compat/test_sdk.py +0 -0
@@ -1,5 +1,5 @@
1
1
  Apache Airflow
2
- Copyright 2016-2025 The Apache Software Foundation
2
+ Copyright 2016-2026 The Apache Software Foundation
3
3
 
4
4
  This product includes software developed at
5
5
  The Apache Software Foundation (http://www.apache.org/).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-common-compat
3
- Version: 1.10.1
3
+ Version: 1.12.0rc1
4
4
  Summary: Provider package apache-airflow-providers-common-compat for Apache Airflow
5
5
  Keywords: airflow-provider,common.compat,airflow,integration
6
6
  Author-email: Apache Software Foundation <dev@airflow.apache.org>
@@ -22,13 +22,13 @@ Classifier: Programming Language :: Python :: 3.13
22
22
  Classifier: Topic :: System :: Monitoring
23
23
  License-File: LICENSE
24
24
  License-File: NOTICE
25
- Requires-Dist: apache-airflow>=2.11.0
25
+ Requires-Dist: apache-airflow>=2.11.0rc1
26
26
  Requires-Dist: asgiref>=2.3.0
27
27
  Requires-Dist: apache-airflow-providers-openlineage ; extra == "openlineage"
28
28
  Requires-Dist: apache-airflow-providers-standard ; extra == "standard"
29
29
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
30
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.10.1/changelog.html
31
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.10.1
30
+ Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.12.0/changelog.html
31
+ Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.12.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
@@ -61,7 +61,7 @@ Provides-Extra: standard
61
61
 
62
62
  Package ``apache-airflow-providers-common-compat``
63
63
 
64
- Release: ``1.10.1``
64
+ Release: ``1.12.0``
65
65
 
66
66
 
67
67
  Common Compatibility Provider - providing compatibility code for previous Airflow versions
@@ -74,7 +74,7 @@ This is a provider package for ``common.compat`` provider. All classes for this
74
74
  are in ``airflow.providers.common.compat`` python package.
75
75
 
76
76
  You can find package information and changelog for the provider
77
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.10.1/>`_.
77
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.12.0/>`_.
78
78
 
79
79
  Installation
80
80
  ------------
@@ -125,5 +125,5 @@ Extra Dependencies
125
125
  =============== ========================================
126
126
 
127
127
  The changelog for the provider package can be found in the
128
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.10.1/changelog.html>`_.
128
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.12.0/changelog.html>`_.
129
129
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-common-compat``
25
25
 
26
- Release: ``1.10.1``
26
+ Release: ``1.12.0``
27
27
 
28
28
 
29
29
  Common Compatibility Provider - providing compatibility code for previous Airflow versions
@@ -36,7 +36,7 @@ This is a provider package for ``common.compat`` provider. All classes for this
36
36
  are in ``airflow.providers.common.compat`` 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-common-compat/1.10.1/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.12.0/>`_.
40
40
 
41
41
  Installation
42
42
  ------------
@@ -87,4 +87,4 @@ Extra Dependencies
87
87
  =============== ========================================
88
88
 
89
89
  The changelog for the provider package can be found in the
90
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.10.1/changelog.html>`_.
90
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.12.0/changelog.html>`_.
@@ -25,6 +25,49 @@
25
25
  Changelog
26
26
  ---------
27
27
 
28
+ 1.12.0
29
+ ......
30
+
31
+ Features
32
+ ~~~~~~~~
33
+
34
+ * ``Allow providers to consume AirflowConfigException from compat sdk (#60044)``
35
+ * ``Source conf from 'airflow.sdk.configuration.conf' for apache providers (#59966)``
36
+ * ``Consume ''AirflowOptionalProviderFeatureException'' from compat sdk in providers (#60335)``
37
+
38
+ Misc
39
+ ~~~~
40
+
41
+ * ``New year means updated Copyright notices (#60344)``
42
+ * ``Move listeners module to shared library for client server separation (#59883)``
43
+ * ``Move over plugins_manager to a shared library (#59956)``
44
+
45
+ .. Below changes are excluded from the changelog. Move them to
46
+ appropriate section above if needed. Do not delete the lines(!):
47
+ * ``Add support for async callables in PythonOperator (#59087)``
48
+ * ``Revert "Add support for async callables in PythonOperator (#59087)" (#60266)``
49
+
50
+ 1.11.0
51
+ ......
52
+
53
+ Features
54
+ ~~~~~~~~
55
+
56
+ * ``Extract shared "module_loading" distribution (#59139)``
57
+
58
+ Bug Fixes
59
+ ~~~~~~~~~
60
+
61
+ * ``Fix circular import errors when CeleryExecutor is used with sentry (#59745)``
62
+
63
+ Misc
64
+ ~~~~
65
+
66
+ * ``Prevent client secrets and proxy credentials from being logged in Microsoft Graph hook logs (#59688)``
67
+
68
+ .. Below changes are excluded from the changelog. Move them to
69
+ appropriate section above if needed. Do not delete the lines(!):
70
+
28
71
  1.10.1
29
72
  ......
30
73
 
@@ -62,7 +62,7 @@ apache-airflow-providers-common-compat package
62
62
  Common Compatibility Provider - providing compatibility code for previous Airflow versions
63
63
 
64
64
 
65
- Release: 1.10.1
65
+ Release: 1.12.0
66
66
 
67
67
  Provider package
68
68
  ----------------
@@ -114,5 +114,5 @@ Downloading official packages
114
114
  You can download officially released packages and verify their checksums and signatures from the
115
115
  `Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
116
116
 
117
- * `The apache-airflow-providers-common-compat 1.10.1 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.10.1.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.10.1.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.10.1.tar.gz.sha512>`__)
118
- * `The apache-airflow-providers-common-compat 1.10.1 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.10.1-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.10.1-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.10.1-py3-none-any.whl.sha512>`__)
117
+ * `The apache-airflow-providers-common-compat 1.12.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.12.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.12.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.12.0.tar.gz.sha512>`__)
118
+ * `The apache-airflow-providers-common-compat 1.12.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.12.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.12.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.12.0-py3-none-any.whl.sha512>`__)
@@ -22,12 +22,14 @@ description: |
22
22
  Common Compatibility Provider - providing compatibility code for previous Airflow versions
23
23
 
24
24
  state: ready
25
- source-date-epoch: 1765298888
25
+ source-date-epoch: 1768334645
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
+ - 1.12.0
32
+ - 1.11.0
31
33
  - 1.10.1
32
34
  - 1.10.0
33
35
  - 1.9.0
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
25
25
 
26
26
  [project]
27
27
  name = "apache-airflow-providers-common-compat"
28
- version = "1.10.1"
28
+ version = "1.12.0rc1"
29
29
  description = "Provider package apache-airflow-providers-common-compat for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  license = "Apache-2.0"
@@ -58,7 +58,7 @@ requires-python = ">=3.10"
58
58
  # Make sure to run ``prek update-providers-dependencies --all-files``
59
59
  # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
60
60
  dependencies = [
61
- "apache-airflow>=2.11.0",
61
+ "apache-airflow>=2.11.0rc1",
62
62
  "asgiref>=2.3.0",
63
63
  ]
64
64
 
@@ -107,8 +107,8 @@ apache-airflow-providers-common-sql = {workspace = true}
107
107
  apache-airflow-providers-standard = {workspace = true}
108
108
 
109
109
  [project.urls]
110
- "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.10.1"
111
- "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.10.1/changelog.html"
110
+ "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.12.0"
111
+ "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.12.0/changelog.html"
112
112
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
113
113
  "Source Code" = "https://github.com/apache/airflow"
114
114
  "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__ = "1.10.1"
32
+ __version__ = "1.12.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.11.0"
@@ -23,7 +23,7 @@ from importlib import metadata
23
23
 
24
24
  from packaging.version import Version
25
25
 
26
- from airflow.exceptions import AirflowOptionalProviderFeatureException
26
+ from airflow.providers.common.compat.sdk import AirflowOptionalProviderFeatureException
27
27
 
28
28
 
29
29
  def require_provider_version(provider_name: str, provider_min_version: str):
@@ -0,0 +1,49 @@
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
+ from __future__ import annotations
18
+
19
+ try:
20
+ from airflow.utils.module_loading import (
21
+ import_string,
22
+ iter_namespace,
23
+ qualname,
24
+ )
25
+
26
+ except ImportError:
27
+ from airflow.sdk.module_loading import import_string, iter_namespace, qualname
28
+
29
+ try:
30
+ # This function was not available in Airflow 3.0/3.1 in module_loading, but it's good to keep it in the
31
+ # same shared module - good for reuse
32
+ from airflow.sdk._shared.module_loading import is_valid_dotpath
33
+
34
+ except ImportError:
35
+ # TODO: Remove it when Airflow 3.2.0 is the minimum version
36
+ def is_valid_dotpath(path: str) -> bool:
37
+ import re
38
+
39
+ if not isinstance(path, str):
40
+ return False
41
+ pattern = r"^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*$"
42
+ return bool(re.match(pattern, path))
43
+
44
+
45
+ __all__ = [
46
+ "import_string",
47
+ "qualname",
48
+ "iter_namespace",
49
+ ]
@@ -24,7 +24,7 @@ from typing import Any
24
24
 
25
25
  from packaging.version import Version
26
26
 
27
- from airflow.exceptions import AirflowOptionalProviderFeatureException
27
+ from airflow.providers.common.compat.sdk import AirflowOptionalProviderFeatureException
28
28
 
29
29
  log = logging.getLogger(__name__)
30
30
 
@@ -68,6 +68,7 @@ if TYPE_CHECKING:
68
68
  task_group as task_group,
69
69
  teardown as teardown,
70
70
  )
71
+ from airflow.sdk._shared.listeners import hookimpl as hookimpl
71
72
  from airflow.sdk.bases.decorator import (
72
73
  DecoratedMappedOperator as DecoratedMappedOperator,
73
74
  DecoratedOperator as DecoratedOperator,
@@ -76,13 +77,16 @@ if TYPE_CHECKING:
76
77
  task_decorator_factory as task_decorator_factory,
77
78
  )
78
79
  from airflow.sdk.bases.sensor import poke_mode_only as poke_mode_only
80
+ from airflow.sdk.configuration import conf as conf
79
81
  from airflow.sdk.definitions.context import context_merge as context_merge
80
82
  from airflow.sdk.definitions.mappedoperator import MappedOperator as MappedOperator
81
83
  from airflow.sdk.definitions.template import literal as literal
82
84
  from airflow.sdk.exceptions import (
85
+ AirflowConfigException as AirflowConfigException,
83
86
  AirflowException as AirflowException,
84
87
  AirflowFailException as AirflowFailException,
85
88
  AirflowNotFoundException as AirflowNotFoundException,
89
+ AirflowOptionalProviderFeatureException as AirflowOptionalProviderFeatureException,
86
90
  AirflowSensorTimeout as AirflowSensorTimeout,
87
91
  AirflowSkipException as AirflowSkipException,
88
92
  AirflowTaskTimeout as AirflowTaskTimeout,
@@ -90,7 +94,10 @@ if TYPE_CHECKING:
90
94
  TaskDeferred as TaskDeferred,
91
95
  XComNotFound as XComNotFound,
92
96
  )
93
- from airflow.sdk.observability.stats import Stats # noqa: F401
97
+ from airflow.sdk.listener import get_listener_manager as get_listener_manager
98
+ from airflow.sdk.log import redact as redact
99
+ from airflow.sdk.observability.stats import Stats as Stats
100
+ from airflow.sdk.plugins_manager import AirflowPlugin as AirflowPlugin
94
101
 
95
102
  # Airflow 3-only exceptions (conditionally imported)
96
103
  if AIRFLOW_V_3_0_PLUS:
@@ -171,6 +178,10 @@ _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
171
178
  # ============================================================================
172
179
  "BaseNotifier": ("airflow.sdk", "airflow.notifications.basenotifier"),
173
180
  # ============================================================================
181
+ # Plugins
182
+ # ============================================================================
183
+ "AirflowPlugin": ("airflow.sdk.plugins_manager", "airflow.plugins_manager"),
184
+ # ============================================================================
174
185
  # Operator Links & Task Groups
175
186
  # ============================================================================
176
187
  "BaseOperatorLink": ("airflow.sdk", "airflow.models.baseoperatorlink"),
@@ -229,6 +240,7 @@ _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
229
240
  "AirflowException": ("airflow.sdk.exceptions", "airflow.exceptions"),
230
241
  "AirflowFailException": ("airflow.sdk.exceptions", "airflow.exceptions"),
231
242
  "AirflowNotFoundException": ("airflow.sdk.exceptions", "airflow.exceptions"),
243
+ "AirflowOptionalProviderFeatureException": ("airflow.sdk.exceptions", "airflow.exceptions"),
232
244
  "AirflowSkipException": ("airflow.sdk.exceptions", "airflow.exceptions"),
233
245
  "AirflowTaskTimeout": ("airflow.sdk.exceptions", "airflow.exceptions"),
234
246
  "AirflowSensorTimeout": ("airflow.sdk.exceptions", "airflow.exceptions"),
@@ -239,6 +251,24 @@ _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
239
251
  # Observability
240
252
  # ============================================================================
241
253
  "Stats": ("airflow.sdk.observability.stats", "airflow.stats"),
254
+ # ============================================================================
255
+ # Secrets Masking
256
+ # ============================================================================
257
+ "redact": (
258
+ "airflow.sdk.log",
259
+ "airflow.sdk._shared.secrets_masker",
260
+ "airflow.sdk.execution_time.secrets_masker",
261
+ "airflow.utils.log.secrets_masker",
262
+ ),
263
+ # ============================================================================
264
+ # Listeners
265
+ # ============================================================================
266
+ "hookimpl": ("airflow.sdk._shared.listeners", "airflow.listeners"),
267
+ "get_listener_manager": ("airflow.sdk.listener", "airflow.listeners.listener"),
268
+ # Configuration
269
+ # ============================================================================
270
+ "conf": ("airflow.sdk.configuration", "airflow.configuration"),
271
+ "AirflowConfigException": ("airflow.sdk.exceptions", "airflow.exceptions"),
242
272
  }
243
273
 
244
274
  # Airflow 3-only exceptions (not available in Airflow 2)
@@ -35,13 +35,10 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
35
35
  AIRFLOW_V_3_0_PLUS: bool = get_base_airflow_version_tuple() >= (3, 0, 0)
36
36
  AIRFLOW_V_3_1_PLUS: bool = get_base_airflow_version_tuple() >= (3, 1, 0)
37
37
 
38
- if AIRFLOW_V_3_0_PLUS:
39
- from airflow.sdk import BaseOperator
40
- else:
41
- from airflow.models import BaseOperator
38
+ # BaseOperator removed from version_compat to avoid circular imports
39
+ # Import it directly in files that need it instead
42
40
 
43
41
  __all__ = [
44
42
  "AIRFLOW_V_3_0_PLUS",
45
43
  "AIRFLOW_V_3_1_PLUS",
46
- "BaseOperator",
47
44
  ]
@@ -24,8 +24,8 @@ from unittest.mock import patch
24
24
 
25
25
  import pytest
26
26
 
27
- from airflow.exceptions import AirflowOptionalProviderFeatureException
28
27
  from airflow.providers.common.compat.openlineage.check import require_openlineage_version
28
+ from airflow.providers.common.compat.sdk import AirflowOptionalProviderFeatureException
29
29
 
30
30
  REQUIRE_OPENLINEAGE_VERSION = r"`require_openlineage_version` decorator must be used with at least one argument.*@require_openlineage_version\(provider_min_version=\"1\.0\.0\"\)"
31
31
 
@@ -22,8 +22,8 @@ from unittest.mock import patch
22
22
 
23
23
  import pytest
24
24
 
25
- from airflow.exceptions import AirflowOptionalProviderFeatureException
26
25
  from airflow.providers.common.compat.check import require_provider_version
26
+ from airflow.providers.common.compat.sdk import AirflowOptionalProviderFeatureException
27
27
 
28
28
 
29
29
  def test_decorator_usage_without_parentheses():