aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py
diff options
context:
space:
mode:
authorrobot-piglet <robot-piglet@yandex-team.com>2024-11-07 12:23:36 +0300
committerrobot-piglet <robot-piglet@yandex-team.com>2024-11-07 13:24:08 +0300
commita454f5fbc2c79ea1f8e9ca584d888a57f535c8f3 (patch)
treef6f4c048c1a1388d005bcf5996285ddcaedb1ba7 /contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py
parenta74a901e7cd8f6eeab88e728e48c22e0de2f9a0f (diff)
downloadydb-a454f5fbc2c79ea1f8e9ca584d888a57f535c8f3.tar.gz
Intermediate changes
commit_hash:8dfe46ba3b02673d0e6a35fdf824ab2c98255393
Diffstat (limited to 'contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py')
-rw-r--r--contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py
index 001c578b26..33d6b9364c 100644
--- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py
+++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py
@@ -31,6 +31,7 @@ from clickhouse_connect.driver.transform import NativeTransform
logger = logging.getLogger(__name__)
columns_only_re = re.compile(r'LIMIT 0\s*$', re.IGNORECASE)
+ex_header = 'X-ClickHouse-Exception-Code'
# pylint: disable=too-many-instance-attributes
@@ -346,7 +347,7 @@ class HttpClient(Client):
params.update(self._validate_settings(settings or {}))
method = 'POST' if payload or fields else 'GET'
- response = self._raw_request(payload, params, headers, method, fields=fields)
+ response = self._raw_request(payload, params, headers, method, fields=fields, server_wait=False)
if response.data:
try:
result = response.data.decode()[:-1].split('\t')
@@ -369,10 +370,14 @@ class HttpClient(Client):
finally:
response.close()
- err_str = f'HTTPDriver for {self.url} returned response code {response.status})'
+ err_str = f'HTTPDriver for {self.url} returned response code {response.status}'
+ err_code = response.headers.get(ex_header)
+ if err_code:
+ err_str = f'HTTPDriver for {self.url} received ClickHouse error code {err_code}'
if err_content:
err_msg = common.format_error(err_content.decode(errors='backslashreplace'))
- err_str = f'{err_str}\n {err_msg}'
+ if err_msg.startswith('Code'):
+ err_str = f'{err_str}\n {err_msg}'
else:
err_str = 'The ClickHouse server returned an error.'
@@ -444,7 +449,7 @@ class HttpClient(Client):
finally:
if query_session:
self._active_session = None # Make sure we always clear this
- if 200 <= response.status < 300:
+ if 200 <= response.status < 300 and not response.headers.get(ex_header):
return response
if response.status in (429, 503, 504):
if attempts > retries: