databricks-sql-connector 3.7.2__tar.gz → 3.7.4__tar.gz
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.
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/CHANGELOG.md +10 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/PKG-INFO +1 -1
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/pyproject.toml +1 -1
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/__init__.py +1 -1
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/retry.py +16 -10
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/thrift_http_client.py +6 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/client.py +4 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/thrift_backend.py +8 -2
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/LICENSE +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/README.md +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/auth.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/authenticators.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/endpoint.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/oauth.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/oauth_http_handler.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/cloudfetch/download_manager.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/cloudfetch/downloader.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/exc.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/experimental/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/experimental/oauth_persistence.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/parameters/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/parameters/native.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/parameters/py.typed +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/py.typed +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/thrift_api/TCLIService/TCLIService-remote +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/thrift_api/TCLIService/TCLIService.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/thrift_api/TCLIService/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/thrift_api/TCLIService/constants.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/thrift_api/TCLIService/ttypes.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/thrift_api/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/types.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/utils.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/README.sqlalchemy.md +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/README.tests.md +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/_ddl.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/_parse.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/_types.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/base.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/py.typed +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/requirements.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/setup.cfg +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/_extra.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/_future.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/_regression.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/_unsupported.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/conftest.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/overrides/_componentreflectiontest.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/overrides/_ctetest.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test/test_suite.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test_local/__init__.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test_local/conftest.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test_local/e2e/MOCK_DATA.xlsx +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test_local/e2e/test_basic.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test_local/test_ddl.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test_local/test_parsing.py +0 -0
- {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/test_local/test_types.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
+
# 3.7.4 (2025-04-21)
|
|
4
|
+
|
|
5
|
+
- Fix: compatibility with urllib3 versions less than 2.x (databricks/databricks-sql-python#545 by @jprakash-db)
|
|
6
|
+
|
|
7
|
+
# 3.7.3 (2025-03-28)
|
|
8
|
+
|
|
9
|
+
- Fix: Unable to poll small results in execute_async function (databricks/databricks-sql-python#515 by @jprakash-db)
|
|
10
|
+
- Updated log messages to show the status code and error messages of requests (databricks/databricks-sql-python#511 by @jprakash-db)
|
|
11
|
+
- Fix: Incorrect metadata was fetched in case of queries with the same alias (databricks/databricks-sql-python#505 by @jprakash-db)
|
|
12
|
+
|
|
3
13
|
# 3.7.2 (2025-01-31)
|
|
4
14
|
|
|
5
15
|
- Updated the retry_dela_max and retry_timeout (databricks/databricks-sql-python#497 by @jprakash-db)
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/retry.py
RENAMED
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
import random
|
|
3
3
|
import time
|
|
4
4
|
import typing
|
|
5
|
+
from importlib.metadata import version
|
|
5
6
|
from enum import Enum
|
|
6
7
|
from typing import List, Optional, Tuple, Union
|
|
7
8
|
|
|
@@ -308,8 +309,11 @@ class DatabricksRetryPolicy(Retry):
|
|
|
308
309
|
|
|
309
310
|
current_attempt = self.stop_after_attempts_count - int(self.total or 0)
|
|
310
311
|
proposed_backoff = (2**current_attempt) * self.delay_min
|
|
311
|
-
|
|
312
|
-
|
|
312
|
+
|
|
313
|
+
library_version = version("urllib3")
|
|
314
|
+
if int(library_version.split(".")[0]) >= 2:
|
|
315
|
+
if self.backoff_jitter != 0.0:
|
|
316
|
+
proposed_backoff += random.random() * self.backoff_jitter
|
|
313
317
|
|
|
314
318
|
proposed_backoff = min(proposed_backoff, self.delay_max)
|
|
315
319
|
self.check_proposed_wait(proposed_backoff)
|
|
@@ -345,23 +349,24 @@ class DatabricksRetryPolicy(Retry):
|
|
|
345
349
|
if a retry would violate the configured policy.
|
|
346
350
|
"""
|
|
347
351
|
|
|
352
|
+
logger.info(f"Received status code {status_code} for {method} request")
|
|
353
|
+
|
|
348
354
|
# Request succeeded. Don't retry.
|
|
349
355
|
if status_code == 200:
|
|
350
356
|
return False, "200 codes are not retried"
|
|
351
357
|
|
|
352
358
|
if status_code == 401:
|
|
353
|
-
|
|
354
|
-
|
|
359
|
+
return (
|
|
360
|
+
False,
|
|
361
|
+
"Received 401 - UNAUTHORIZED. Confirm your authentication credentials.",
|
|
355
362
|
)
|
|
356
363
|
|
|
357
364
|
if status_code == 403:
|
|
358
|
-
|
|
359
|
-
"Received 403 - FORBIDDEN. Confirm your authentication credentials."
|
|
360
|
-
)
|
|
365
|
+
return False, "403 codes are not retried"
|
|
361
366
|
|
|
362
367
|
# Request failed and server said NotImplemented. This isn't recoverable. Don't retry.
|
|
363
368
|
if status_code == 501:
|
|
364
|
-
|
|
369
|
+
return False, "Received code 501 from server."
|
|
365
370
|
|
|
366
371
|
# Request failed and this method is not retryable. We only retry POST requests.
|
|
367
372
|
if not self._is_method_retryable(method):
|
|
@@ -400,8 +405,9 @@ class DatabricksRetryPolicy(Retry):
|
|
|
400
405
|
and status_code not in self.status_forcelist
|
|
401
406
|
and status_code not in self.force_dangerous_codes
|
|
402
407
|
):
|
|
403
|
-
|
|
404
|
-
|
|
408
|
+
return (
|
|
409
|
+
False,
|
|
410
|
+
"ExecuteStatement command can only be retried for codes 429 and 503",
|
|
405
411
|
)
|
|
406
412
|
|
|
407
413
|
# Request failed with a dangerous code, was an ExecuteStatement, but user forced retries for this
|
|
@@ -198,6 +198,12 @@ class THttpClient(thrift.transport.THttpClient.THttpClient):
|
|
|
198
198
|
self.message = self.__resp.reason
|
|
199
199
|
self.headers = self.__resp.headers
|
|
200
200
|
|
|
201
|
+
logger.info(
|
|
202
|
+
"HTTP Response with status code {}, message: {}".format(
|
|
203
|
+
self.code, self.message
|
|
204
|
+
)
|
|
205
|
+
)
|
|
206
|
+
|
|
201
207
|
@staticmethod
|
|
202
208
|
def basic_proxy_auth_headers(proxy):
|
|
203
209
|
if proxy is None or not proxy.username:
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/client.py
RENAMED
|
@@ -737,6 +737,7 @@ class Cursor:
|
|
|
737
737
|
self,
|
|
738
738
|
operation: str,
|
|
739
739
|
parameters: Optional[TParameterCollection] = None,
|
|
740
|
+
enforce_embedded_schema_correctness=False,
|
|
740
741
|
) -> "Cursor":
|
|
741
742
|
"""
|
|
742
743
|
Execute a query and wait for execution to complete.
|
|
@@ -801,6 +802,7 @@ class Cursor:
|
|
|
801
802
|
use_cloud_fetch=self.connection.use_cloud_fetch,
|
|
802
803
|
parameters=prepared_params,
|
|
803
804
|
async_op=False,
|
|
805
|
+
enforce_embedded_schema_correctness=enforce_embedded_schema_correctness,
|
|
804
806
|
)
|
|
805
807
|
self.active_result_set = ResultSet(
|
|
806
808
|
self.connection,
|
|
@@ -822,6 +824,7 @@ class Cursor:
|
|
|
822
824
|
self,
|
|
823
825
|
operation: str,
|
|
824
826
|
parameters: Optional[TParameterCollection] = None,
|
|
827
|
+
enforce_embedded_schema_correctness=False,
|
|
825
828
|
) -> "Cursor":
|
|
826
829
|
"""
|
|
827
830
|
|
|
@@ -862,6 +865,7 @@ class Cursor:
|
|
|
862
865
|
use_cloud_fetch=self.connection.use_cloud_fetch,
|
|
863
866
|
parameters=prepared_params,
|
|
864
867
|
async_op=True,
|
|
868
|
+
enforce_embedded_schema_correctness=enforce_embedded_schema_correctness,
|
|
865
869
|
)
|
|
866
870
|
|
|
867
871
|
return self
|
|
@@ -883,6 +883,7 @@ class ThriftBackend:
|
|
|
883
883
|
use_cloud_fetch=True,
|
|
884
884
|
parameters=[],
|
|
885
885
|
async_op=False,
|
|
886
|
+
enforce_embedded_schema_correctness=False,
|
|
886
887
|
):
|
|
887
888
|
assert session_handle is not None
|
|
888
889
|
|
|
@@ -898,8 +899,12 @@ class ThriftBackend:
|
|
|
898
899
|
sessionHandle=session_handle,
|
|
899
900
|
statement=operation,
|
|
900
901
|
runAsync=True,
|
|
901
|
-
|
|
902
|
-
|
|
902
|
+
# For async operation we don't want the direct results
|
|
903
|
+
getDirectResults=None
|
|
904
|
+
if async_op
|
|
905
|
+
else ttypes.TSparkGetDirectResults(
|
|
906
|
+
maxRows=max_rows,
|
|
907
|
+
maxBytes=max_bytes,
|
|
903
908
|
),
|
|
904
909
|
canReadArrowResult=True if pyarrow else False,
|
|
905
910
|
canDecompressLZ4Result=lz4_compression,
|
|
@@ -910,6 +915,7 @@ class ThriftBackend:
|
|
|
910
915
|
},
|
|
911
916
|
useArrowNativeTypes=spark_arrow_types,
|
|
912
917
|
parameters=parameters,
|
|
918
|
+
enforceEmbeddedSchemaCorrectness=enforce_embedded_schema_correctness,
|
|
913
919
|
)
|
|
914
920
|
resp = self.make_request(self._client.ExecuteStatement, req)
|
|
915
921
|
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/auth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/auth/oauth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/types.py
RENAMED
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sql/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/_ddl.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/base.py
RENAMED
|
File without changes
|
{databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.4}/src/databricks/sqlalchemy/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|