apache-airflow-providers-common-sql 1.27.2rc1__tar.gz → 1.27.3__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.

Potentially problematic release.


This version of apache-airflow-providers-common-sql might be problematic. Click here for more details.

Files changed (73) hide show
  1. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/PKG-INFO +11 -11
  2. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/README.rst +4 -4
  3. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/changelog.rst +22 -0
  4. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/index.rst +3 -3
  5. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/provider.yaml +2 -1
  6. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/pyproject.toml +7 -11
  7. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/__init__.py +1 -1
  8. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/dialects/dialect.py +2 -2
  9. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/dialects/dialect.pyi +2 -2
  10. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/hooks/sql.py +16 -16
  11. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/hooks/sql.pyi +61 -2
  12. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/operators/generic_transfer.py +7 -3
  13. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/operators/sql.py +9 -4
  14. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/sensors/sql.py +14 -4
  15. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/sensors/sql.pyi +9 -3
  16. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/triggers/sql.py +5 -1
  17. apache_airflow_providers_common_sql-1.27.3/src/airflow/providers/common/sql/version_compat.py +47 -0
  18. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/hooks/test_dbapi.py +5 -1
  19. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/hooks/test_sql.py +11 -9
  20. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/operators/test_generic_transfer.py +41 -35
  21. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/operators/test_sql.py +52 -27
  22. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/triggers/test_sql.py +10 -1
  23. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/.latest-doc-only-change.txt +0 -0
  24. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/commits.rst +0 -0
  25. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/conf.py +0 -0
  26. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/connections.rst +0 -0
  27. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/dataframes.rst +0 -0
  28. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/dialects.rst +0 -0
  29. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/installing-providers-from-sources.rst +0 -0
  30. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/integration-logos/sql.png +0 -0
  31. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/operators.rst +0 -0
  32. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/security.rst +0 -0
  33. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/docs/supported-database-types.rst +0 -0
  34. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/__init__.py +0 -0
  35. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/__init__.py +0 -0
  36. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/__init__.py +0 -0
  37. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/LICENSE +0 -0
  38. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/README_API.md +0 -0
  39. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/dialects/__init__.py +0 -0
  40. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/doc/adr/0001-record-architecture-decisions.md +0 -0
  41. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/doc/adr/0002-return-common-data-structure-from-dbapihook-derived-hooks.md +0 -0
  42. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/doc/adr/0003-introduce-notion-of-dialects-in-dbapihook.md +0 -0
  43. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/get_provider_info.py +0 -0
  44. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/get_provider_info.pyi +0 -0
  45. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/hooks/__init__.py +0 -0
  46. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/hooks/handlers.py +0 -0
  47. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/hooks/handlers.pyi +0 -0
  48. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/operators/__init__.py +0 -0
  49. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/operators/generic_transfer.pyi +0 -0
  50. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/sensors/__init__.py +0 -0
  51. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/triggers/__init__.py +0 -0
  52. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/src/airflow/providers/common/sql/triggers/sql.pyi +0 -0
  53. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/conftest.py +0 -0
  54. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/system/__init__.py +0 -0
  55. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/system/common/__init__.py +0 -0
  56. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/system/common/sql/__init__.py +0 -0
  57. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/system/common/sql/example_generic_transfer.py +0 -0
  58. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/system/common/sql/example_sql_column_table_check.py +0 -0
  59. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/system/common/sql/example_sql_execute_query.py +0 -0
  60. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/system/common/sql/example_sql_threshold_check.py +0 -0
  61. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/__init__.py +0 -0
  62. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/__init__.py +0 -0
  63. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/__init__.py +0 -0
  64. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/dialects/__init__.py +0 -0
  65. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/dialects/test_dialect.py +0 -0
  66. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/hooks/__init__.py +0 -0
  67. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/hooks/test_handlers.py +0 -0
  68. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/hooks/test_sqlparse.py +0 -0
  69. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/operators/__init__.py +0 -0
  70. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/operators/test_sql_execute.py +0 -0
  71. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/sensors/__init__.py +0 -0
  72. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/sensors/test_sql.py +0 -0
  73. {apache_airflow_providers_common_sql-1.27.2rc1 → apache_airflow_providers_common_sql-1.27.3}/tests/unit/common/sql/triggers/__init__.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-common-sql
