apache-airflow-providers-common-compat 1.12.0rc1__tar.gz → 1.13.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.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/PKG-INFO +6 -6
  2. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/README.rst +3 -3
  3. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/docs/changelog.rst +27 -0
  4. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/docs/index.rst +3 -3
  5. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/provider.yaml +2 -1
  6. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/pyproject.toml +3 -3
  7. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/__init__.py +1 -1
  8. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/sdk.py +4 -2
  9. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/standard/operators.py +45 -0
  10. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/version_compat.py +2 -0
  11. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/.pre-commit-config.yaml +0 -0
  12. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/LICENSE +0 -0
  13. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/NOTICE +0 -0
  14. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/docs/.latest-doc-only-change.txt +0 -0
  15. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/docs/commits.rst +0 -0
  16. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/docs/conf.py +0 -0
  17. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/docs/installing-providers-from-sources.rst +0 -0
  18. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/docs/security.rst +0 -0
  19. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/__init__.py +0 -0
  20. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/__init__.py +0 -0
  21. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/__init__.py +0 -0
  22. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/_compat_utils.py +0 -0
  23. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/assets/__init__.py +0 -0
  24. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/check.py +0 -0
  25. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/connection/__init__.py +0 -0
  26. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/get_provider_info.py +0 -0
  27. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/lineage/__init__.py +0 -0
  28. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/lineage/entities.py +0 -0
  29. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/lineage/hook.py +0 -0
  30. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/module_loading/__init__.py +0 -0
  31. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/notifier/__init__.py +0 -0
  32. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/openlineage/__init__.py +0 -0
  33. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/openlineage/check.py +0 -0
  34. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/openlineage/facet.py +0 -0
  35. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/openlineage/utils/__init__.py +0 -0
  36. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/openlineage/utils/spark.py +0 -0
  37. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/openlineage/utils/sql.py +0 -0
  38. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/openlineage/utils/utils.py +0 -0
  39. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/security/__init__.py +0 -0
  40. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/security/permissions.py +0 -0
  41. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/sqlalchemy/__init__.py +0 -0
  42. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/sqlalchemy/orm.py +0 -0
  43. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/standard/__init__.py +0 -0
  44. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/standard/triggers.py +0 -0
  45. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/src/airflow/providers/common/compat/standard/utils.py +0 -0
  46. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/conftest.py +0 -0
  47. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/__init__.py +0 -0
  48. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/__init__.py +0 -0
  49. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/__init__.py +0 -0
  50. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/connection/__init__.py +0 -0
  51. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/connection/test_connection.py +0 -0
  52. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/lineage/__init__.py +0 -0
  53. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/lineage/test_hook.py +0 -0
  54. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/openlineage/__init__.py +0 -0
  55. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/openlineage/test_check.py +0 -0
  56. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/openlineage/test_facet.py +0 -0
  57. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/openlineage/utils/__init__.py +0 -0
  58. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/openlineage/utils/test_spark.py +0 -0
  59. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/openlineage/utils/test_sql.py +0 -0
  60. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/openlineage/utils/test_utils.py +0 -0
  61. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/security/__init__.py +0 -0
  62. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/security/test_permissions.py +0 -0
  63. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/sqlalchemy/__init__.py +0 -0
  64. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/sqlalchemy/test_orm.py +0 -0
  65. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/test__compat_utils.py +0 -0
  66. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/test_check.py +0 -0
  67. {apache_airflow_providers_common_compat-1.12.0rc1 → apache_airflow_providers_common_compat-1.13.0rc1}/tests/unit/common/compat/test_sdk.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-common-compat
