databricks-sql-connector 3.7.2__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.2 → databricks_sql_connector-3.7.3}/CHANGELOG.md +6 -0
  2. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/PKG-INFO +1 -1
  3. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/pyproject.toml +1 -1
  4. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/__init__.py +1 -1
  5. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/retry.py +10 -8
  6. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/thrift_http_client.py +6 -0
  7. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/client.py +4 -0
  8. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_backend.py +8 -2
  9. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/LICENSE +0 -0
  10. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/README.md +0 -0
  11. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/__init__.py +0 -0
  12. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/__init__.py +0 -0
  13. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/auth.py +0 -0
  14. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/authenticators.py +0 -0
  15. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/endpoint.py +0 -0
  16. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/oauth.py +0 -0
  17. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/auth/oauth_http_handler.py +0 -0
  18. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/cloudfetch/download_manager.py +0 -0
  19. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/cloudfetch/downloader.py +0 -0
  20. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/exc.py +0 -0
  21. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/experimental/__init__.py +0 -0
  22. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/experimental/oauth_persistence.py +0 -0
  23. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/__init__.py +0 -0
  24. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/native.py +0 -0
  25. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/parameters/py.typed +0 -0
  26. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/py.typed +0 -0
  27. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/TCLIService-remote +0 -0
  28. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/TCLIService.py +0 -0
  29. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/__init__.py +0 -0
  30. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/constants.py +0 -0
  31. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/TCLIService/ttypes.py +0 -0
  32. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/thrift_api/__init__.py +0 -0
  33. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/types.py +0 -0
  34. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sql/utils.py +0 -0
  35. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/README.sqlalchemy.md +0 -0
  36. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/README.tests.md +0 -0
  37. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/__init__.py +0 -0
  38. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_ddl.py +0 -0
  39. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_parse.py +0 -0
  40. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/_types.py +0 -0
  41. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/base.py +0 -0
  42. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/py.typed +0 -0
  43. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/requirements.py +0 -0
  44. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/setup.cfg +0 -0
  45. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_extra.py +0 -0
  46. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_future.py +0 -0
  47. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_regression.py +0 -0
  48. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/_unsupported.py +0 -0
  49. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/conftest.py +0 -0
  50. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/overrides/_componentreflectiontest.py +0 -0
  51. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/overrides/_ctetest.py +0 -0
  52. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test/test_suite.py +0 -0
  53. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/__init__.py +0 -0
  54. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/conftest.py +0 -0
  55. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/e2e/MOCK_DATA.xlsx +0 -0
  56. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/e2e/test_basic.py +0 -0
  57. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_ddl.py +0 -0
  58. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_parsing.py +0 -0
  59. {databricks_sql_connector-3.7.2 → databricks_sql_connector-3.7.3}/src/databricks/sqlalchemy/test_local/test_types.py +0 -0
@@ -1,5 +1,11 @@
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
+
3
9
  # 3.7.2 (2025-01-31)
4
10
 
5
11
  - Updated the retry_dela_max and retry_timeout (databricks/databricks-sql-python#497 by @jprakash-db)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: databricks-sql-connector
3
- Version: 3.7.2
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.2"
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.2"
71
+ __version__ = "3.7.3"
72
72
  USER_AGENT_NAME = "PyDatabricksSqlConnector"
73
73
 
74
74
  # These two functions are pyhive legacy
@@ -345,23 +345,24 @@ class DatabricksRetryPolicy(Retry):
345
345
  if a retry would violate the configured policy.
346
346
  """
347
347
 
348
+ logger.info(f"Received status code {status_code} for {method} request")
349
+
348
350
  # Request succeeded. Don't retry.
349
351
  if status_code == 200:
350
352
  return False, "200 codes are not retried"
351
353
 
352
354
  if status_code == 401:
353
- raise NonRecoverableNetworkError(
354
- "Received 401 - UNAUTHORIZED. Confirm your authentication credentials."
355
+ return (
356
+ False,
357
+ "Received 401 - UNAUTHORIZED. Confirm your authentication credentials.",
355
358
  )
356
359
 
357
360
  if status_code == 403:
358
- raise NonRecoverableNetworkError(
359
- "Received 403 - FORBIDDEN. Confirm your authentication credentials."
360
- )
361
+ return False, "403 codes are not retried"
361
362
 
362
363
  # Request failed and server said NotImplemented. This isn't recoverable. Don't retry.
363
364
  if status_code == 501:
364
- raise NonRecoverableNetworkError("Received code 501 from server.")
365
+ return False, "Received code 501 from server."
365
366
 
366
367
  # Request failed and this method is not retryable. We only retry POST requests.
367
368
  if not self._is_method_retryable(method):
@@ -400,8 +401,9 @@ class DatabricksRetryPolicy(Retry):
400
401
  and status_code not in self.status_forcelist
401
402
  and status_code not in self.force_dangerous_codes
402
403
  ):
403
- raise UnsafeToRetryError(
404
- "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",
405
407
  )
406
408
 
407
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
@@ -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