3
- Version: 1.27.2rc1
3
+ Version: 1.27.3
4
4
  Summary: Provider package apache-airflow-providers-common-sql for Apache Airflow
5
5
  Keywords: airflow-provider,common.sql,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,21 +15,21 @@ 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.0rc1
22
+ Requires-Dist: apache-airflow>=2.10.0
24
23
  Requires-Dist: sqlparse>=0.5.1
25
24
  Requires-Dist: more-itertools>=9.0.0
26
25
  Requires-Dist: methodtools>=0.4.7
27
26
  Requires-Dist: apache-airflow-providers-openlineage ; extra == "openlineage"
28
- Requires-Dist: pandas>=2.1.2,<2.2 ; extra == "pandas"
27
+ Requires-Dist: pandas>=2.1.2 ; extra == "pandas" and ( python_version <"3.13")
28
+ Requires-Dist: pandas>=2.2.3 ; extra == "pandas" and ( python_version >="3.13")
29
29
  Requires-Dist: polars>=1.26.0 ; extra == "polars"
30
30
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
31
- Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-common-sql/1.27.2/changelog.html
32
- Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-common-sql/1.27.2
31
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/changelog.html
32
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3
33
33
  Project-URL: Mastodon, https://fosstodon.org/@airflow
34
34
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
35
35
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -63,7 +63,7 @@ Provides-Extra: polars
63
63
 
64
64
  Package ``apache-airflow-providers-common-sql``
65
65
 
66
- Release: ``1.27.2``
66
+ Release: ``1.27.3``
67
67
 
68
68
 
69
69
  `Common SQL Provider <https://en.wikipedia.org/wiki/SQL>`__
@@ -76,7 +76,7 @@ This is a provider package for ``common.sql`` provider. All classes for this pro
76
76
  are in ``airflow.providers.common.sql`` python package.
77
77
 
78
78
  You can find package information and changelog for the provider
79
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.2/>`_.
79
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/>`_.
80
80
 
81
81
  Installation
82
82
  ------------
@@ -85,7 +85,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
85
85
  for the minimum Airflow version supported) via
86
86
  ``pip install apache-airflow-providers-common-sql``
87
87
 
88
- The package supports the following python versions: 3.9,3.10,3.11,3.12
88
+ The package supports the following python versions: 3.10,3.11,3.12
89
89
 
90
90
  Requirements
91
91
  ------------
@@ -119,5 +119,5 @@ Dependent package
119
119
  ============================================================================================================== ===============
120
120
 
121
121
  The changelog for the provider package can be found in the
122
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.2/changelog.html>`_.
122
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/changelog.html>`_.
123
123
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-common-sql``
25
25
 
26
- Release: ``1.27.2``
26
+ Release: ``1.27.3``
27
27
 
28
28
 
29
29
  `Common SQL Provider <https://en.wikipedia.org/wiki/SQL>`__
@@ -36,7 +36,7 @@ This is a provider package for ``common.sql`` provider. All classes for this pro
36
36
  are in ``airflow.providers.common.sql`` 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-sql/1.27.2/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/>`_.
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-common-sql``
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
  ------------
@@ -79,4 +79,4 @@ Dependent package
79
79
  ============================================================================================================== ===============
80
80
 
81
81
  The changelog for the provider package can be found in the
82
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.2/changelog.html>`_.
82
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/changelog.html>`_.
@@ -25,6 +25,28 @@
25
25
  Changelog
26
26
  ---------
27
27
 
28
+ 1.27.3
29
+ ......
30
+
31
+ Misc
32
+ ~~~~
33
+
34
+ * ``Move 'BaseHook' implementation to task SDK (#51873)``
35
+ * ``Replace models.BaseOperator to Task SDK one for Common Providers (#52443)``
36
+ * ``Drop support for Python 3.9 (#52072)``
37
+ * ``Use BaseSensorOperator from task sdk in providers (#52296)``
38
+ * ``Bump upper binding on pandas in all providers (#52060)``
39
+
40
+ Doc-only
41
+ ~~~~~~~~
42
+
43
+ * ``Minor pre-commit fixes (#51769)``
44
+
45
+ .. Below changes are excluded from the changelog. Move them to
46
+ appropriate section above if needed. Do not delete the lines(!):
47
+ * ``Clean up messy default connection overrides in provider tests (#52137)``
48
+ * ``Remove pytest db markers from common sql provider (#52105)``
49
+
28
50
  1.27.2
29
51
  ......
30
52
 
@@ -79,7 +79,7 @@ apache-airflow-providers-common-sql package
79
79
  `Common SQL Provider <https://en.wikipedia.org/wiki/SQL>`__
