apache-airflow-providers-common-sql 1.19.0__py3-none-any.whl → 1.20.0__py3-none-any.whl

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.

@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "1.19.0"
32
+ __version__ = "1.20.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.8.0"
@@ -30,6 +30,7 @@ def get_provider_info():
30
30
  "state": "ready",
31
31
  "source-date-epoch": 1730012422,
32
32
  "versions": [
33
+ "1.20.0",
33
34
  "1.19.0",
34
35
  "1.18.0",
35
36
  "1.17.1",
@@ -67,7 +68,7 @@ def get_provider_info():
67
68
  "1.1.0",
68
69
  "1.0.0",
69
70
  ],
70
- "dependencies": ["apache-airflow>=2.8.0", "sqlparse>=0.4.2", "more-itertools>=9.0.0"],
71
+ "dependencies": ["apache-airflow>=2.8.0", "sqlparse>=0.5.1", "more-itertools>=9.0.0"],
71
72
  "additional-extras": [
72
73
  {
73
74
  "name": "pandas",
@@ -150,6 +150,8 @@ class DbApiHook(BaseHook):
150
150
  conn_name_attr: str
151
151
  # Override to have a default connection id for a particular dbHook
152
152
  default_conn_name = "default_conn_id"
153
+ # Override if this db doesn't support semicolons in SQL queries
154
+ strip_semicolon = False
153
155
  # Override if this db supports autocommit.
154
156
  supports_autocommit = False
155
157
  # Override if this db supports executemany.
@@ -369,14 +371,18 @@ class DbApiHook(BaseHook):
369
371
  return sql.strip().rstrip(";")
370
372
 
371
373
  @staticmethod
372
- def split_sql_string(sql: str) -> list[str]:
374
+ def split_sql_string(sql: str, strip_semicolon: bool = False) -> list[str]:
373
375
  """
374
376
  Split string into multiple SQL expressions.
375
377
 
376
378
  :param sql: SQL string potentially consisting of multiple expressions
379
+ :param strip_semicolon: whether to strip semicolon from SQL string
377
380
  :return: list of individual expressions
378
381
  """
379
- splits = sqlparse.split(sqlparse.format(sql, strip_comments=True))
382
+ splits = sqlparse.split(
383
+ sql=sqlparse.format(sql, strip_comments=True),
384
+ strip_semicolon=strip_semicolon,
385
+ )
380
386
  return [s for s in splits if s]
381
387
 
382
388
  @property
@@ -471,7 +477,10 @@ class DbApiHook(BaseHook):
471
477
 
472
478
  if isinstance(sql, str):
473
479
  if split_statements:
474
- sql_list: Iterable[str] = self.split_sql_string(sql)
480
+ sql_list: Iterable[str] = self.split_sql_string(
481
+ sql=sql,
482
+ strip_semicolon=self.strip_semicolon,
483
+ )
475
484
  else:
476
485
  sql_list = [sql] if sql.strip() else []
477
486
  else:
@@ -54,6 +54,7 @@ class ConnectorProtocol(Protocol):
54
54
  class DbApiHook(BaseHook):
55
55
  conn_name_attr: str
56
56
  default_conn_name: str
57
+ strip_semicolon: bool
57
58
  supports_autocommit: bool
58
59
  supports_executemany: bool
59
60
  connector: ConnectorProtocol | None
@@ -93,7 +94,7 @@ class DbApiHook(BaseHook):
93
94
  @staticmethod
94
95
  def strip_sql_string(sql: str) -> str: ...
95
96
  @staticmethod
96
- def split_sql_string(sql: str) -> list[str]: ...
97
+ def split_sql_string(sql: str, strip_semicolon: bool = False) -> list[str]: ...
97
98
  @property
98
99
  def last_description(self) -> Sequence[Sequence] | None: ...
99
100
  @overload
@@ -20,7 +20,7 @@ from __future__ import annotations
20
20
  import ast
21
21
  import re
22
22
  from functools import cached_property
23
- from typing import TYPE_CHECKING, Any, Callable, Iterable, Mapping, NoReturn, Sequence, SupportsAbs
23
+ from typing import TYPE_CHECKING, Any, Callable, ClassVar, Iterable, Mapping, NoReturn, Sequence, SupportsAbs
24
24
 
25
25
  from airflow.exceptions import AirflowException, AirflowFailException
26
26
  from airflow.hooks.base import BaseHook
@@ -224,7 +224,7 @@ class SQLExecuteQueryOperator(BaseSQLOperator):
224
224
 
225
225
  template_fields: Sequence[str] = ("sql", "parameters", *BaseSQLOperator.template_fields)
226
226
  template_ext: Sequence[str] = (".sql", ".json")
227
- template_fields_renderers = {"sql": "sql", "parameters": "json"}
227
+ template_fields_renderers: ClassVar[dict] = {"sql": "sql", "parameters": "json"}
228
228
  ui_color = "#cdaaed"
229
229
 
230
230
  def __init__(
@@ -428,7 +428,7 @@ class SQLColumnCheckOperator(BaseSQLOperator):
428
428
  """
429
429
 
430
430
  template_fields: Sequence[str] = ("table", "partition_clause", "sql", *BaseSQLOperator.template_fields)
431
- template_fields_renderers = {"sql": "sql"}
431
+ template_fields_renderers: ClassVar[dict] = {"sql": "sql"}
432
432
 
433
433
  sql_check_template = """
434
434
  SELECT '{column}' AS col_name, '{check}' AS check_type, {column}_{check} AS check_result
@@ -657,7 +657,7 @@ class SQLTableCheckOperator(BaseSQLOperator):
657
657
 
658
658
  template_fields: Sequence[str] = ("table", "partition_clause", "sql", *BaseSQLOperator.template_fields)
659
659
 
660
- template_fields_renderers = {"sql": "sql"}
660
+ template_fields_renderers: ClassVar[dict] = {"sql": "sql"}
661
661
 
662
662
  sql_check_template = """
663
663
  SELECT '{check_name}' AS check_name, MIN({check_name}) AS check_result
@@ -776,7 +776,7 @@ class SQLCheckOperator(BaseSQLOperator):
776
776
  ".hql",
777
777
  ".sql",
778
778
  )
779
- template_fields_renderers = {"sql": "sql"}
779
+ template_fields_renderers: ClassVar[dict] = {"sql": "sql"}
780
780
  ui_color = "#fff7e6"
781
781
 
782
782
  def __init__(
@@ -822,7 +822,7 @@ class SQLValueCheckOperator(BaseSQLOperator):
822
822
  ".hql",
823
823
  ".sql",
824
824
  )
825
- template_fields_renderers = {"sql": "sql"}
825
+ template_fields_renderers: ClassVar[dict] = {"sql": "sql"}
826
826
  ui_color = "#fff7e6"
827
827
 
828
828
  def __init__(
@@ -919,7 +919,7 @@ class SQLIntervalCheckOperator(BaseSQLOperator):
919
919
  ".hql",
920
920
  ".sql",
921
921
  )
922
- template_fields_renderers = {"sql1": "sql", "sql2": "sql"}
922
+ template_fields_renderers: ClassVar[dict] = {"sql1": "sql", "sql2": "sql"}
923
923
  ui_color = "#fff7e6"
924
924
 
925
925
  ratio_formulas = {
@@ -1052,7 +1052,7 @@ class SQLThresholdCheckOperator(BaseSQLOperator):
1052
1052
  ".hql",
1053
1053
  ".sql",
1054
1054
  )
1055
- template_fields_renderers = {"sql": "sql"}
1055
+ template_fields_renderers: ClassVar[dict] = {"sql": "sql"}
1056
1056
 
1057
1057
  def __init__(
1058
1058
  self,
@@ -1147,7 +1147,7 @@ class BranchSQLOperator(BaseSQLOperator, SkipMixin):
1147
1147
 
1148
1148
  template_fields: Sequence[str] = ("sql", *BaseSQLOperator.template_fields)
1149
1149
  template_ext: Sequence[str] = (".sql",)
1150
- template_fields_renderers = {"sql": "sql"}
1150
+ template_fields_renderers: ClassVar[dict] = {"sql": "sql"}
1151
1151
  ui_color = "#a22034"
1152
1152
  ui_fgcolor = "#F7F7F7"
1153
1153
 
@@ -36,7 +36,7 @@ from airflow.models import BaseOperator as BaseOperator, SkipMixin as SkipMixin
36
36
  from airflow.providers.common.sql.hooks.sql import DbApiHook as DbApiHook
37
37
  from airflow.providers.openlineage.extractors import OperatorLineage as OperatorLineage
38
38
  from airflow.utils.context import Context as Context
39
- from typing import Any, Callable, Iterable, Mapping, Sequence, SupportsAbs
39
+ from typing import Any, Callable, ClassVar, Iterable, Mapping, Sequence, SupportsAbs
40
40
 
41
41
  def parse_boolean(val: str) -> str | bool: ...
42
42
 
@@ -62,7 +62,7 @@ class SQLExecuteQueryOperator(BaseSQLOperator):
62
62
  def _raise_exception(self, exception_string: str) -> Incomplete: ...
63
63
  template_fields: Sequence[str]
64
64
  template_ext: Sequence[str]
65
- template_fields_renderers: Incomplete
65
+ template_fields_renderers: ClassVar[dict]
66
66
  ui_color: str
67
67
  sql: Incomplete
68
68
  autocommit: Incomplete
@@ -92,7 +92,7 @@ class SQLExecuteQueryOperator(BaseSQLOperator):
92
92
 
93
93
  class SQLColumnCheckOperator(BaseSQLOperator):
94
94
  template_fields: Sequence[str]
95
- template_fields_renderers: Incomplete
95
+ template_fields_renderers: ClassVar[dict]
96
96
  sql_check_template: str
97
97
  column_checks: Incomplete
98
98
  table: Incomplete
@@ -115,7 +115,7 @@ class SQLColumnCheckOperator(BaseSQLOperator):
115
115
 
116
116
  class SQLTableCheckOperator(BaseSQLOperator):
117
117
  template_fields: Sequence[str]
118
- template_fields_renderers: Incomplete
118
+ template_fields_renderers: ClassVar[dict]
119
119
  sql_check_template: str
120
120
  table: Incomplete
121
121
  checks: Incomplete
@@ -136,7 +136,7 @@ class SQLTableCheckOperator(BaseSQLOperator):
136
136
  class SQLCheckOperator(BaseSQLOperator):
137
137
  template_fields: Sequence[str]
138
138
  template_ext: Sequence[str]
139
- template_fields_renderers: Incomplete
139
+ template_fields_renderers: ClassVar[dict]
140
140
  ui_color: str
141
141
  sql: Incomplete
142
142
  parameters: Incomplete
@@ -155,7 +155,7 @@ class SQLValueCheckOperator(BaseSQLOperator):
155
155
  __mapper_args__: Incomplete
156
156
  template_fields: Sequence[str]
157
157
  template_ext: Sequence[str]
158
- template_fields_renderers: Incomplete
158
+ template_fields_renderers: ClassVar[dict]
159
159
  ui_color: str
160
160
  sql: Incomplete
161
161
  pass_value: Incomplete
@@ -178,7 +178,7 @@ class SQLIntervalCheckOperator(BaseSQLOperator):
178
178
  __mapper_args__: Incomplete
179
179
  template_fields: Sequence[str]
180
180
  template_ext: Sequence[str]
181
- template_fields_renderers: Incomplete
181
+ template_fields_renderers: ClassVar[dict]
182
182
  ui_color: str
183
183
  ratio_formulas: Incomplete
184
184
  ratio_formula: Incomplete
@@ -208,7 +208,7 @@ class SQLIntervalCheckOperator(BaseSQLOperator):
208
208
  class SQLThresholdCheckOperator(BaseSQLOperator):
209
209
  template_fields: Sequence[str]
210
210
  template_ext: Sequence[str]
211
- template_fields_renderers: Incomplete
211
+ template_fields_renderers: ClassVar[dict]
212
212
  sql: Incomplete
213
213
  min_threshold: Incomplete
214
214
  max_threshold: Incomplete
@@ -228,7 +228,7 @@ class SQLThresholdCheckOperator(BaseSQLOperator):
228
228
  class BranchSQLOperator(BaseSQLOperator, SkipMixin):
229
229
  template_fields: Sequence[str]
230
230
  template_ext: Sequence[str]
231
- template_fields_renderers: Incomplete
231
+ template_fields_renderers: ClassVar[dict]
232
232
  ui_color: str
233
233
  ui_fgcolor: str
234
234
  sql: Incomplete
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: apache-airflow-providers-common-sql
3
- Version: 1.19.0
3
+ Version: 1.20.0
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>
@@ -22,13 +22,13 @@ Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Topic :: System :: Monitoring
23
23
  Requires-Dist: apache-airflow>=2.8.0
24
24
  Requires-Dist: more-itertools>=9.0.0
25
- Requires-Dist: sqlparse>=0.4.2
25
+ Requires-Dist: sqlparse>=0.5.1
26
26
  Requires-Dist: apache-airflow-providers-openlineage ; extra == "openlineage"
27
27
  Requires-Dist: pandas>=2.1.2,<2.2 ; extra == "pandas" and (python_version>="3.9")
28
28
  Requires-Dist: pandas>=1.5.3,<2.2 ; extra == "pandas" and (python_version<"3.9")
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-sql/1.19.0/changelog.html
31
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.19.0
30
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.20.0/changelog.html
31
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.20.0
32
32
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
33
33
  Project-URL: Source Code, https://github.com/apache/airflow
34
34
  Project-URL: Twitter, https://twitter.com/ApacheAirflow
@@ -80,7 +80,7 @@ Provides-Extra: pandas
80
80
 
81
81
  Package ``apache-airflow-providers-common-sql``
82
82
 
83
- Release: ``1.19.0``
83
+ Release: ``1.20.0``
84
84
 
85
85
 
86
86
  `Common SQL Provider <https://en.wikipedia.org/wiki/SQL>`__
@@ -93,7 +93,7 @@ This is a provider package for ``common.sql`` provider. All classes for this pro
93
93
  are in ``airflow.providers.common.sql`` python package.
94
94
 
95
95
  You can find package information and changelog for the provider
96
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.19.0/>`_.
96
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.20.0/>`_.
97
97
 
98
98
  Installation
99
99
  ------------
@@ -111,7 +111,7 @@ Requirements
111
111
  PIP package Version required
112
112
  ================== ==================
113
113
  ``apache-airflow`` ``>=2.8.0``
114
- ``sqlparse`` ``>=0.4.2``
114
+ ``sqlparse`` ``>=0.5.1``
115
115
  ``more-itertools`` ``>=9.0.0``
116
116
  ================== ==================
117
117
 
@@ -135,4 +135,4 @@ Dependent package
135
135
  ============================================================================================================== ===============
136
136
 
137
137
  The changelog for the provider package can be found in the
138
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.19.0/changelog.html>`_.
138
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.20.0/changelog.html>`_.
@@ -1,19 +1,19 @@
1
1
  airflow/providers/common/sql/LICENSE,sha256=FFb4jd2AXnOOf7XLP04pQW6jbdhG49TxlGY6fFpCV1Y,13609
2
2
  airflow/providers/common/sql/README_API.md,sha256=CxhaS8EedZ4dcbLUPC4-GLCMaY3OH96oHxXttUGU06E,5932
3
- airflow/providers/common/sql/__init__.py,sha256=Lt9f9Y4TRs8R4degfGTNMLaJ9UouMAatWgQxxe_pA5M,1498
4
- airflow/providers/common/sql/get_provider_info.py,sha256=UJMFz7XHr9N8c1rfr5qby71nh74L90ERZbYt57dDIBo,3387
3
+ airflow/providers/common/sql/__init__.py,sha256=Aylh6G8o4C_uXE9dxyD0Bb4KdcsNz1VQrTsfwt9WlPA,1498
4
+ airflow/providers/common/sql/get_provider_info.py,sha256=_sSA2HGwIdVzzerTlWq7iM_DcAVZdgR-Mg-0jGPh-hA,3409
5
5
  airflow/providers/common/sql/doc/adr/0001-record-architecture-decisions.md,sha256=TfANqrzoFto9PMOMza3MitIkXHGLx2kY_BhhF-N0_ow,1675
6
6
  airflow/providers/common/sql/doc/adr/0002-return-common-data-structure-from-dbapihook-derived-hooks.md,sha256=ze5w9IVS-HkUwdZvPW8_JaJaVwel7-N6XdEVN4pTuCE,8457
7
7
  airflow/providers/common/sql/hooks/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
8
- airflow/providers/common/sql/hooks/sql.py,sha256=3XAyEjbCL7FD7VSMu623tGQgTjnFdKH3_GmqHzRloqA,32629
9
- airflow/providers/common/sql/hooks/sql.pyi,sha256=-h5-2yKgXZMmuXzClYiM1VTTdbdDHD6N3ZBC9dL1Twc,5953
8
+ airflow/providers/common/sql/hooks/sql.py,sha256=1FwVmPnhqbhrt3SZjrmUDFMjtM0eE8Q1dWfAWysCql8,33004
9
+ airflow/providers/common/sql/hooks/sql.pyi,sha256=OTtj9D5LE8mMHCZnN4yTStWTn8Iz5XpEsTiFpUgt10w,6010
10
10
  airflow/providers/common/sql/operators/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
11
- airflow/providers/common/sql/operators/sql.py,sha256=KzJR2npRO93nMPaG0kxdeRKSrX7LRCmoLD7ShT8d_nw,48055
12
- airflow/providers/common/sql/operators/sql.pyi,sha256=ae7xKolM49nSaAfvcH_J9HpIyVSgCj0-EC_szCFkqYc,8164
11
+ airflow/providers/common/sql/operators/sql.py,sha256=SQ-jGNPHCw7qohR20DB0W9l3kmS6KEiFRsdQM3Kf-E8,48193
12
+ airflow/providers/common/sql/operators/sql.pyi,sha256=xCPJN4IQffaPc4-SU1pcLkYHDF4hr1c_L2YhhMpqqqg,8206
13
13
  airflow/providers/common/sql/sensors/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
14
14
  airflow/providers/common/sql/sensors/sql.py,sha256=UYOQficcLJlumJcZwKIBYMcnCe5PkGPiU2ZaYta858Q,5492
15
15
  airflow/providers/common/sql/sensors/sql.pyi,sha256=3agRcNF_FT3_6QnD-sZOI8pV0lBjEalOAIKRINfQ0MI,2467
16
- apache_airflow_providers_common_sql-1.19.0.dist-info/entry_points.txt,sha256=h8UXRp2crPuGmYVYRM5oe168qIh7g-4t2QQbVMizKjI,106
17
- apache_airflow_providers_common_sql-1.19.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
18
- apache_airflow_providers_common_sql-1.19.0.dist-info/METADATA,sha256=8WwQuKYCFEUKy-r__7WOIL4mmdmYI6tM0fIAFXbq7nM,6163
19
- apache_airflow_providers_common_sql-1.19.0.dist-info/RECORD,,
16
+ apache_airflow_providers_common_sql-1.20.0.dist-info/entry_points.txt,sha256=h8UXRp2crPuGmYVYRM5oe168qIh7g-4t2QQbVMizKjI,106
17
+ apache_airflow_providers_common_sql-1.20.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
18
+ apache_airflow_providers_common_sql-1.20.0.dist-info/METADATA,sha256=KspNMaXBjpr0HRXHN6S36XzSxJo7gBKe9e0LWr4l93I,6163
19
+ apache_airflow_providers_common_sql-1.20.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: flit 3.9.0
2
+ Generator: flit 3.10.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any