|
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:
|
@@ -158,6 +160,7 @@ def __init__(
|
158 | 160 | legacy_prepared_statements=None,
|
159 | 161 | roles=None,
|
160 | 162 | timezone=None,
|
| 163 | + defer_connect=True, |
161 | 164 | ):
|
162 | 165 | # Automatically assign http_schema, port based on hostname
|
163 | 166 | parsed_host = urlparse(host, allow_fragments=False)
|
@@ -203,6 +206,36 @@ def __init__(
|
203 | 206 | self.legacy_primitive_types = legacy_primitive_types
|
204 | 207 | self.legacy_prepared_statements = legacy_prepared_statements
|
205 | 208 |
|
| 209 | + if not defer_connect: |
| 210 | + self.connect() |
| 211 | + |
| 212 | + def connect(self) -> None: |
| 213 | + connection_test_request = trino.client.TrinoRequest( |
| 214 | + self.host, |
| 215 | + self.port, |
| 216 | + self._client_session, |
| 217 | + self._http_session, |
| 218 | + self.http_scheme, |
| 219 | + self.auth, |
| 220 | + self.redirect_handler, |
| 221 | + self.max_attempts, |
| 222 | + self.request_timeout, |
| 223 | + verify=self._http_session.verify, |
| 224 | + ) |
| 225 | + try: |
| 226 | + test_response = connection_test_request.post("<not-going-to-be-executed>") |
| 227 | + if not test_response.ok: |
| 228 | + raise trino.exceptions.TrinoConnectionError( |
| 229 | + "error {}{}".format( |
| 230 | + test_response.status_code, |
| 231 | + ": {}".format(test_response.content) |
| 232 | + if test_response.content |
| 233 | + else "", |
| 234 | + ) |
| 235 | + ) |
| 236 | + except RequestException as e: |
| 237 | + raise trino.exceptions.TrinoConnectionError("connection failed: {}".format(e)) |
| 238 | + |
206 | 239 | @property
|
207 | 240 | def isolation_level(self):
|
208 | 241 | return self._isolation_level
|
|
0 commit comments