80
80
 
81
81
 
82
- Release: 1.27.2
82
+ Release: 1.27.3
83
83
 
84
84
  Provider package
85
85
  ----------------
@@ -133,5 +133,5 @@ Downloading official packages
133
133
  You can download officially released packages and verify their checksums and signatures from the
134
134
  `Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
135
135
 
136
- * `The apache-airflow-providers-common-sql 1.27.2 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.2.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.2.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.2.tar.gz.sha512>`__)
137
- * `The apache-airflow-providers-common-sql 1.27.2 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.2-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.2-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.2-py3-none-any.whl.sha512>`__)
136
+ * `The apache-airflow-providers-common-sql 1.27.3 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.3.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.3.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.3.tar.gz.sha512>`__)
137
+ * `The apache-airflow-providers-common-sql 1.27.3 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.3-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.3-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_common_sql-1.27.3-py3-none-any.whl.sha512>`__)
@@ -22,12 +22,13 @@ description: |
22
22
  `Common SQL Provider <https://en.wikipedia.org/wiki/SQL>`__
23
23
 
24
24
  state: ready
25
- source-date-epoch: 1749896343
25
+ source-date-epoch: 1751472956
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.27.3
31
32
  - 1.27.2
32
33
  - 1.27.1
33
34
  - 1.27.0
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
25
25
 
26
26
  [project]
27
27
  name = "apache-airflow-providers-common-sql"
28
- version = "1.27.2rc1"
28
+ version = "1.27.3"
29
29
  description = "Provider package apache-airflow-providers-common-sql for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  authors = [
@@ -44,20 +44,19 @@ 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.0rc1",
59
+ "apache-airflow>=2.10.0",
61
60
  "sqlparse>=0.5.1",
62
61
  "more-itertools>=9.0.0",
63
62
  # The methodtools dependency is necessary since the introduction of dialects:
