databricks-sql-connector 3.7.1__tar.gz → 3.7.3__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.1 → databricks_sql_connector-3.7.3}/CHANGELOG.md +10 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/PKG-INFO +1 -1
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/pyproject.toml +1 -1
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/__init__.py +1 -1
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/retry.py +12 -9
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/thrift_http_client.py +6 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/client.py +4 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_backend.py +9 -3
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/LICENSE +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/README.md +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/auth.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/authenticators.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/endpoint.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/oauth.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/oauth_http_handler.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/cloudfetch/download_manager.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/cloudfetch/downloader.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/exc.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/experimental/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/experimental/oauth_persistence.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/native.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/py.typed +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/py.typed +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/TCLIService-remote +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/TCLIService.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/constants.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/ttypes.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/types.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/utils.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/README.sqlalchemy.md +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/README.tests.md +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_ddl.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_parse.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_types.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/base.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/py.typed +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/requirements.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/setup.cfg +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_extra.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_future.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_regression.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_unsupported.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/conftest.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/overrides/_componentreflectiontest.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/overrides/_ctetest.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/test_suite.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/__init__.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/conftest.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/e2e/MOCK_DATA.xlsx +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/e2e/test_basic.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_ddl.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_parsing.py +0 -0
- {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_types.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
+
# 3.7.3 (2025-03-28)
|
|
4
|
+
|
|
5
|
+
- Fix: Unable to poll small results in execute_async function (databricks/databricks-sql-python#515 by @jprakash-db)
|
|
6
|
+
- Updated log messages to show the status code and error messages of requests (databricks/databricks-sql-python#511 by @jprakash-db)
|
|
7
|
+
- Fix: Incorrect metadata was fetched in case of queries with the same alias (databricks/databricks-sql-python#505 by @jprakash-db)
|
|
8
|
+
|
|
9
|
+
# 3.7.2 (2025-01-31)
|
|
10
|
+
|
|
11
|
+
- Updated the retry_dela_max and retry_timeout (databricks/databricks-sql-python#497 by @jprakash-db)
|
|
12
|
+
|
|
3
13
|
# 3.7.1 (2025-01-07)
|
|
4
14
|
|
|
5
15
|
- Relaxed the number of Http retry attempts (databricks/databricks-sql-python#486 by @jprakash-db)
|
{databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/retry.py
RENAMED
|
@@ -290,8 +290,9 @@ class DatabricksRetryPolicy(Retry):
|
|
|
290
290
|
else:
|
|
291
291
|
proposed_wait = self.get_backoff_time()
|
|
292
292
|
|
|
293
|
-
proposed_wait =
|
|
293
|
+
proposed_wait = max(proposed_wait, self.delay_max)
|
|
294
294
|
self.check_proposed_wait(proposed_wait)
|
|
295
|
+
logger.debug(f"Retrying after {proposed_wait} seconds")
|
|
295
296
|
time.sleep(proposed_wait)
|
|
296
297
|
return True
|
|
297
298
|
|
|
@@ -344,23 +345,24 @@ class DatabricksRetryPolicy(Retry):
|
|
|
344
345
|
if a retry would violate the configured policy.
|
|
345
346
|
"""
|
|
346
347
|
|
|
348
|
+
logger.info(f"Received status code {status_code} for {method} request")
|
|
349
|
+
|
|
347
350
|
# Request succeeded. Don't retry.
|
|
348
351
|
if status_code == 200:
|
|
349
352
|
return False, "200 codes are not retried"
|
|
350
353
|
|
|
351
354
|
if status_code == 401:
|
|
352
|
-
|
|
353
|
-
|
|
355
|
+
return (
|
|
356
|
+
False,
|
|
357
|
+
"Received 401 - UNAUTHORIZED. Confirm your authentication credentials.",
|
|
354
358
|
)
|
|
355
359
|
|
|
356
360
|
if status_code == 403:
|
|
357
|
-
|
|
358
|
-
"Received 403 - FORBIDDEN. Confirm your authentication credentials."
|
|
359
|
-
)
|
|
361
|
+
return False, "403 codes are not retried"
|
|
360
362
|
|
|
361
363
|
# Request failed and server said NotImplemented. This isn't recoverable. Don't retry.
|
|
362
364
|
if status_code == 501:
|
|
363
|
-
|
|
365
|
+
return False, "Received code 501 from server."
|
|
364
366
|
|
|
365
367
|
# Request failed and this method is not retryable. We only retry POST requests.
|
|
366
368
|
if not self._is_method_retryable(method):
|
|
@@ -399,8 +401,9 @@ class DatabricksRetryPolicy(Retry):
|
|
|
399
401
|
and status_code not in self.status_forcelist
|
|
400
402
|
and status_code not in self.force_dangerous_codes
|
|
401
403
|
):
|
|
402
|
-
|
|
403
|
-
|
|
404
|
+
return (
|
|
405
|
+
False,
|
|
406
|
+
"ExecuteStatement command can only be retried for codes 429 and 503",
|
|
404
407
|
)
|
|
405
408
|
|
|
406
409
|
# 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.1 → databricks_sql_connector-3.7.3}/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
|
|
@@ -66,7 +66,7 @@ DEFAULT_SOCKET_TIMEOUT = float(900)
|
|
|
66
66
|
# - 900s attempts-duration lines up w ODBC/JDBC drivers (for cluster startup > 10 mins)
|
|
67
67
|
_retry_policy = { # (type, default, min, max)
|
|
68
68
|
"_retry_delay_min": (float, 1, 0.1, 60),
|
|
69
|
-
"_retry_delay_max": (float,
|
|
69
|
+
"_retry_delay_max": (float, 60, 5, 3600),
|
|
70
70
|
"_retry_stop_after_attempts_count": (int, 30, 1, 60),
|
|
71
71
|
"_retry_stop_after_attempts_duration": (float, 900, 1, 86400),
|
|
72
72
|
"_retry_delay_default": (float, 5, 1, 60),
|
|
@@ -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.1 → databricks_sql_connector-3.7.3}/src/databricks/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/auth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/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.1 → databricks_sql_connector-3.7.3}/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.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/types.py
RENAMED
|
File without changes
|
{databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_ddl.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/base.py
RENAMED
|
File without changes
|
{databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/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
|