Skip to content

Commit c37e6eb

Browse files
authored
Update Exasol provider dependencies and deprecate get_pandas_df method (#50017)
1 parent 59d592f commit c37e6eb

File tree

4 files changed

+53
-3
lines changed

4 files changed

+53
-3
lines changed

providers/exasol/README.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Requirements
5454
PIP package Version required
5555
======================================= ==================
5656
``apache-airflow`` ``>=2.10.0``
57-
``apache-airflow-providers-common-sql`` ``>=1.21.0``
57+
``apache-airflow-providers-common-sql`` ``>=1.26.0``
5858
``pyexasol`` ``>=0.5.1``
5959
``pandas`` ``>=2.1.2,<2.2``
6060
======================================= ==================

providers/exasol/pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ requires-python = "~=3.9"
5858
# After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
5959
dependencies = [
6060
"apache-airflow>=2.10.0",
61-
"apache-airflow-providers-common-sql>=1.21.0",
61+
"apache-airflow-providers-common-sql>=1.26.0",
6262
"pyexasol>=0.5.1",
6363
# In pandas 2.2 minimal version of the sqlalchemy is 2.0
6464
# https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies

providers/exasol/src/airflow/providers/exasol/hooks/exasol.py

+31-1
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
from typing import TYPE_CHECKING, Any, Callable, TypeVar, overload
2323

2424
import pyexasol
25+
from deprecated import deprecated
2526
from pyexasol import ExaConnection, ExaStatement
2627

28+
from airflow.exceptions import AirflowProviderDeprecationWarning
2729
from airflow.providers.common.sql.hooks.handlers import return_single_query_results
2830
from airflow.providers.common.sql.hooks.sql import DbApiHook
2931

@@ -73,7 +75,7 @@ def get_conn(self) -> ExaConnection:
7375
conn = pyexasol.connect(**conn_args)
7476
return conn
7577

76-
def get_pandas_df(
78+
def _get_pandas_df(
7779
self, sql, parameters: Iterable | Mapping[str, Any] | None = None, **kwargs
7880
) -> pd.DataFrame:
7981
"""
@@ -90,6 +92,34 @@ def get_pandas_df(
9092
df = conn.export_to_pandas(sql, query_params=parameters, **kwargs)
9193
return df
9294

95+
@deprecated(
96+
reason="Replaced by function `get_df`.",
97+
category=AirflowProviderDeprecationWarning,
98+
action="ignore",
99+
)
100+
def get_pandas_df(
101+
self,
102+
sql,
103+
parameters: list | tuple | Mapping[str, Any] | None = None,
104+
**kwargs,
105+
) -> pd.DataFrame:
106+
"""
107+
Execute the sql and returns a pandas dataframe.
108+
109+
:param sql: the sql statement to be executed (str) or a list of sql statements to execute
110+
:param parameters: The parameters to render the SQL query with.
111+
:param kwargs: (optional) passed into pandas.io.sql.read_sql method
112+
"""
113+
return self._get_pandas_df(sql, parameters, **kwargs)
114+
115+
def _get_polars_df(
116+
self,
117+
sql,
118+
parameters: list | tuple | Mapping[str, Any] | None = None,
119+
**kwargs,
120+
):
121+
raise NotImplementedError("Polars is not supported for Exasol")
122+
93123
def get_records(
94124
self,
95125
sql: str | list[str],

providers/exasol/tests/unit/exasol/hooks/test_exasol.py

+20
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,23 @@ def test_export_to_file(self):
171171
query_params=query_params,
172172
export_params=export_params,
173173
)
174+
175+
def test_get_df_pandas(self):
176+
statement = "SQL"
177+
column = "col"
178+
result_sets = [("row1",), ("row2",)]
179+
mock_df = mock.MagicMock()
180+
mock_df.columns = [column]
181+
mock_df.values.tolist.return_value = result_sets
182+
self.conn.export_to_pandas.return_value = mock_df
183+
184+
df = self.db_hook.get_df(statement, df_type="pandas")
185+
186+
assert column == df.columns[0]
187+
188+
assert result_sets[0][0] == df.values.tolist()[0][0]
189+
assert result_sets[1][0] == df.values.tolist()[1][0]
190+
191+
def test_get_df_polars(self):
192+
with pytest.raises(NotImplementedError):
193+
self.db_hook.get_df("SQL", df_type="polars")

0 commit comments

Comments
 (0)