@@ -69,11 +68,8 @@ dependencies = [
69
68
  # Any change in the dependencies is preserved when the file is regenerated
70
69
  [project.optional-dependencies]
71
70
  "pandas" = [
72
- # In pandas 2.2 minimal version of the sqlalchemy is 2.0
73
- # https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
74
- # However Airflow not fully supports it yet: https://github.com/apache/airflow/issues/28723
75
- # In addition FAB also limit sqlalchemy to < 2.0
76
- "pandas>=2.1.2,<2.2",
71
+ 'pandas>=2.1.2; python_version <"3.13"',
72
+ 'pandas>=2.2.3; python_version >="3.13"',
77
73
  ]
78
74
  "openlineage" = [
79
75
  "apache-airflow-providers-openlineage"
@@ -122,8 +118,8 @@ apache-airflow-providers-common-sql = {workspace = true}
122
118
  apache-airflow-providers-standard = {workspace = true}
123
119
 
124
120
  [project.urls]
125
- "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-common-sql/1.27.2"
126
- "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-common-sql/1.27.2/changelog.html"
121
+ "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3"
122
+ "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/changelog.html"
127
123
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
128
124
  "Source Code" = "https://github.com/apache/airflow"
129
125
  "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.27.2"
32
+ __version__ = "1.27.3"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.10.0"
@@ -17,8 +17,8 @@
17
17
  from __future__ import annotations
18
18
 
19
19
  import re
20
- from collections.abc import Iterable, Mapping
21
- from typing import TYPE_CHECKING, Any, Callable, TypeVar
20
+ from collections.abc import Callable, Iterable, Mapping
21
+ from typing import TYPE_CHECKING, Any, TypeVar
22
22
 
23
23
  from methodtools import lru_cache
24
24
 
@@ -32,8 +32,8 @@ Definition of the public interface for airflow.providers.common.sql.src.airflow.
32
32
  isort:skip_file
33
33
  """
34
34
 
35
- from collections.abc import Iterable, Mapping
36
- from typing import Any, Callable, TypeVar
35
+ from collections.abc import Callable, Iterable, Mapping
36
+ from typing import Any, TypeVar
37
37
 
38
38
  from _typeshed import Incomplete as Incomplete
39
39
  from sqlalchemy.engine import Inspector as Inspector
@@ -18,19 +18,11 @@ from __future__ import annotations
18
18
 
19
19
  import contextlib
20
20
  import warnings
21
- from collections.abc import Generator, Iterable, Mapping, MutableMapping, Sequence
21
+ from collections.abc import Callable, Generator, Iterable, Mapping, MutableMapping, Sequence
22
22
  from contextlib import closing, contextmanager, suppress
23
23
  from datetime import datetime
24
24
  from functools import cached_property
25
- from typing import (
26
- TYPE_CHECKING,
27
- Any,
28
- Callable,
29
- Protocol,
30
- TypeVar,
31
- cast,
32
- overload,
33
- )
25
+ from typing import TYPE_CHECKING, Any, Literal, Protocol, TypeVar, cast, overload
34
26
  from urllib.parse import urlparse
35
27
 
36
28
  import sqlparse
@@ -40,7 +32,6 @@ from more_itertools import chunked
40
32
  from sqlalchemy import create_engine, inspect
41
33
  from sqlalchemy.engine import make_url
42
34
  from sqlalchemy.exc import ArgumentError, NoSuchModuleError
43
- from typing_extensions import Literal
44
35
 
45
36
  from airflow.configuration import conf
46
37
  from airflow.exceptions import (
@@ -48,9 +39,13 @@ from airflow.exceptions import (
48
39
  AirflowOptionalProviderFeatureException,
49
40
  AirflowProviderDeprecationWarning,
50
41
  )
51
- from airflow.hooks.base import BaseHook
52
42
  from airflow.providers.common.sql.dialects.dialect import Dialect
53
43
  from airflow.providers.common.sql.hooks import handlers
44
+
45
+ try:
46
+ from airflow.sdk import BaseHook
47
+ except ImportError:
48
+ from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef]
54
49
  from airflow.utils.module_loading import import_string
55
50
 
56
51
  if TYPE_CHECKING:
@@ -58,10 +53,14 @@ if TYPE_CHECKING:
58
53
  from polars import DataFrame as PolarsDataFrame
59
54
  from sqlalchemy.engine import URL, Engine, Inspector
60
55
 
61
- from airflow.models import Connection
62
56
  from airflow.providers.openlineage.extractors import OperatorLineage
63
57
  from airflow.providers.openlineage.sqlparser import DatabaseInfo
64
58
 
59
+ try:
60
+ from airflow.sdk import Connection
61
+ except ImportError:
62
+ from airflow.models.connection import Connection # type: ignore[assignment]
63
+
65
64
 
66
65
  T = TypeVar("T")
67
66
  SQL_PLACEHOLDERS = frozenset({"%s", "?"})
@@ -278,7 +277,10 @@ class DbApiHook(BaseHook):
278
277
  db = self.connection
279
278
  if self.connector is None:
280
279
  raise RuntimeError(f"{type(self).__name__} didn't have `self.connector` set!")
281
- return self.connector.connect(host=db.host, port=db.port, username=db.login, schema=db.schema)
280
+ host = db.host or ""
281
+ login = db.login or ""
282
+ schema = db.schema or ""
283
+ return self.connector.connect(host=host, port=cast("int", db.port), username=login, schema=schema)
282
284
 
283
285
  def get_uri(self) -> str:
284
286
  """
@@ -425,7 +427,6 @@ class DbApiHook(BaseHook):
425
427
  df_type: Literal["pandas"] = "pandas",
426
428
  **kwargs: Any,
427
429
  ) -> PandasDataFrame: ...
428
-
429
430
  @overload
430
431
  def get_df(
431
432
  self,
@@ -522,7 +523,6 @@ class DbApiHook(BaseHook):
522
523
  df_type: Literal["pandas"] = "pandas",
523
524
  **kwargs,
524
525
  ) -> Generator[PandasDataFrame, None, None]: ...
525
-
526
526
  @overload
527
527
  def get_df_by_chunks(
528
528
  self,
@@ -32,12 +32,13 @@ Definition of the public interface for airflow.providers.common.sql.src.airflow.
32
32
  isort:skip_file
33
33
  """
34
34
 
35
- from collections.abc import Generator, Iterable, Mapping, MutableMapping, Sequence
35
+ from collections.abc import Callable, Generator, Iterable, Mapping, MutableMapping, Sequence
36
36
  from functools import cached_property as cached_property
37
- from typing import Any, Protocol, TypeVar
37
+ from typing import Any, Literal, Protocol, TypeVar, overload
38
38
 
39
39
  from _typeshed import Incomplete as Incomplete
40
40
  from pandas import DataFrame as PandasDataFrame
41
+ from polars import DataFrame as PolarsDataFrame
41
42
  from sqlalchemy.engine import URL as URL, Engine as Engine, Inspector as Inspector
42
43
 
43
44
  from airflow.hooks.base import BaseHook as BaseHook
@@ -115,6 +116,44 @@ class DbApiHook(BaseHook):
115
116
  def get_first(
116
117
  self, sql: str | list[str], parameters: Iterable | Mapping[str, Any] | None = None
117
118
  ) -> Any: ...
119
+ @overload
120
+ def get_df(
121
+ self,
122
+ sql: str | list[str],
123
+ parameters: list | tuple | Mapping[str, Any] | None = None,
124
+ *,
125
+ df_type: Literal["pandas"] = "pandas",
126
+ **kwargs: Any,
127
+ ) -> PandasDataFrame: ...
128
+ @overload
129
+ def get_df(
130
+ self,
131
+ sql: str | list[str],
132
+ parameters: list | tuple | Mapping[str, Any] | None = None,
133
+ *,
134
+ df_type: Literal["polars"],
135
+ **kwargs: Any,
136
+ ) -> PolarsDataFrame: ...
137
+ @overload
138
+ def get_df_by_chunks(
139
+ self,
140
+ sql: str | list[str],
141
+ parameters: list | tuple | Mapping[str, Any] | None = None,
142
+ *,
143
+ chunksize: int,
144
+ df_type: Literal["pandas"] = "pandas",
145
+ **kwargs,
146
+ ) -> Generator[PandasDataFrame, None, None]: ...
147
+ @overload
148
+ def get_df_by_chunks(
149
+ self,
150
+ sql: str | list[str],
151
+ parameters: list | tuple | Mapping[str, Any] | None = None,
152
+ *,
153
+ chunksize: int,
154
+ df_type: Literal["polars"],
155
+ **kwargs,
156
+ ) -> Generator[PolarsDataFrame, None, None]: ...
118
157
  @staticmethod
119
158
  def strip_sql_string(sql: str) -> str: ...
120
159
  @staticmethod
@@ -146,3 +185,23 @@ class DbApiHook(BaseHook):
146
185
  @staticmethod
147
186
  def get_openlineage_authority_part(connection, default_port: int | None = None) -> str: ...
148
187
  def get_db_log_messages(self, conn) -> None: ...
188
+ @overload
189
+ def run(
190
+ self,
191
+ sql: str | Iterable[str],
192
+ autocommit: bool = ...,
193
+ parameters: Iterable | Mapping[str, Any] | None = ...,
194
+ handler: None = ...,
195
+ split_statements: bool = ...,
196
+ return_last: bool = ...,
197
+ ) -> None: ...
198
+ @overload
199
+ def run(
200
+ self,
201
+ sql: str | Iterable[str],
202
+ autocommit: bool = ...,
203
+ parameters: Iterable | Mapping[str, Any] | None = ...,
204
+ handler: Callable[[Any], T] = ...,
205
+ split_statements: bool = ...,
206
+ return_last: bool = ...,
207
+ ) -> tuple | list[tuple] | list[list[tuple] | tuple] | None: ...
@@ -22,10 +22,14 @@ from functools import cached_property
22
22
  from typing import TYPE_CHECKING, Any
23
23
 
24
24
  from airflow.exceptions import AirflowException
25
- from airflow.hooks.base import BaseHook
26
- from airflow.models import BaseOperator
27
25
  from airflow.providers.common.sql.hooks.sql import DbApiHook
28
26
  from airflow.providers.common.sql.triggers.sql import SQLExecuteQueryTrigger
27
+ from airflow.providers.common.sql.version_compat import BaseOperator
28
+
29
+ try:
30
+ from airflow.sdk import BaseHook
31
+ except ImportError:
32
+ from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef]
29
33
 
30
34
  if TYPE_CHECKING:
31
35
  import jinja2
@@ -192,7 +196,7 @@ class GenericTransfer(BaseOperator):
192
196
  )
193
197
 
194
198
  self.log.info("Offset increased to %d", offset)
195
- self.xcom_push(context=context, key="offset", value=offset)
199
+ context["ti"].xcom_push(key="offset", value=offset)
196
200
 
197
201
  self.log.info("Inserting %d rows into %s", len(results), self.destination_conn_id)
198
202
  self.destination_hook.insert_rows(
@@ -19,17 +19,22 @@ from __future__ import annotations
19
19
 
20
20
  import ast
21
21
  import re
22
- from collections.abc import Iterable, Mapping, Sequence
22
+ from collections.abc import Callable, Iterable, Mapping, Sequence
23
23
  from functools import cached_property
24
- from typing import TYPE_CHECKING, Any, Callable, ClassVar, NoReturn, SupportsAbs
24
+ from typing import TYPE_CHECKING, Any, ClassVar, NoReturn, SupportsAbs
25
25
 
26
26
  from airflow.exceptions import AirflowException, AirflowFailException
27
- from airflow.hooks.base import BaseHook
28
- from airflow.models import BaseOperator, SkipMixin
27
+ from airflow.models import SkipMixin
29
28
  from airflow.providers.common.sql.hooks.handlers import fetch_all_handler, return_single_query_results
30
29
  from airflow.providers.common.sql.hooks.sql import DbApiHook
30
+ from airflow.providers.common.sql.version_compat import BaseOperator
31
31
  from airflow.utils.helpers import merge_dicts
32
32
 
33
+ try:
34
+ from airflow.sdk import BaseHook
35
+ except ImportError:
36
+ from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef]
37
+
33
38
  if TYPE_CHECKING:
34
39
  from airflow.providers.openlineage.extractors import OperatorLineage
35
40
  from airflow.utils.context import Context
@@ -16,14 +16,24 @@
16
16
  # under the License.
17
17
  from __future__ import annotations
18
18
 
19
- from collections.abc import Mapping, Sequence
19
+ from collections.abc import Callable, Mapping, Sequence
20
20
  from operator import itemgetter
21
- from typing import TYPE_CHECKING, Any, Callable
21
+ from typing import TYPE_CHECKING, Any
22
22
 
23
23
  from airflow.exceptions import AirflowException
24
- from airflow.hooks.base import BaseHook
25
24
  from airflow.providers.common.sql.hooks.sql import DbApiHook
26
- from airflow.sensors.base import BaseSensorOperator
25
+
26
+ try:
27
+ from airflow.sdk import BaseHook
28
+ except ImportError:
29
+ from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef]
30
+
31
+ from airflow.providers.common.sql.version_compat import AIRFLOW_V_3_0_PLUS
32
+
33
+ if AIRFLOW_V_3_0_PLUS:
34
+ from airflow.sdk import BaseSensorOperator
35
+ else:
36
+ from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef]
27
37
 
28
38
  if TYPE_CHECKING:
29
39
  from airflow.utils.context import Context
@@ -32,12 +32,18 @@ Definition of the public interface for airflow.providers.common.sql.src.airflow.
32
32
  isort:skip_file
33
33
  """
34
34
 
35
- from collections.abc import Mapping, Sequence
36
- from typing import Any, Callable
35
+ from collections.abc import Callable, Mapping, Sequence
36
+ from typing import Any
37
37
 
38
38
  from _typeshed import Incomplete as Incomplete
39
39
 
40
- from airflow.sensors.base import BaseSensorOperator as BaseSensorOperator
40
+ from airflow.providers.common.sql.version_compat import AIRFLOW_V_3_0_PLUS
41
+
42
+ if AIRFLOW_V_3_0_PLUS:
43
+ from airflow.sdk import BaseSensorOperator
44
+ else:
45
+ from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef]
46
+
41
47
  from airflow.utils.context import Context as Context
42
48
 
43
49
  class SqlSensor(BaseSensorOperator):
@@ -20,8 +20,12 @@ from __future__ import annotations
20
20
  from typing import TYPE_CHECKING
21
21
 
22
22
  from airflow.exceptions import AirflowException
23
- from airflow.hooks.base import BaseHook
24
23
  from airflow.providers.common.sql.hooks.sql import DbApiHook
24
+
25
+ try:
26
+ from airflow.sdk import BaseHook
27
+ except ImportError:
28
+ from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef]
25
29
  from airflow.triggers.base import BaseTrigger, TriggerEvent