3
- Version: 1.12.0rc1
3
+ Version: 1.13.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>
@@ -27,8 +27,8 @@ 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.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
30
+ Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.13.0/changelog.html
31
+ Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.13.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.12.0``
64
+ Release: ``1.13.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.12.0/>`_.
77
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.13.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.12.0/changelog.html>`_.
128
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.13.0/changelog.html>`_.
129
129
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-common-compat``
25
25
 
26
- Release: ``1.12.0``
26
+ Release: ``1.13.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.12.0/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.13.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.12.0/changelog.html>`_.
90
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.13.0/changelog.html>`_.
@@ -25,6 +25,33 @@
25
25
  Changelog
26
26
  ---------
27
27
 
28
+ 1.13.0
29
+ ......
30
+
31
+ .. note::
32
+ The new feature ``Add support for async callables in ''PythonOperator''`` will only work on Airflow 3.2.
33
+
34
+ Features
35
+ ~~~~~~~~
36
+
37
+ * ``Add support for async callables in ''PythonOperator'' (#60268)``
38
+
39
+ Bug Fixes
40
+ ~~~~~~~~~
41
+
42
+ * ``Fix BaseAsyncOperator in common-compat provider for Airflow 2.x (#60663)``
43
+
44
+ Misc
45
+ ~~~~
46
+
47
+ * ``Option to disable exporting of legacy metric names (#53722)``
48
+ * ``Define 'TaskInstanceKey' in task-sdk to support client server separation (#60776)``
49
+
50
+ .. Below changes are excluded from the changelog. Move them to
51
+ appropriate section above if needed. Do not delete the lines(!):
52
+ * ``Move lineage from airflow core to task sdk (#60968)``
53
+ * ``Revert "Move lineage from airflow core to task sdk (#60968)" (#61151)``
54
+
28
55
  1.12.0
29
56
  ......
30
57
 
@@ -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.12.0
65
+ Release: 1.13.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.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>`__)
117
+ * `The apache-airflow-providers-common-compat 1.13.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.13.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.13.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.13.0.tar.gz.sha512>`__)
118
+ * `The apache-airflow-providers-common-compat 1.13.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.13.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.13.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_compat-1.13.0-py3-none-any.whl.sha512>`__)
@@ -22,12 +22,13 @@ description: |
22
22
  Common Compatibility Provider - providing compatibility code for previous Airflow versions
23
23
 
24
24
  state: ready
25
- source-date-epoch: 1768334645
25
+ source-date-epoch: 1769460821
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.13.0
31
32
  - 1.12.0
32
33
  - 1.11.0
33
34
  - 1.10.1
@@ -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.12.0rc1"
28
+ version = "1.13.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"
@@ -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.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"
110
+ "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.13.0"
111
+ "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-common-compat/1.13.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.12.0"
32
+ __version__ = "1.13.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.11.0"
@@ -69,6 +69,7 @@ if TYPE_CHECKING:
69
69
  teardown as teardown,
70
70
  )
71
71
  from airflow.sdk._shared.listeners import hookimpl as hookimpl
72
+ from airflow.sdk._shared.observability.metrics.stats import Stats as Stats
72
73
  from airflow.sdk.bases.decorator import (
73
74
  DecoratedMappedOperator as DecoratedMappedOperator,
74
75
  DecoratedOperator as DecoratedOperator,
@@ -96,7 +97,6 @@ if TYPE_CHECKING:
96
97
  )
97
98
  from airflow.sdk.listener import get_listener_manager as get_listener_manager
98
99
  from airflow.sdk.log import redact as redact
99
- from airflow.sdk.observability.stats import Stats as Stats
100
100
  from airflow.sdk.plugins_manager import AirflowPlugin as AirflowPlugin
101
101
 
102
102
  # Airflow 3-only exceptions (conditionally imported)
@@ -111,6 +111,7 @@ if TYPE_CHECKING:
111
111
  )
112
112
  from airflow.sdk.execution_time.timeout import timeout as timeout
113
113
  from airflow.sdk.execution_time.xcom import XCom as XCom
114
+ from airflow.sdk.types import TaskInstanceKey as TaskInstanceKey
114
115
 
115
116
 
116
117
  from airflow.providers.common.compat._compat_utils import create_module_getattr
@@ -185,6 +186,7 @@ _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
185
186
  # Operator Links & Task Groups
186
187
  # ============================================================================
187
188
  "BaseOperatorLink": ("airflow.sdk", "airflow.models.baseoperatorlink"),
189
+ "TaskInstanceKey": ("airflow.sdk.types", "airflow.models.taskinstancekey"),
188
190
  "TaskGroup": ("airflow.sdk", "airflow.utils.task_group"),
