apache-airflow-providers-exasol 4.8.2rc1__py3-none-any.whl → 4.8.3__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-exasol might be problematic. Click here for more details.
- airflow/providers/exasol/__init__.py +1 -1
- airflow/providers/exasol/hooks/exasol.py +44 -1
- {apache_airflow_providers_exasol-4.8.2rc1.dist-info → apache_airflow_providers_exasol-4.8.3.dist-info}/METADATA +9 -10
- apache_airflow_providers_exasol-4.8.3.dist-info/RECORD +11 -0
- apache_airflow_providers_exasol-4.8.2rc1.dist-info/RECORD +0 -11
- {apache_airflow_providers_exasol-4.8.2rc1.dist-info → apache_airflow_providers_exasol-4.8.3.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_exasol-4.8.2rc1.dist-info → apache_airflow_providers_exasol-4.8.3.dist-info}/entry_points.txt +0 -0
|
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
|
29
29
|
|
|
30
30
|
__all__ = ["__version__"]
|
|
31
31
|
|
|
32
|
-
__version__ = "4.8.
|
|
32
|
+
__version__ = "4.8.3"
|
|
33
33
|
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
|
35
35
|
"2.10.0"
|
|
@@ -24,6 +24,7 @@ from typing import TYPE_CHECKING, Any, TypeVar, overload
|
|
|
24
24
|
import pyexasol
|
|
25
25
|
from deprecated import deprecated
|
|
26
26
|
from pyexasol import ExaConnection, ExaStatement
|
|
27
|
+
from sqlalchemy.engine import URL
|
|
27
28
|
|
|
28
29
|
from airflow.exceptions import AirflowProviderDeprecationWarning
|
|
29
30
|
from airflow.providers.common.sql.hooks.handlers import return_single_query_results
|
|
@@ -53,10 +54,12 @@ class ExasolHook(DbApiHook):
|
|
|
53
54
|
conn_type = "exasol"
|
|
54
55
|
hook_name = "Exasol"
|
|
55
56
|
supports_autocommit = True
|
|
57
|
+
DEFAULT_SQLALCHEMY_SCHEME = "exa+websocket" # sqlalchemy-exasol dialect
|
|
56
58
|
|
|
57
|
-
def __init__(self, *args, **kwargs) -> None:
|
|
59
|
+
def __init__(self, *args, sqlalchemy_scheme: str | None = None, **kwargs) -> None:
|
|
58
60
|
super().__init__(*args, **kwargs)
|
|
59
61
|
self.schema = kwargs.pop("schema", None)
|
|
62
|
+
self._sqlalchemy_scheme = sqlalchemy_scheme
|
|
60
63
|
|
|
61
64
|
def get_conn(self) -> ExaConnection:
|
|
62
65
|
conn = self.get_connection(self.get_conn_id())
|
|
@@ -74,6 +77,46 @@ class ExasolHook(DbApiHook):
|
|
|
74
77
|
conn = pyexasol.connect(**conn_args)
|
|
75
78
|
return conn
|
|
76
79
|
|
|
80
|
+
@property
|
|
81
|
+
def sqlalchemy_scheme(self) -> str:
|
|
82
|
+
"""Sqlalchemy scheme either from constructor, connection extras or default."""
|
|
83
|
+
extra_scheme = self.connection is not None and self.connection_extra_lower.get("sqlalchemy_scheme")
|
|
84
|
+
sqlalchemy_scheme = self._sqlalchemy_scheme or extra_scheme or self.DEFAULT_SQLALCHEMY_SCHEME
|
|
85
|
+
if sqlalchemy_scheme not in ["exa+websocket", "exa+pyodbc", "exa+turbodbc"]:
|
|
86
|
+
raise ValueError(
|
|
87
|
+
f"sqlalchemy_scheme in connection extra should be one of 'exa+websocket', 'exa+pyodbc' or 'exa+turbodbc', "
|
|
88
|
+
f"but got '{sqlalchemy_scheme}'. See https://github.com/exasol/sqlalchemy-exasol?tab=readme-ov-file#using-sqlalchemy-with-exasol-db for more details."
|
|
89
|
+
)
|
|
90
|
+
return sqlalchemy_scheme
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def sqlalchemy_url(self) -> URL:
|
|
94
|
+
"""
|
|
95
|
+
Return a Sqlalchemy.engine.URL object from the connection.
|
|
96
|
+
|
|
97
|
+
:return: the extracted sqlalchemy.engine.URL object.
|
|
98
|
+
"""
|
|
99
|
+
connection = self.connection
|
|
100
|
+
query = connection.extra_dejson
|
|
101
|
+
query = {k: v for k, v in query.items() if k.lower() != "sqlalchemy_scheme"}
|
|
102
|
+
return URL.create(
|
|
103
|
+
drivername=self.sqlalchemy_scheme,
|
|
104
|
+
username=connection.login,
|
|
105
|
+
password=connection.password,
|
|
106
|
+
host=connection.host,
|
|
107
|
+
port=connection.port,
|
|
108
|
+
database=self.schema or connection.schema,
|
|
109
|
+
query=query,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def get_uri(self) -> str:
|
|
113
|
+
"""
|
|
114
|
+
Extract the URI from the connection.
|
|
115
|
+
|
|
116
|
+
:return: the extracted uri.
|
|
117
|
+
"""
|
|
118
|
+
return self.sqlalchemy_url.render_as_string(hide_password=False)
|
|
119
|
+
|
|
77
120
|
def _get_pandas_df(
|
|
78
121
|
self, sql, parameters: Iterable | Mapping[str, Any] | None = None, **kwargs
|
|
79
122
|
) -> pd.DataFrame:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apache-airflow-providers-exasol
|
|
3
|
-
Version: 4.8.
|
|
3
|
+
Version: 4.8.3
|
|
4
4
|
Summary: Provider package apache-airflow-providers-exasol for Apache Airflow
|
|
5
5
|
Keywords: airflow-provider,exasol,airflow,integration
|
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
|
@@ -20,14 +20,14 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Topic :: System :: Monitoring
|
|
23
|
-
Requires-Dist: apache-airflow>=2.10.
|
|
24
|
-
Requires-Dist: apache-airflow-providers-common-sql>=1.26.
|
|
23
|
+
Requires-Dist: apache-airflow>=2.10.0
|
|
24
|
+
Requires-Dist: apache-airflow-providers-common-sql>=1.26.0
|
|
25
25
|
Requires-Dist: pyexasol>=0.26.0
|
|
26
26
|
Requires-Dist: pandas>=2.1.2; python_version <"3.13"
|
|
27
27
|
Requires-Dist: pandas>=2.2.3; python_version >="3.13"
|
|
28
28
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
|
29
|
-
Project-URL: Changelog, https://airflow.
|
|
30
|
-
Project-URL: Documentation, https://airflow.
|
|
29
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-exasol/4.8.3/changelog.html
|
|
30
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-exasol/4.8.3
|
|
31
31
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
|
32
32
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
|
33
33
|
Project-URL: Source Code, https://github.com/apache/airflow
|
|
@@ -58,9 +58,8 @@ Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
|
|
|
58
58
|
|
|
59
59
|
Package ``apache-airflow-providers-exasol``
|
|
60
60
|
|
|
61
|
-
Release: ``4.8.
|
|
61
|
+
Release: ``4.8.3``
|
|
62
62
|
|
|
63
|
-
Release Date: ``|PypiReleaseDate|``
|
|
64
63
|
|
|
65
64
|
`Exasol <https://www.exasol.com/>`__
|
|
66
65
|
|
|
@@ -72,12 +71,12 @@ This is a provider package for ``exasol`` provider. All classes for this provide
|
|
|
72
71
|
are in ``airflow.providers.exasol`` python package.
|
|
73
72
|
|
|
74
73
|
You can find package information and changelog for the provider
|
|
75
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-exasol/4.8.
|
|
74
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-exasol/4.8.3/>`_.
|
|
76
75
|
|
|
77
76
|
Installation
|
|
78
77
|
------------
|
|
79
78
|
|
|
80
|
-
You can install this package on top of an existing Airflow
|
|
79
|
+
You can install this package on top of an existing Airflow installation (see ``Requirements`` below
|
|
81
80
|
for the minimum Airflow version supported) via
|
|
82
81
|
``pip install apache-airflow-providers-exasol``
|
|
83
82
|
|
|
@@ -116,5 +115,5 @@ Dependent package
|
|
|
116
115
|
============================================================================================================ ==============
|
|
117
116
|
|
|
118
117
|
The changelog for the provider package can be found in the
|
|
119
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-exasol/4.8.
|
|
118
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-exasol/4.8.3/changelog.html>`_.
|
|
120
119
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
airflow/providers/exasol/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
|
|
2
|
+
airflow/providers/exasol/__init__.py,sha256=lT_eVcX_xGi9aBt2QKp3ok1GCXEHH20W40bAJW9u8cM,1495
|
|
3
|
+
airflow/providers/exasol/get_provider_info.py,sha256=uupz_ak2p7d1WTyVzKAFgaWsvNlCMYuMT892FXqytWA,1980
|
|
4
|
+
airflow/providers/exasol/hooks/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
5
|
+
airflow/providers/exasol/hooks/exasol.py,sha256=O2AZUERAD9Jxtt0_i1uN-LT_dNpvtih6gP4mpZBPMYA,14768
|
|
6
|
+
airflow/providers/exasol/operators/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
7
|
+
airflow/providers/exasol/operators/exasol.py,sha256=A4P3Qo65RJzrSVEgSNwPbJ2BSA9OsitmFm8kutyxVfw,2500
|
|
8
|
+
apache_airflow_providers_exasol-4.8.3.dist-info/entry_points.txt,sha256=8pvKoFs3wCXkl3x0a5dzqvTonx17I8zD8oodM_M386Q,102
|
|
9
|
+
apache_airflow_providers_exasol-4.8.3.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
10
|
+
apache_airflow_providers_exasol-4.8.3.dist-info/METADATA,sha256=whQBES0jSDha54nXPu8CYx-R8ARVRcj6nTxWOxP-HWc,5427
|
|
11
|
+
apache_airflow_providers_exasol-4.8.3.dist-info/RECORD,,
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
airflow/providers/exasol/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
|
|
2
|
-
airflow/providers/exasol/__init__.py,sha256=D_gu1Fw81Rv2BJuOoaF_8tg4YRj5Yrj1J62OdSP2W-k,1495
|
|
3
|
-
airflow/providers/exasol/get_provider_info.py,sha256=uupz_ak2p7d1WTyVzKAFgaWsvNlCMYuMT892FXqytWA,1980
|
|
4
|
-
airflow/providers/exasol/hooks/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
5
|
-
airflow/providers/exasol/hooks/exasol.py,sha256=Rw6t3gMg52QFSKa_A3Ta4X_vnqJRfiPyBUtfQMuR6W0,12872
|
|
6
|
-
airflow/providers/exasol/operators/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
|
7
|
-
airflow/providers/exasol/operators/exasol.py,sha256=A4P3Qo65RJzrSVEgSNwPbJ2BSA9OsitmFm8kutyxVfw,2500
|
|
8
|
-
apache_airflow_providers_exasol-4.8.2rc1.dist-info/entry_points.txt,sha256=8pvKoFs3wCXkl3x0a5dzqvTonx17I8zD8oodM_M386Q,102
|
|
9
|
-
apache_airflow_providers_exasol-4.8.2rc1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
10
|
-
apache_airflow_providers_exasol-4.8.2rc1.dist-info/METADATA,sha256=wdhuSAdOBEk4ROV_cJpEvIa4xKGkjEre23-52UjC9q4,5488
|
|
11
|
-
apache_airflow_providers_exasol-4.8.2rc1.dist-info/RECORD,,
|
|
File without changes
|