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.
Files changed (59) hide show
  1. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/CHANGELOG.md +10 -0
  2. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/PKG-INFO +1 -1
  3. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/pyproject.toml +1 -1
  4. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/__init__.py +1 -1
  5. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/retry.py +12 -9
  6. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/thrift_http_client.py +6 -0
  7. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/client.py +4 -0
  8. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_backend.py +9 -3
  9. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/LICENSE +0 -0
  10. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/README.md +0 -0
  11. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/__init__.py +0 -0
  12. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/__init__.py +0 -0
  13. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/auth.py +0 -0
  14. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/authenticators.py +0 -0
  15. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/endpoint.py +0 -0
  16. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/oauth.py +0 -0
  17. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/oauth_http_handler.py +0 -0
  18. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/cloudfetch/download_manager.py +0 -0
  19. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/cloudfetch/downloader.py +0 -0
  20. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/exc.py +0 -0
  21. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/experimental/__init__.py +0 -0
  22. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/experimental/oauth_persistence.py +0 -0
  23. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/__init__.py +0 -0
  24. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/native.py +0 -0
  25. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/py.typed +0 -0
  26. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/py.typed +0 -0
  27. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/TCLIService-remote +0 -0
  28. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/TCLIService.py +0 -0
  29. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/__init__.py +0 -0
  30. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/constants.py +0 -0
  31. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/ttypes.py +0 -0
  32. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/__init__.py +0 -0
  33. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/types.py +0 -0
  34. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sql/utils.py +0 -0
  35. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/README.sqlalchemy.md +0 -0
  36. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/README.tests.md +0 -0
  37. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/__init__.py +0 -0
  38. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_ddl.py +0 -0
  39. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_parse.py +0 -0
  40. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_types.py +0 -0
  41. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/base.py +0 -0
  42. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/py.typed +0 -0
  43. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/requirements.py +0 -0
  44. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/setup.cfg +0 -0
  45. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_extra.py +0 -0
  46. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_future.py +0 -0
  47. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_regression.py +0 -0
  48. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_unsupported.py +0 -0
  49. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/conftest.py +0 -0
  50. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/overrides/_componentreflectiontest.py +0 -0
  51. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/overrides/_ctetest.py +0 -0
  52. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/test_suite.py +0 -0
  53. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/__init__.py +0 -0
  54. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/conftest.py +0 -0
  55. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/e2e/MOCK_DATA.xlsx +0 -0
  56. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/e2e/test_basic.py +0 -0
  57. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_ddl.py +0 -0
  58. {databricks_sql_connector-3.7.1 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_parsing.py +0 -0
  59. {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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: databricks-sql-connector
3
- Version: 3.7.1
3
+ Version: 3.7.3
4
4
  Summary: Databricks SQL Connector for Python
5
5
  License: Apache-2.0
6
6
  Author: Databricks
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "databricks-sql-connector"
3
- version = "3.7.1"
3
+ version = "3.7.3"
4
4
  description = "Databricks SQL Connector for Python"
5
5
  authors = ["Databricks <databricks-sql-connector-maintainers@databricks.com>"]
6
6
  license = "Apache-2.0"
@@ -68,7 +68,7 @@ DATETIME = DBAPITypeObject("timestamp")
68
68
  DATE = DBAPITypeObject("date")
69
69
  ROWID = DBAPITypeObject()
70
70
 
71
- __version__ = "3.7.1"
71
+ __version__ = "3.7.3"
72
72
  USER_AGENT_NAME = "PyDatabricksSqlConnector"
73
73
 
74
74
  # These two functions are pyhive legacy
@@ -290,8 +290,9 @@ class DatabricksRetryPolicy(Retry):
290
290
  else:
291
291
  proposed_wait = self.get_backoff_time()
292
292
 
293
- proposed_wait = min(proposed_wait, self.delay_max)
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
- raise NonRecoverableNetworkError(
353
- "Received 401 - UNAUTHORIZED. Confirm your authentication credentials."
355
+ return (
356
+ False,
357
+ "Received 401 - UNAUTHORIZED. Confirm your authentication credentials.",
354
358
  )
355
359
 
356
360
  if status_code == 403:
357
- raise NonRecoverableNetworkError(
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
- raise NonRecoverableNetworkError("Received code 501 from server.")
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
- raise UnsafeToRetryError(
403
- "ExecuteStatement command can only be retried for codes 429 and 503"
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:
@@ -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, 30, 5, 3600),
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
- getDirectResults=ttypes.TSparkGetDirectResults(
902
- maxRows=max_rows, maxBytes=max_bytes
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