snowflake-connector-python 5.0.0b2__tar.gz → 5.0.0b3__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 (390) hide show
  1. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/Cargo.lock +20 -0
  2. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/PKG-INFO +4 -6
  3. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/README.md +2 -4
  4. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/generators/python_generator.rs +97 -2
  5. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/generators/rust_generator.rs +1 -1
  6. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/protoc_installer.rs +76 -8
  7. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/protobuf/database_driver_v1.proto +42 -2
  8. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/pyproject.toml +2 -1
  9. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/Cargo.toml +10 -3
  10. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/connection.rs +518 -110
  11. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/error.rs +7 -0
  12. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/global_state.rs +53 -1
  13. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/heartbeat.rs +12 -8
  14. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/query.rs +277 -56
  15. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/result_set.rs +169 -17
  16. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/statement.rs +388 -111
  17. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/validation.rs +128 -23
  18. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/arrow_utils.rs +6 -1
  19. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/auth.rs +10 -1
  20. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/bin/collect_chunk_data.rs +4 -0
  21. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/prefetch.rs +19 -11
  22. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/compression.rs +3 -3
  23. snowflake_connector_python-5.0.0b3/sf_core/src/compression_types.rs +559 -0
  24. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/config_manager.rs +138 -0
  25. snowflake_connector_python-5.0.0b3/sf_core/src/config/configured_redirect_uri.rs +121 -0
  26. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/connection_config.rs +233 -10
  27. snowflake_connector_python-5.0.0b3/sf_core/src/config/ini_loader.rs +206 -0
  28. snowflake_connector_python-5.0.0b3/sf_core/src/config/logging_config_loader.rs +344 -0
  29. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/mod.rs +16 -0
  30. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/param_registry.rs +348 -9
  31. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/resolver.rs +237 -11
  32. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/rest_parameters.rs +136 -43
  33. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/cache.rs +4 -2
  34. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/integration_test.rs +1 -1
  35. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/worker.rs +2 -0
  36. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/file_manager/azure_transfer.rs +276 -66
  37. snowflake_connector_python-5.0.0b3/sf_core/src/file_manager/cloud_http.rs +282 -0
  38. snowflake_connector_python-5.0.0b3/sf_core/src/file_manager/encryption.rs +438 -0
  39. snowflake_connector_python-5.0.0b3/sf_core/src/file_manager/gcs_transfer.rs +2420 -0
  40. snowflake_connector_python-5.0.0b3/sf_core/src/file_manager/mod.rs +1666 -0
  41. snowflake_connector_python-5.0.0b3/sf_core/src/file_manager/s3_transfer.rs +1422 -0
  42. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/file_manager/types.rs +199 -48
  43. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/lib.rs +2 -0
  44. snowflake_connector_python-5.0.0b3/sf_core/src/logging/error.rs +12 -0
  45. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/logging/log_manager.rs +188 -52
  46. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/logging/mod.rs +1 -2
  47. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/protobuf/apis/database_driver_v1/converter.rs +57 -4
  48. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/protobuf/apis/database_driver_v1/mod.rs +79 -11
  49. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/protobuf/c_api.rs +4 -0
  50. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/query_types.rs +3 -1
  51. snowflake_connector_python-5.0.0b3/sf_core/src/refresh.rs +212 -0
  52. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/async_exec.rs +1 -1
  53. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/auth.rs +22 -7
  54. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/external_browser.rs +2 -2
  55. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/heartbeat.rs +17 -4
  56. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/mod.rs +441 -202
  57. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/authorization_code.rs +173 -35
  58. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/loopback_server.rs +249 -116
  59. snowflake_connector_python-5.0.0b3/sf_core/src/rest/snowflake/prompt_lock.rs +189 -0
  60. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/query_response.rs +722 -24
  61. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/sql_state.rs +7 -0
  62. snowflake_connector_python-5.0.0b3/sf_core/src/stage_binding.rs +276 -0
  63. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/mod.rs +43 -4
  64. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/serialization.rs +86 -15
  65. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/snowflake_exporter.rs +12 -15
  66. snowflake_connector_python-5.0.0b3/sf_core/src/telemetry/snowflake_processor.rs +399 -0
  67. snowflake_connector_python-5.0.0b3/sf_core/src/tls/client.rs +372 -0
  68. snowflake_connector_python-5.0.0b3/sf_core/src/tls/config.rs +223 -0
  69. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/tls/error.rs +8 -0
  70. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/tls/mod.rs +2 -2
  71. snowflake_connector_python-5.0.0b3/sf_core/tests/common/cloud_gating.rs +295 -0
  72. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/config.rs +2 -0
  73. snowflake_connector_python-5.0.0b3/sf_core/tests/common/mocks/external_browser.rs +302 -0
  74. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mocks/mfa.rs +24 -0
  75. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mocks/password.rs +7 -4
  76. snowflake_connector_python-5.0.0b3/sf_core/tests/common/mocks/put_get.rs +172 -0
  77. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mod.rs +1 -0
  78. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/snowflake_test_client.rs +57 -1
  79. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/api_client/bridge.py +48 -0
  80. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/api_client/client_api.py +278 -31
  81. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/arrow_context.py +3 -2
  82. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/arrow_stream_async.py +156 -0
  83. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/arrow_stream_utils.py +4 -3
  84. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/connection/__init__.py +30 -0
  85. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/connection/connection.py +328 -0
  86. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/connection/connection_types.py +13 -0
  87. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/connection/constants.py +25 -0
  88. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/connection/decorators.py +70 -0
  89. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/connection/freezable_proxy.py +39 -0
  90. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/connection/queries.py +9 -0
  91. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/connection_config_mixin.py +64 -6
  92. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/__init__.py +25 -0
  93. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/base.py +425 -0
  94. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/cursor_types.py +13 -0
  95. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/decorators.py +113 -0
  96. snowflake_connector_python-5.0.0b2/src/snowflake/connector/cursor/_query_result.py → snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/query_result.py +23 -18
  97. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/query_result_waiter.py +98 -0
  98. snowflake_connector_python-5.0.0b2/src/snowflake/connector/cursor/_result_metadata.py → snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/result_metadata.py +2 -2
  99. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/cursor/result_set_wrapper.py +59 -0
  100. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/decorators.py +297 -0
  101. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/errorhandler.py +6 -4
  102. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/logging.py +26 -0
  103. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.cpp +31 -35
  104. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +340 -0
  105. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.pyi +130 -9
  106. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_services.py +729 -0
  107. snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/result_batch.py +148 -0
  108. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/snowflake_restful.py +12 -4
  109. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/statement_utils.py +13 -3
  110. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/telemetry.py +33 -1
  111. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/README.md +159 -0
  112. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/__init__.py +35 -0
  113. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/connection/__init__.py +17 -0
  114. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/connection/_connection.py +408 -0
  115. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/connection/_freezable_proxy.py +85 -0
  116. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/cursor/__init__.py +35 -0
  117. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/cursor/_base.py +828 -0
  118. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/cursor/_dict_cursor.py +58 -0
  119. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/cursor/_result_set_wrapper.py +59 -0
  120. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/cursor/_snowflake_cursor.py +52 -0
  121. snowflake_connector_python-5.0.0b3/src/snowflake/connector/aio/result_batch.py +158 -0
  122. snowflake_connector_python-5.0.0b3/src/snowflake/connector/connection/__init__.py +30 -0
  123. snowflake_connector_python-5.0.0b2/src/snowflake/connector/connection.py → snowflake_connector_python-5.0.0b3/src/snowflake/connector/connection/_connection.py +103 -382
  124. snowflake_connector_python-5.0.0b2/src/snowflake/connector/_internal/freezable_proxy.py → snowflake_connector_python-5.0.0b3/src/snowflake/connector/connection/_freezable_proxy.py +21 -26
  125. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/connection_config.py +60 -0
  126. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/cursor/__init__.py +2 -6
  127. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/cursor/_base.py +137 -468
  128. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/cursor/_dict_cursor.py +2 -1
  129. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/cursor/_result_set_wrapper.py +6 -32
  130. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/cursor/_snowflake_cursor.py +2 -1
  131. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/errors.py +24 -5
  132. snowflake_connector_python-5.0.0b3/src/snowflake/connector/py.typed +0 -0
  133. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/result_batch.py +16 -149
  134. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/version.py +1 -1
  135. snowflake_connector_python-5.0.0b2/sf_core/src/compression_types.rs +0 -123
  136. snowflake_connector_python-5.0.0b2/sf_core/src/file_manager/encryption.rs +0 -193
  137. snowflake_connector_python-5.0.0b2/sf_core/src/file_manager/gcs_transfer.rs +0 -1059
  138. snowflake_connector_python-5.0.0b2/sf_core/src/file_manager/mod.rs +0 -672
  139. snowflake_connector_python-5.0.0b2/sf_core/src/file_manager/s3_transfer.rs +0 -933
  140. snowflake_connector_python-5.0.0b2/sf_core/src/logging/error.rs +0 -34
  141. snowflake_connector_python-5.0.0b2/sf_core/src/logging/ini_config.rs +0 -702
  142. snowflake_connector_python-5.0.0b2/sf_core/src/tls/client.rs +0 -147
  143. snowflake_connector_python-5.0.0b2/sf_core/src/tls/config.rs +0 -55
  144. snowflake_connector_python-5.0.0b2/sf_core/tests/common/mocks/external_browser.rs +0 -109
  145. snowflake_connector_python-5.0.0b2/sf_core/tests/common/mocks/put_get.rs +0 -52
  146. snowflake_connector_python-5.0.0b2/src/snowflake/connector/_internal/decorators.py +0 -137
  147. snowflake_connector_python-5.0.0b2/src/snowflake/connector/_internal/protobuf_gen/database_driver_v1_pb2.py +0 -336
  148. snowflake_connector_python-5.0.0b2/src/snowflake/connector/cursor/_query_result_waiter.py +0 -47
  149. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/.gitignore +0 -0
  150. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/Cargo.toml +0 -0
  151. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/build_common.rs +0 -0
  152. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/error_trace/Cargo.toml +0 -0
  153. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/error_trace/src/lib.rs +0 -0
  154. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/error_trace_derive/Cargo.toml +0 -0
  155. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/error_trace_derive/src/lib.rs +0 -0
  156. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/hatch_build.py +0 -0
  157. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/Cargo.lock +0 -0
  158. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/Cargo.toml +0 -0
  159. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/README.md +0 -0
  160. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/generator.rs +0 -0
  161. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/generators/helpers.rs +0 -0
  162. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/generators/java_generator.rs +0 -0
  163. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/generators/json_generator.rs +0 -0
  164. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/generators/mod.rs +0 -0
  165. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/lib.rs +0 -0
  166. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/main.rs +0 -0
  167. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_generator/src/protobuf.rs +0 -0
  168. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_utils/Cargo.toml +0 -0
  169. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/proto_utils/src/lib.rs +0 -0
  170. /snowflake_connector_python-5.0.0b2/src/snowflake/connector/_common/__init__.py → /snowflake_connector_python-5.0.0b3/sf_core/CHANGELOG.md +0 -0
  171. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/README.md +0 -0
  172. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/benches/prefetch_bench.rs +0 -0
  173. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/build.rs +0 -0
  174. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/exports.def +0 -0
  175. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/alter_session_parser.rs +0 -0
  176. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/async_query_registry.rs +0 -0
  177. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/database.rs +0 -0
  178. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/logout.rs +0 -0
  179. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/mod.rs +0 -0
  180. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/multistatement.rs +0 -0
  181. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/database_driver_v1/spcs_token.rs +0 -0
  182. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/apis/mod.rs +0 -0
  183. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/bin/README.md +0 -0
  184. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/bin/param_defs_export.rs +0 -0
  185. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/bin/tls_client.rs +0 -0
  186. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/c_api.rs +0 -0
  187. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/arrow_parser.rs +0 -0
  188. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/error.rs +0 -0
  189. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/http_downloader.rs +0 -0
  190. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/json_parser.rs +0 -0
  191. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/memory_budget.rs +0 -0
  192. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/mock.rs +0 -0
  193. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/chunks/mod.rs +0 -0
  194. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/logout.rs +0 -0
  195. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/param_store.rs +0 -0
  196. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/path_resolver.rs +0 -0
  197. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/retry.rs +0 -0
  198. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/settings.rs +0 -0
  199. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/config/toml_loader.rs +0 -0
  200. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/certificate_parser.rs +0 -0
  201. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/config.rs +0 -0
  202. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/disk_tests.rs +0 -0
  203. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/error.rs +0 -0
  204. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/mod.rs +0 -0
  205. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/crl/validator.rs +0 -0
  206. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/file_manager/path_expansion.rs +0 -0
  207. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/fs_adapter.rs +0 -0
  208. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/handle_manager.rs +0 -0
  209. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/http/mod.rs +0 -0
  210. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/http/retry.rs +0 -0
  211. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/logging/c_api.rs +0 -0
  212. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/logging/callback_layer.rs +0 -0
  213. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/logging/opentelemetry.rs +0 -0
  214. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/perf_timing/c_api.rs +0 -0
  215. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/perf_timing/mod.rs +0 -0
  216. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/protobuf/apis/mod.rs +0 -0
  217. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/protobuf/config_setting_ext.rs +0 -0
  218. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/protobuf/generated.rs +0 -0
  219. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/protobuf/mod.rs +0 -0
  220. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/mod.rs +0 -0
  221. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/error.rs +0 -0
  222. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/logout.rs +0 -0
  223. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/native_okta.rs +0 -0
  224. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/client_credentials.rs +0 -0
  225. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/dpop.rs +0 -0
  226. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/error.rs +0 -0
  227. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/http_client.rs +0 -0
  228. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/mod.rs +0 -0
  229. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/pkce.rs +0 -0
  230. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/oauth/token.rs +0 -0
  231. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/query_request.rs +0 -0
  232. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/rest/snowflake/telemetry.rs +0 -0
  233. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/sensitive.rs +0 -0
  234. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/environment.rs +0 -0
  235. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/os_details.rs +0 -0
  236. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/platform_detection/aws.rs +0 -0
  237. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/platform_detection/azure.rs +0 -0
  238. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/platform_detection/gcp.rs +0 -0
  239. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/platform_detection/mod.rs +0 -0
  240. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/platform_detection/tests.rs +0 -0
  241. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/telemetry/types.rs +0 -0
  242. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/tls/crl_verifier.rs +0 -0
  243. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/tls/revocation.rs +0 -0
  244. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/tls/test_helpers.rs +0 -0
  245. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/tls/x509_utils.rs +0 -0
  246. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/token_cache/file_cache.rs +0 -0
  247. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/token_cache/keyring_cache.rs +0 -0
  248. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/src/token_cache/mod.rs +0 -0
  249. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/arrow_deserialize.rs +0 -0
  250. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/arrow_deserialize_macro/Cargo.toml +0 -0
  251. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/arrow_deserialize_macro/src/lib.rs +0 -0
  252. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/arrow_extract_value.rs +0 -0
  253. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/arrow_result_helper.rs +0 -0
  254. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/file_utils.rs +0 -0
  255. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mocks/auth.rs +0 -0
  256. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mocks/mod.rs +0 -0
  257. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mocks/oauth.rs +0 -0
  258. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mocks/okta.rs +0 -0
  259. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/mocks/session.rs +0 -0
  260. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/private_key_helper.rs +0 -0
  261. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/put_get_common.rs +0 -0
  262. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/test_server.rs +0 -0
  263. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/test_utils.rs +0 -0
  264. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/sf_core/tests/common/tls_proxy.rs +0 -0
  265. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/__init__.py +0 -0
  266. {snowflake_connector_python-5.0.0b2/src/snowflake/connector/_internal/protobuf_gen → snowflake_connector_python-5.0.0b3/src/snowflake/connector/_common}/__init__.py +0 -0
  267. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/__init__.py +0 -0
  268. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/_private_key_helper.py +0 -0
  269. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/api_client/__init__.py +0 -0
  270. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/api_client/c_api.py +0 -0
  271. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/arrow_stream_iterator.pyi +0 -0
  272. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/backward_compatibility.py +0 -0
  273. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/binding_converters.py +0 -0
  274. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/config_utils.py +0 -0
  275. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/errorcode.py +0 -0
  276. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/extras.py +0 -0
  277. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/logout_config_mapping.py +0 -0
  278. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  279. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  280. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.cpp +0 -0
  281. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ArrowTableConverter.hpp +0 -0
  282. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  283. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  284. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  285. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  286. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  287. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  288. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.cpp +0 -0
  289. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamIterator.hpp +0 -0
  290. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.cpp +0 -0
  291. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/CArrowStreamTableIterator.hpp +0 -0
  292. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.cpp +0 -0
  293. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ConverterUtil.hpp +0 -0
  294. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  295. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  296. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  297. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  298. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  299. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  300. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  301. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  302. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  303. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  304. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  305. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  306. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  307. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  308. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  309. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  310. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  311. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  312. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  313. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  314. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  315. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  316. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  317. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  318. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  319. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  320. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  321. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  322. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  323. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  324. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  325. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  326. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  327. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  328. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  329. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/arrow_stream_iterator.pyx +0 -0
  330. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  331. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  332. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  333. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  334. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  335. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  336. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  337. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  338. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  339. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  340. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  341. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  342. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  343. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  344. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  345. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  346. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  347. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  348. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  349. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  350. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  351. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  352. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  353. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  354. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  355. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  356. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  357. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  358. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  359. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  360. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  361. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  362. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  363. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  364. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  365. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  366. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  367. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  368. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  369. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.cpp +0 -0
  370. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/nanoarrow_cpp/Logging/logging.hpp +0 -0
  371. {snowflake_connector_python-5.0.0b2/src/snowflake/connector/auth → snowflake_connector_python-5.0.0b3/src/snowflake/connector/_internal/protobuf_gen}/__init__.py +0 -0
  372. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/protobuf_gen/proto_exception.py +0 -0
  373. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/snow_logging.py +0 -0
  374. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/sqlstate.py +0 -0
  375. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/status_codes.py +0 -0
  376. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/text_utils.py +0 -0
  377. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/type_codes.py +0 -0
  378. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/_internal/write_pandas_operation.py +0 -0
  379. /snowflake_connector_python-5.0.0b2/src/snowflake/connector/py.typed → /snowflake_connector_python-5.0.0b3/src/snowflake/connector/auth/__init__.py +0 -0
  380. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/auth/workload_identity.py +0 -0
  381. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/compat.py +0 -0
  382. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/config_manager.py +0 -0
  383. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/constants.py +0 -0
  384. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/description.py +0 -0
  385. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/pandas_tools.py +0 -0
  386. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/telemetry.py +0 -0
  387. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/time_util.py +0 -0
  388. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/types.py +0 -0
  389. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/src/snowflake/connector/util_text.py +0 -0
  390. {snowflake_connector_python-5.0.0b2 → snowflake_connector_python-5.0.0b3}/tests/README.md +0 -0
