|
28 | 28 | from typing import Any, Dict, List, NamedTuple, Optional # NOQA for mypy types
|
29 | 29 | from urllib.parse import urlparse
|
30 | 30 |
|
| 31 | +from requests.exceptions import RequestException |
| 32 | + |
31 | 33 | try:
|
32 | 34 | from zoneinfo import ZoneInfo
|
33 | 35 | except ModuleNotFoundError:
|
@@ -157,6 +159,7 @@ def __init__(
|
157 | 159 | legacy_prepared_statements=None,
|
158 | 160 | roles=None,
|
159 | 161 | timezone=None,
|
| 162 | + defer_connect=True, |
160 | 163 | ):
|
161 | 164 | # Automatically assign http_schema, port based on hostname
|
162 | 165 | parsed_host = urlparse(host, allow_fragments=False)
|
@@ -201,6 +204,36 @@ def __init__(
|
201 | 204 | self.legacy_primitive_types = legacy_primitive_types
|
202 | 205 | self.legacy_prepared_statements = legacy_prepared_statements
|
203 | 206 |
|
| 207 | + if not defer_connect: |
| 208 | + self.connect() |
| 209 | + |
| 210 | + def connect(self) -> None: |
| 211 | + connection_test_request = trino.client.TrinoRequest( |
| 212 | + self.host, |
| 213 | + self.port, |
| 214 | + self._client_session, |
| 215 | + self._http_session, |
| 216 | + self.http_scheme, |
| 217 | + self.auth, |
| 218 | + self.redirect_handler, |
| 219 | + self.max_attempts, |
| 220 | + self.request_timeout, |
| 221 | + verify=self._http_session.verify, |
| 222 | + ) |
| 223 | + try: |
| 224 | + test_response = connection_test_request.post("<not-going-to-be-executed>") |
| 225 | + if not test_response.ok: |
| 226 | + raise trino.exceptions.TrinoConnectionError( |
| 227 | + "error {}{}".format( |
| 228 | + test_response.status_code, |
| 229 | + ": {}".format(test_response.content) |
| 230 | + if test_response.content |
| 231 | + else "", |
| 232 | + ) |
| 233 | + ) |
| 234 | + except RequestException as e: |
| 235 | + raise trino.exceptions.TrinoConnectionError("connection failed: {}".format(e)) |
| 236 | + |
204 | 237 | @property
|
205 | 238 | def isolation_level(self):
|
206 | 239 | return self._isolation_level
|
|
0 commit comments