26
30
 
27
31
  if TYPE_CHECKING:
@@ -0,0 +1,47 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+ #
18
+ # NOTE! THIS FILE IS COPIED MANUALLY IN OTHER PROVIDERS DELIBERATELY TO AVOID ADDING UNNECESSARY
19
+ # DEPENDENCIES BETWEEN PROVIDERS. IF YOU WANT TO ADD CONDITIONAL CODE IN YOUR PROVIDER THAT DEPENDS
20
+ # ON AIRFLOW VERSION, PLEASE COPY THIS FILE TO THE ROOT PACKAGE OF YOUR PROVIDER AND IMPORT
21
+ # THOSE CONSTANTS FROM IT RATHER THAN IMPORTING THEM FROM ANOTHER PROVIDER OR TEST CODE
22
+ #
23
+ from __future__ import annotations
24
+
25
+
26
+ def get_base_airflow_version_tuple() -> tuple[int, int, int]:
27
+ from packaging.version import Version
28
+
29
+ from airflow import __version__
30
+
31
+ airflow_version = Version(__version__)
32
+ return airflow_version.major, airflow_version.minor, airflow_version.micro
33
+
34
+
35
+ AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0)
36
+
37
+ if AIRFLOW_V_3_0_PLUS:
38
+ from airflow.sdk import BaseOperator, BaseSensorOperator
39
+ else:
40
+ from airflow.models import BaseOperator
41
+ from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef]
42
+
43
+ __all__ = [
44
+ "AIRFLOW_V_3_0_PLUS",
45
+ "BaseOperator",
46
+ "BaseSensorOperator",
47
+ ]
@@ -26,12 +26,16 @@ import pytest
26
26
  from pyodbc import Cursor