@@ -3478,6 +3478,7 @@ dependencies = [
3478
3478
  "arrow",
3479
3479
  "base64 0.22.1",
3480
3480
  "chrono",
3481
+ "dirs",
3481
3482
  "embed-resource",
3482
3483
  "error_trace",
3483
3484
  "libc",
@@ -3491,6 +3492,7 @@ dependencies = [
3491
3492
  "snafu 0.8.9",
3492
3493
  "strum",
3493
3494
  "strum_macros",
3495
+ "temp-env",
3494
3496
  "test-case",
3495
3497
  "tokio",
3496
3498
  "tokio-util",
@@ -3510,8 +3512,10 @@ name = "odbc_trace_tool"
3510
3512
  version = "0.1.0"
3511
3513
  dependencies = [
3512
3514
  "clap",
3515
+ "encoding_rs",
3513
3516
  "regex",
3514
3517
  "serde",
3518
+ "serde_json",
3515
3519
  "serde_yaml",
3516
3520
  "snafu 0.8.9",
3517
3521
  "tempfile",
@@ -4385,6 +4389,7 @@ dependencies = [
4385
4389
  "url",
4386
4390
  "wasm-bindgen",
4387
4391
  "wasm-bindgen-futures",
4392
+ "wasm-streams",
4388
4393
  "web-sys",
4389
4394
  "webpki-roots",
4390
4395
  ]
@@ -4832,6 +4837,7 @@ dependencies = [
4832
4837
  "axum",
4833
4838
  "base64 0.22.1",
4834
4839
  "brotli",
4840
+ "bytes",
4835
4841
  "bzip2",
4836
4842
  "chrono",
4837
4843
  "clap",
@@ -4895,6 +4901,7 @@ dependencies = [
4895
4901
  "toml 0.8.23",
4896
4902
  "tracing",
4897
4903
  "tracing-appender",
4904
+ "tracing-core",
4898
4905
  "tracing-opentelemetry",
4899
4906
  "tracing-subscriber",
4900
4907
  "tracing-test",
@@ -6063,6 +6070,19 @@ dependencies = [
6063
6070
  "unicode-ident",
6064
6071
  ]
6065
6072
 
6073
+ [[package]]
6074
+ name = "wasm-streams"
6075
+ version = "0.4.2"
6076
+ source = "registry+https://github.com/rust-lang/crates.io-index"
6077
+ checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
6078
+ dependencies = [
6079
+ "futures-util",
6080
+ "js-sys",
6081
+ "wasm-bindgen",
6082
+ "wasm-bindgen-futures",
6083
+ "web-sys",
6084
+ ]
6085
+
6066
6086
  [[package]]
6067
6087
  name = "web-sys"
6068
6088
  version = "0.3.81"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 5.0.0b2
3
+ Version: 5.0.0b3
4
4
  Summary: Snowflake DB driver for Python (Private Preview)
5
5
  Project-URL: Homepage, https://github.com/snowflakedb/universal-driver
6
6
  Project-URL: Bug Reports, https://github.com/snowflakedb/universal-driver/issues
@@ -8,7 +8,7 @@ Project-URL: Source, https://github.com/snowflakedb/universal-driver
8
8
  Project-URL: Documentation, https://github.com/snowflakedb/universal-driver/blob/main/README.md
9
9
  License: Apache-2.0
10
10
  Keywords: api,database,dbapi,pep249,python,snowflake
11
- Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Programming Language :: Python :: 3
@@ -58,11 +58,9 @@ Description-Content-Type: text/markdown
58
58
 
59
59
  # ⚠️ PRIVATE PREVIEW DISCLAIMER ⚠️
60
60
 
61
- **IMPORTANT:** This release contains a **Private Preview** version of the Snowflake DB driver. By downloading or using this software, you acknowledge and agree to the following conditions:
61
+ **This is a beta version of our Universal Driver intended for Snowflake customers who are subject to Snowflake's Preview Terms.**
62
62
 
63
- - **Restricted Access:** Usage of this driver is strictly limited to participants who are actively enrolled in the official Private Preview program for this specific driver. If you have not been explicitly invited and authorized to participate in this preview, do not download, install, or use this software.
64
- - **Testing Environments Only:** For authorized Private Preview partners, this driver is provided solely for evaluation, feedback, and testing purposes. It must be deployed exclusively in isolated, non-production environments.
65
- - **"As-Is" Software:** As a preview release, this driver is still under active development. It may contain bugs, lack features, or undergo significant breaking changes before general availability. It is provided "as-is" without any warranties, service level agreements (SLAs), or official support commitments.
63
+ This driver is not ready for use with production data and may be unstable. Please only use it if you are actively participating in the Universal Driver Private Preview.
66
64
 
67
65
  ## Development
68
66
 
@@ -1,10 +1,8 @@
1
1
  # ⚠️ PRIVATE PREVIEW DISCLAIMER ⚠️
2
2
 
3
- **IMPORTANT:** This release contains a **Private Preview** version of the Snowflake DB driver. By downloading or using this software, you acknowledge and agree to the following conditions:
3
+ **This is a beta version of our Universal Driver intended for Snowflake customers who are subject to Snowflake's Preview Terms.**
4
4
 
5
- - **Restricted Access:** Usage of this driver is strictly limited to participants who are actively enrolled in the official Private Preview program for this specific driver. If you have not been explicitly invited and authorized to participate in this preview, do not download, install, or use this software.
6
- - **Testing Environments Only:** For authorized Private Preview partners, this driver is provided solely for evaluation, feedback, and testing purposes. It must be deployed exclusively in isolated, non-production environments.
7
- - **"As-Is" Software:** As a preview release, this driver is still under active development. It may contain bugs, lack features, or undergo significant breaking changes before general availability. It is provided "as-is" without any warranties, service level agreements (SLAs), or official support commitments.
5
+ This driver is not ready for use with production data and may be unstable. Please only use it if you are actively participating in the Universal Driver Private Preview.
8
6
 
9
7
  ## Development
10
8
 
@@ -113,11 +113,16 @@ impl PythonGenerator {
113
113
  content += &self.generate_server_class(&service, &package);
114
114
  }
115
115
 
116
- // Generate client classes
117
- for service in file.service {
116
+ // Generate (synchronous) client classes
117
+ for service in file.service.clone() {
118
118
  content += &self.generate_client_class(&service, &package);
119
119
  }
120
120
 
121
+ // Generate async client classes (separate code path from the sync clients)
122
+ for service in file.service {
123
+ content += &self.generate_async_client_class(&service, &package);
124
+ }
125
+
121
126
  result.add_file(
122
127
  PathBuf::from(format!(r#"{package}_services.py"#)),
123
128
  GeneratedFile::new(content),
@@ -311,6 +316,96 @@ class ProtoError(Exception):
311
316
 
312
317
  content
313
318
  }
319
+
320
+ /// Generate the asynchronous client for a service.
321
+ ///
322
+ /// This is a dedicated client for the async code path — separate from the
323
+ /// synchronous ``{service}Client``. Each method awaits
324
+ /// ``transport.handle_message_async``, which today offloads the blocking
325
+ /// FFI call to a worker thread via ``asyncio.to_thread``. A non-blocking,
326
+ /// callback-based FFI will replace that hop later without changing this
327
+ /// client's surface.
328
+ fn generate_async_client_class(
329
+ &self,
330
+ service: &crate::protobuf::ServiceDescriptorProto,
331
+ package: &str,
332
+ ) -> String {
333
+ let service_name = service.name.as_ref().unwrap_or(&String::new()).clone();
334
+ let service_error = service
335
+ .options
336
+ .as_ref()
337
+ .and_then(|o| o.service_error.as_ref());
338
+
339
+ let mut content = format!(
340
+ r#"class Async{service_name}Client:
341
+ """Asynchronous {service_name} client.
342
+
343
+ Each RPC awaits ``transport.handle_message_async``, which runs the
344
+ blocking FFI call on a worker thread so the event loop is not blocked.
345
+ This is a separate code path from the synchronous ``{service_name}Client``.
346
+ """
347
+
348
+ def __init__(self, transport, error_handler=None):
349
+ """
350
+ Args:
351
+ transport: Transport layer that handles message serialization.
352
+ error_handler: Optional callable that converts a proto-layer exception
353
+ into a public exception. Must **return** the converted exception
354
+ (not raise it); ``_raise_error`` takes care of raising.
355
+ """
356
+ self._transport = transport
357
+ self._error_handler = error_handler
358
+
359
+ def _raise_error(self, exc):
360
+ if self._error_handler is not None:
361
+ raise self._error_handler(exc) from None
362
+ raise exc
363
+
364
+ "#
365
+ );
366
+
367
+ for method in &service.method {
368
+ let name = camel_to_snake_case(method.name.as_ref().unwrap_or(&String::new()));
369
+ let input_type = to_rust_message_name(
370
+ &package.to_string(),
371
+ &method.input_type.as_ref().unwrap_or(&String::new()).clone(),
372
+ );
373
+ let output_type = to_rust_message_name(
374
+ &package.to_string(),
375
+ &method
376
+ .output_type
377
+ .as_ref()
378
+ .unwrap_or(&String::new())
379
+ .clone(),
380
+ );
381
+ let method_error = method
382
+ .options
383
+ .as_ref()
384
+ .and_then(|o| o.method_error.as_ref());
385
+ let empty_error = "EmptyError".to_string();
386
+ let error_type = method_error.or(service_error).unwrap_or(&empty_error);
387
+
388
+ content += &format!(
389
+ r#" async def {name}(self, request: {input_type}) -> {output_type}:
390
+ (code, response_bytes) = await self._transport.handle_message_async('{service_name}', '{name}', request.SerializeToString())
391
+ if code == 0:
392
+ response = {output_type}()
393
+ response.ParseFromString(response_bytes)
394
+ return response
395
+ elif code == 1:
396
+ error = {error_type}()
397
+ error.ParseFromString(response_bytes)
398
+ self._raise_error(ProtoApplicationException(error))
399
+ elif code == 2:
400
+ self._raise_error(ProtoTransportException(str(response_bytes)))
401
+ else:
402
+ self._raise_error(ProtoTransportException(f"Unknown error code: %s", code))
403
+ "#
404
+ );
405
+ }
406
+
407
+ content
408
+ }
314
409
  }
315
410
 
316
411
  impl Default for PythonGenerator {
@@ -230,7 +230,7 @@ use prost::Message;
230
230
  Ok(input) => input,
231
231
  Err(e) => return Err(ProtoError::Transport(e.to_string())),
232
232
  }};
233
- let result = self.{name}(input).await;
233
+ let result = Box::pin(self.{name}(input)).await;
234
234
  match result {{
235
235
  Ok(output) => Ok(output.encode_to_vec()),
236
236
  Err(e) => Err(ProtoError::Application(e.encode_to_vec())),
@@ -72,21 +72,89 @@ fn download_url() -> String {
72
72
 
73
73
  fn download_and_install(dest: &Path) {
74
74
  let url = download_url();
75
- eprintln!("Downloading protoc v{PROTOC_VERSION} from {url}");
76
75
 
77
76
  std::fs::create_dir_all(dest).expect("Failed to create protoc cache directory");
78
77
  let zip_path = dest.join("protoc.zip");
79
78
 
80
- let status = std::process::Command::new("curl")
81
- .args(["-sSL", "--fail", "-o"])
82
- .arg(&zip_path)
83
- .arg(&url)
84
- .status()
85
- .expect("Failed to execute curl. Install curl or set the PROTOC env var.");
79
+ // Two layers of retry guard the build against transient GitHub Releases failures
80
+ // (recurring HTTP 5xx, slow connect, partial download):
81
+ //
82
+ // 1. `curl --retry 5` already covers the failure mode we actually see —
83
+ // curl's documented default treats HTTP 408/429/500/502/503/504 as
84
+ // transient and retries them with its own backoff, so a 504 from
85
+ // releases.githubusercontent.com is absorbed inside a single curl
86
+ // invocation without any extra flags. We intentionally do NOT pass
87
+ // `--retry-all-errors` (added in curl 7.71): the manylinux build
88
+ // container ships an older curl that hard-errors on unknown options
89
+ // (exit 2), which would push every attempt into the outer loop and
90
+ // effectively disable retries. Sticking to flags supported back to
91
+ // ~7.52 (`--retry`, `--retry-delay`, `--retry-max-time`, plus the
92
+ // connect/total timeouts) keeps every CI runner (macOS-15, ubuntu-24,
93
+ // Windows-2022, manylinux_2_*) on the same code path.
94
+ //
95
+ // 2. An outer exponential-backoff loop (1s → 2s → 4s → 8s, 5 attempts total)
96
+ // catches the failures curl's own retry doesn't: partial downloads that
97
+ // leave a corrupt zip on disk, transient DNS/SSL handshake errors that
98
+ // curl exits on without retrying, and any future failure class we
99
+ // haven't enumerated. Each outer attempt starts by deleting the
100
+ // previous zip so extract_zip never sees a half-written file.
101
+ //
102
+ // Total worst-case stall ≈ 1+2+4+8 = 15s of outer backoff plus curl's
103
+ // internal retry budget (capped by --retry-max-time at 120s) — well under
104
+ // any CI job budget, and far cheaper than rerunning the whole release
105
+ // pipeline on a 504.
106
+ const MAX_ATTEMPTS: u32 = 5;
107
+ let mut last_status = None;
108
+ for attempt in 1..=MAX_ATTEMPTS {
109
+ eprintln!(
110
+ "Downloading protoc v{PROTOC_VERSION} from {url} (attempt {attempt}/{MAX_ATTEMPTS})"
111
+ );
112
+
113
+ // Best-effort cleanup of any partial download from the previous attempt.
114
+ // A corrupt zip would otherwise survive into extract_zip() and fail there.
115
+ let _ = std::fs::remove_file(&zip_path);
116
+
117
+ let status = std::process::Command::new("curl")
118
+ .args([
119
+ "-sSL",
120
+ "--fail",
121
+ "--retry",
122
+ "5",
123
+ "--retry-delay",
124
+ "2",
125
+ "--retry-max-time",
126
+ "120",
127
+ "--connect-timeout",
128
+ "30",
129
+ "--max-time",
130
+ "300",
131
+ "-o",
132
+ ])
133
+ .arg(&zip_path)
134
+ .arg(&url)
135
+ .status()
136
+ .expect("Failed to execute curl. Install curl or set the PROTOC env var.");
137
+
138
+ if status.success() {
139
+ last_status = Some(status);
140
+ break;
141
+ }
142
+ last_status = Some(status);
143
+
144
+ if attempt < MAX_ATTEMPTS {
145
+ let backoff_ms = 1_000u64 * (1u64 << (attempt - 1));
146
+ eprintln!("curl failed (status: {status}); retrying in {backoff_ms} ms");
147
+ std::thread::sleep(std::time::Duration::from_millis(backoff_ms));
148
+ }
149
+ }
86
150
 
151
+ let status = last_status.expect("curl loop must produce at least one status");
87
152
  assert!(
88
153
  status.success(),
89
- "Failed to download protoc from {url} (curl exit status: {status})"
154
+ "Failed to download protoc from {url} after {MAX_ATTEMPTS} attempts \
155
+ (last curl exit status: {status}). \
156
+ Set the PROTOC env var to a local protoc binary to bypass the download \
157
+ (useful in offline or locked-down environments).",
90
158
  );
91
159
 
92
160
  extract_zip(&zip_path, dest);
@@ -332,6 +332,7 @@ message ConnectionGetInfoResponse {
332
332
  optional string schema = 10;
333
333
  optional string warehouse = 11;
334
334
  optional string master_token = 12;
335
+ optional string user_agent = 13;
335
336
  }
336
337
 
337
338
  message ConnectionGetObjectsRequest {
@@ -422,6 +423,19 @@ message ConnectionGetAllParametersResponse {
422
423
  map<string, string> parameters = 1;
423
424
  }
424
425
 
426
+ // Reads the Snowflake server version cached from the login response.
427
+ // Distinct from ConnectionGetInfo (which aggregates ~12 fields and takes
428
+ // several locks) so SQLGetInfo(SQL_DBMS_VER) / JDBC getDatabaseProductVersion
429
+ // stay cheap even when callers poll them per-statement.
430
+ message ConnectionGetServerVersionRequest {
431
+ ConnectionHandle conn_handle = 1;
432
+ }
433
+
434
+ message ConnectionGetServerVersionResponse {
435
+ // Empty when called before login completes.
436
+ optional string server_version = 1;
437
+ }
438
+
425
439
  message ConnectionValidateOptionsRequest {
426
440
  ConnectionHandle conn_handle = 1;
427
441
  }
@@ -467,6 +481,7 @@ message ConnectionTokenResponse {
467
481
  // Heartbeat request to validate that the connection and session are still alive.
468
482
  message ConnectionHeartbeatRequest {
469
483
  ConnectionHandle conn_handle = 1;
484
+ optional uint32 timeout_seconds = 2; // 0 / absent = use default (300s)
470
485
  }
471
486
 
472
487
  message ConnectionHeartbeatResponse {
@@ -534,6 +549,7 @@ message PrepareResult {
534
549
  int32 number_of_binds = 5;
535
550
  string query = 6;
536
551
  optional string sql_state = 7;
552
+ bool array_bind_supported = 8;
537
553
  }
538
554
 
539
555
  message StatementPrepareRequest {
@@ -705,6 +721,15 @@ message ConfigSection {
705
721
  message ConnectionSetOptionsRequest {
706
722
  ConnectionHandle conn_handle = 1;
707
723
  map<string, ConfigSetting> options = 2;
724
+ // True when the caller invoked connect() with zero connection-identifying
725
+ // options (the legacy Python driver's `is_kwargs_empty` condition). The core
726
+ // then falls back to the default connection profile from connections.toml,
727
+ // honoring SNOWFLAKE_DEFAULT_CONNECTION_NAME and config.toml's
728
+ // `default_connection_name`. Language wrappers MUST compute this from the
729
+ // raw caller input *before* injecting any bookkeeping params (application,
730
+ // client_app_id, …); a value of `false` (the default) means "caller supplied
731
+ // something", so do not load the default profile.
732
+ bool no_connection_details = 3;
708
733
  }
709
734
 
710
735
  message ConnectionSetOptionsResponse {
@@ -748,8 +773,19 @@ message ConnectionGetQueryStatusRequest {
748
773
  message ConnectionGetQueryStatusResponse {
749
774
  // Status name as returned by the server (e.g. "RUNNING", "SUCCESS", "FAILED_WITH_ERROR")
750
775
  string status_name = 1;
751
- optional int32 error_code = 2;
752
- optional string error_message = 3;
776
+ int64 end_time = 2;
777
+ optional int32 error_code = 3;
778
+ optional string error_message = 4;
779
+ string query_id = 5;
780
+ int64 session_id = 6;
781
+ string sql_text = 7;
782
+ int64 start_time = 8;
783
+ string state = 9;
784
+ int32 total_duration = 10;
785
+ optional string warehouse_external_size = 11;
786
+ int64 warehouse_id = 12;
787
+ optional string warehouse_name = 13;
788
+ optional string warehouse_server_type = 14;
753
789
  }
754
790
 
755
791
  message ConfigGetPathsRequest {
@@ -812,6 +848,10 @@ service DatabaseDriver {
812
848
  rpc ConnectionGetParameter(ConnectionGetParameterRequest) returns (ConnectionGetParameterResponse);
813
849
  // gets all resolved session parameters at once
814
850
  rpc ConnectionGetAllParameters(ConnectionGetAllParametersRequest) returns (ConnectionGetAllParametersResponse);
851
+ // returns the Snowflake server version cached from the login response
852
+ // (`serverVersion` in `/session/v1/login-request`); backs
853
+ // `SQLGetInfo(SQL_DBMS_VER)` and `getDatabaseProductVersion`
854
+ rpc ConnectionGetServerVersion(ConnectionGetServerVersionRequest) returns (ConnectionGetServerVersionResponse);
815
855
  // pre-flight validation of connection options - reports all issues at once
816
856
  rpc ConnectionValidateOptions(ConnectionValidateOptionsRequest) returns (ConnectionValidateOptionsResponse);
817
857
  // Fetch the result of a previously executed query by Snowflake Query ID
@@ -10,7 +10,7 @@ readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
11
11
  keywords = ["database", "api", "pep249", "dbapi", "python", "snowflake"]
12
12
  classifiers = [
13
- "Development Status :: 3 - Alpha",
13
+ "Development Status :: 4 - Beta",
14
14
  "Intended Audience :: Developers",
15
15
  "Topic :: Database",
16
16
  "Topic :: Software Development :: Libraries :: Python Modules",
@@ -147,6 +147,7 @@ markers = [
147
147
  "slow: marks tests as slow (e.g., full sdist install with Rust compilation)",
148
148
  "skip_for_json_result_set(reason: str=''): skip when QUERY_RESULT_FORMAT=JSON (tests requiring Arrow precision)",
149
149
  "require_vpn: test requires VPN access (skipped outside Jenkins CI)",
150
+ "requires_browser: test requires headless browser container (skipped unless SF_TEST_HEADLESS_BROWSER=true)",
150
151
  "flaky: marks tests as flaky; skipped by default, run explicitly via the flaky CI job or `-m flaky` locally",
151
152
  ]
152
153
  log_cli = false
@@ -15,6 +15,7 @@ protobuf = ["prost", "proto_utils"]
15
15
  vendored-openssl = ["openssl/vendored"]
16
16
  auth_mfa_e2e = []
17
17
  auth_oauth_e2e = []
18
+ gcs_e2e = []
18
19
  perf_timing = []
19
20
  test-utils = []
20
21
  cli = ["clap"]
@@ -26,10 +27,12 @@ opentelemetry_sdk = { version = "0.30.0", default-features = false, features = [
26
27
  opentelemetry-otlp = { version = "0.30.0" }
27
28
  opentelemetry-semantic-conventions = { version = "0.30.0" }
28
29
  tracing = "0.1.41"
30
+ tracing-core = "0.1.34"
29
31
  tracing-appender = "0.2"
30
32
  tracing-subscriber = { version = "0.3.19", features = ["fmt", "env-filter"] }
31
33
  rand = "0.9.2"
32
- reqwest = { version = "0.12.23", features = ["json", "rustls-tls", "gzip"] }
34
+ bytes = "1"
35
+ reqwest = { version = "0.12.23", features = ["json", "rustls-tls", "gzip", "stream"] }
33
36
  serde = { version = "1.0.219", features = ["derive"] }
34
37
  serde_json = { version = "1.0.143", features = ["raw_value"] }
35
38
  futures = "0.3"
@@ -39,8 +42,8 @@ tokio-stream = "0.1"
39
42
  toml = "0.8"
40
43
  uuid = { version = "1.18", features = ["v4"] }
41
44
  base64 = "0.22.1"
42
- arrow = { version = "56.0.0", features = ["ffi"] }
43
- arrow-ipc = "56.0.0"
45
+ arrow = { version = ">=54.0.0, <59", features = ["ffi"] }
46
+ arrow-ipc = ">=54.0.0, <59"
44
47
  flate2 = "1.1.2"
45
48
  openssl = "0.10.73"
46
49
  jwt = { version = "0.16.0", features = ["openssl"] }
@@ -160,6 +163,10 @@ path = "tests/logging_custom_file_tests.rs"
160
163
  name = "logging_query_tests"
161
164
  path = "tests/logging_query_tests.rs"
162
165
 
166
+ [[test]]
167
+ name = "byte_source_roundtrip"
168
+ path = "tests/byte_source_roundtrip.rs"
169
+
163
170
  [[test]]
164
171
  name = "e2e_tests"
165
172
  path = "tests/e2e/mod.rs"