189
191
  # ============================================================================
190
192
  # Operator Utilities (chain, cross_downstream, etc.)
@@ -250,7 +252,7 @@ _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
250
252
  # ============================================================================
251
253
  # Observability
252
254
  # ============================================================================
253
- "Stats": ("airflow.sdk.observability.stats", "airflow.stats"),
255
+ "Stats": ("airflow.sdk._shared.observability.metrics.stats", "airflow.stats"),
254
256
  # ============================================================================
255
257
  # Secrets Masking
256
258
  # ============================================================================
@@ -17,18 +17,63 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
+ from typing import TYPE_CHECKING
21
+
20
22
  from airflow.providers.common.compat._compat_utils import create_module_getattr
23
+ from airflow.providers.common.compat.version_compat import (
24
+ AIRFLOW_V_3_1_PLUS,
25
+ AIRFLOW_V_3_2_PLUS,
26
+ )
21
27
 
22
28
  _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
23
29
  # Re-export from sdk (which handles Airflow 2.x/3.x fallbacks)
24
30
  "BaseOperator": "airflow.providers.common.compat.sdk",
31
+ "BaseAsyncOperator": "airflow.providers.common.compat.sdk",
25
32
  "get_current_context": "airflow.providers.common.compat.sdk",
33
+ "is_async_callable": "airflow.providers.common.compat.sdk",
26
34
  # Standard provider items with direct fallbacks
27
35
  "PythonOperator": ("airflow.providers.standard.operators.python", "airflow.operators.python"),
28
36
  "ShortCircuitOperator": ("airflow.providers.standard.operators.python", "airflow.operators.python"),
29
37
  "_SERIALIZERS": ("airflow.providers.standard.operators.python", "airflow.operators.python"),
30
38
  }
31
39
 
40
+ if TYPE_CHECKING:
41
+ from airflow.sdk.bases.decorator import is_async_callable
42
+ from airflow.sdk.bases.operator import BaseAsyncOperator
43
+ elif AIRFLOW_V_3_2_PLUS:
44
+ from airflow.sdk.bases.decorator import is_async_callable
45
+ from airflow.sdk.bases.operator import BaseAsyncOperator
46
+ else:
47
+ if AIRFLOW_V_3_1_PLUS:
48
+ from airflow.sdk import BaseOperator
49
+ else:
50
+ from airflow.models import BaseOperator
51
+
52
+ def is_async_callable(func) -> bool:
53
+ """Detect if a callable is an async function."""
54
+ import inspect
55
+ from functools import partial
56
+
57
+ while isinstance(func, partial):
58
+ func = func.func
59
+ return inspect.iscoroutinefunction(func)
60
+
61
+ class BaseAsyncOperator(BaseOperator):
62
+ """Stub for Airflow < 3.2 that raises a clear error."""
63
+
64
+ @property
65
+ def is_async(self) -> bool:
66
+ return True
67
+
68
+ async def aexecute(self, context):
69
+ raise NotImplementedError()
70
+
71
+ def execute(self, context):
72
+ raise RuntimeError(
73
+ "Async operators require Airflow 3.2+. Upgrade Airflow or use a synchronous callable."
74
+ )
75
+
76
+
32
77
  __getattr__ = create_module_getattr(import_map=_IMPORT_MAP)
33
78
 
34
79
  __all__ = sorted(_IMPORT_MAP.keys())
@@ -34,6 +34,7 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
34
34
 
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
+ AIRFLOW_V_3_2_PLUS: bool = get_base_airflow_version_tuple() >= (3, 2, 0)
37
38
 
38
39
  # BaseOperator removed from version_compat to avoid circular imports
39
40
  # Import it directly in files that need it instead
@@ -41,4 +42,5 @@ AIRFLOW_V_3_1_PLUS: bool = get_base_airflow_version_tuple() >= (3, 1, 0)
41
42
  __all__ = [
42
43
  "AIRFLOW_V_3_0_PLUS",
43
44
  "AIRFLOW_V_3_1_PLUS",
45
+ "AIRFLOW_V_3_2_PLUS",
44
46
  ]