27
27
 
28
28
  from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG
29
- from airflow.hooks.base import BaseHook
30
29
  from airflow.models import Connection
31
30
  from airflow.providers.common.sql.dialects.dialect import Dialect
32
31
  from airflow.providers.common.sql.hooks.handlers import fetch_all_handler, fetch_one_handler
33
32
  from airflow.providers.common.sql.hooks.sql import DbApiHook
34
33
 
34
+ try:
35
+ from airflow.sdk import BaseHook
36
+ except ImportError:
37
+ from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef]
38
+
35
39
 
36
40
  class DbApiHookInProvider(DbApiHook):
37
41
  conn_name_attr = "test_conn_id"
@@ -33,7 +33,6 @@ from airflow.models import Connection
33
33
  from airflow.providers.common.sql.dialects.dialect import Dialect
34
34
  from airflow.providers.common.sql.hooks.handlers import fetch_all_handler
35
35
  from airflow.providers.common.sql.hooks.sql import DbApiHook, resolve_dialects
36
- from airflow.utils.session import provide_session
37
36
 
38
37
  from tests_common.test_utils.common_sql import mock_db_hook
39
38
  from tests_common.test_utils.providers import get_provider_min_airflow_version
@@ -49,15 +48,18 @@ class DBApiHookForTests(DbApiHook):
49
48
  get_conn = MagicMock(name="conn")
50
49
 
51
50
 
52
- @provide_session
53
51
  @pytest.fixture(autouse=True)
54
- def create_connection(session):
55
- conn = session.query(Connection).filter(Connection.conn_id == DEFAULT_CONN_ID).first()
56
- conn.host = HOST
57
- conn.login = None
58
- conn.password = PASSWORD
59
- conn.extra = None
60
- session.commit()
52
+ def create_connection(create_connection_without_db):
53
+ create_connection_without_db(
54
+ Connection(
55
+ conn_id=DEFAULT_CONN_ID,
56
+ conn_type="sqlite",
57
+ host=HOST,
58
+ login=None,
59
+ password=PASSWORD,
60
+ extra=None,
61
+ )
62
+ )
61
63
 
62
64
 
63
65
  def get_cursor_descriptions(fields: list[str]) -> list[tuple[str]]: