databricks-sql-connector 3.1.0__tar.gz → 3.1.1__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.1.0 → databricks_sql_connector-3.1.1}/CHANGELOG.md +8 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/PKG-INFO +1 -1
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/pyproject.toml +1 -1
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/__init__.py +1 -1
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/retry.py +6 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/client.py +14 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/thrift_backend.py +2 -2
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/base.py +1 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/LICENSE +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/README.md +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/auth.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/authenticators.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/endpoint.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/oauth.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/oauth_http_handler.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/thrift_http_client.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/cloudfetch/download_manager.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/cloudfetch/downloader.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/exc.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/experimental/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/experimental/oauth_persistence.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/parameters/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/parameters/native.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/parameters/py.typed +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/thrift_api/TCLIService/TCLIService-remote +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/thrift_api/TCLIService/TCLIService.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/thrift_api/TCLIService/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/thrift_api/TCLIService/constants.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/thrift_api/TCLIService/ttypes.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/thrift_api/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/types.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/utils.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/README.sqlalchemy.md +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/README.tests.md +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/_ddl.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/_parse.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/_types.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/requirements.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/setup.cfg +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/_extra.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/_future.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/_regression.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/_unsupported.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/conftest.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/overrides/_componentreflectiontest.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/overrides/_ctetest.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test/test_suite.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test_local/__init__.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test_local/conftest.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test_local/e2e/MOCK_DATA.xlsx +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test_local/e2e/test_basic.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test_local/test_ddl.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test_local/test_parsing.py +0 -0
- {databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/test_local/test_types.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
+
# x.x.x (TBD)
|
|
4
|
+
|
|
5
|
+
# 3.1.1 (2024-03-19)
|
|
6
|
+
|
|
7
|
+
- Don't retry requests that fail with code 403 (#373)
|
|
8
|
+
- Assume a default retry-after for 429/503 (#371)
|
|
9
|
+
- Fix boolean literals (#357)
|
|
10
|
+
|
|
3
11
|
# 3.1.0 (2024-02-16)
|
|
4
12
|
|
|
5
13
|
- Revert retry-after behavior to be exponential backoff (#349)
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/retry.py
RENAMED
|
@@ -325,6 +325,7 @@ class DatabricksRetryPolicy(Retry):
|
|
|
325
325
|
default, this means ExecuteStatement is only retried for codes 429 and 503.
|
|
326
326
|
This limit prevents automatically retrying non-idempotent commands that could
|
|
327
327
|
be destructive.
|
|
328
|
+
5. The request received a 403 response, because this can never succeed.
|
|
328
329
|
|
|
329
330
|
|
|
330
331
|
Q: What about OSErrors and Redirects?
|
|
@@ -338,6 +339,11 @@ class DatabricksRetryPolicy(Retry):
|
|
|
338
339
|
if status_code == 200:
|
|
339
340
|
return False, "200 codes are not retried"
|
|
340
341
|
|
|
342
|
+
if status_code == 403:
|
|
343
|
+
raise NonRecoverableNetworkError(
|
|
344
|
+
"Received 403 - FORBIDDEN. Confirm your authentication credentials."
|
|
345
|
+
)
|
|
346
|
+
|
|
341
347
|
# Request failed and server said NotImplemented. This isn't recoverable. Don't retry.
|
|
342
348
|
if status_code == 501:
|
|
343
349
|
raise NonRecoverableNetworkError("Received code 501 from server.")
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/client.py
RENAMED
|
@@ -6,6 +6,7 @@ import requests
|
|
|
6
6
|
import json
|
|
7
7
|
import os
|
|
8
8
|
import decimal
|
|
9
|
+
from uuid import UUID
|
|
9
10
|
|
|
10
11
|
from databricks.sql import __version__
|
|
11
12
|
from databricks.sql import *
|
|
@@ -1004,9 +1005,22 @@ class Cursor:
|
|
|
1004
1005
|
def close(self) -> None:
|
|
1005
1006
|
"""Close cursor"""
|
|
1006
1007
|
self.open = False
|
|
1008
|
+
self.active_op_handle = None
|
|
1007
1009
|
if self.active_result_set:
|
|
1008
1010
|
self._close_and_clear_active_result_set()
|
|
1009
1011
|
|
|
1012
|
+
@property
|
|
1013
|
+
def query_id(self) -> Optional[str]:
|
|
1014
|
+
"""
|
|
1015
|
+
This attribute is an identifier of last executed query.
|
|
1016
|
+
|
|
1017
|
+
This attribute will be ``None`` if the cursor has not had an operation
|
|
1018
|
+
invoked via the execute method yet, or if cursor was closed.
|
|
1019
|
+
"""
|
|
1020
|
+
if self.active_op_handle is not None:
|
|
1021
|
+
return str(UUID(bytes=self.active_op_handle.operationId.guid))
|
|
1022
|
+
return None
|
|
1023
|
+
|
|
1010
1024
|
@property
|
|
1011
1025
|
def description(self) -> Optional[List[Tuple]]:
|
|
1012
1026
|
"""
|
|
@@ -376,8 +376,8 @@ class ThriftBackend:
|
|
|
376
376
|
# encapsulate retry checks, returns None || delay-in-secs
|
|
377
377
|
# Retry IFF 429/503 code + Retry-After header set
|
|
378
378
|
http_code = getattr(self._transport, "code", None)
|
|
379
|
-
retry_after = getattr(self._transport, "headers", {}).get("Retry-After")
|
|
380
|
-
if http_code in [429, 503]
|
|
379
|
+
retry_after = getattr(self._transport, "headers", {}).get("Retry-After", 1)
|
|
380
|
+
if http_code in [429, 503]:
|
|
381
381
|
# bound delay (seconds) by [min_delay*1.5^(attempt-1), max_delay]
|
|
382
382
|
return bound_retry_delay(attempt, int(retry_after))
|
|
383
383
|
return None
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/base.py
RENAMED
|
@@ -64,6 +64,7 @@ class DatabricksDialect(default.DefaultDialect):
|
|
|
64
64
|
supports_default_values: bool = False
|
|
65
65
|
supports_server_side_cursors: bool = False
|
|
66
66
|
supports_sequences: bool = False
|
|
67
|
+
supports_native_boolean: bool = True
|
|
67
68
|
|
|
68
69
|
colspecs = {
|
|
69
70
|
sqlalchemy.types.DateTime: dialect_type_impl.TIMESTAMP_NTZ,
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/auth/auth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/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
|
|
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.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/types.py
RENAMED
|
File without changes
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sql/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_sql_connector-3.1.0 → databricks_sql_connector-3.1.1}/src/databricks/sqlalchemy/_ddl.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
|
|
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
|