snowflake-connector-python 4.2.0__tar.gz → 4.3.0__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 (302) hide show
  1. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/DESCRIPTION.md +11 -1
  2. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/MANIFEST.in +1 -0
  3. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/PKG-INFO +12 -2
  4. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/README.md +3 -1
  5. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/_utils.py +60 -2
  6. snowflake_connector_python-4.3.0/src/snowflake/connector/aio/README.md +88 -0
  7. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/__init__.py +0 -4
  8. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_connection.py +25 -13
  9. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/arrow_context.py +8 -4
  10. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/_auth.py +4 -2
  11. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/_oauth_base.py +21 -0
  12. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/keypair.py +5 -2
  13. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/oauth_code.py +5 -0
  14. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/oauth_credentials.py +3 -0
  15. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/connection.py +37 -10
  16. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/constants.py +1 -0
  17. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/converter.py +3 -2
  18. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/cursor.py +51 -9
  19. snowflake_connector_python-4.3.0/src/snowflake/connector/interval_util.py +26 -0
  20. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +14 -1
  21. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +13 -7
  22. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +4 -1
  23. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +3 -3
  24. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +2 -1
  25. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +9 -3
  26. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/ocsp_asn1crypto.py +1 -1
  27. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/ocsp_snowflake.py +36 -11
  28. snowflake_connector_python-4.3.0/src/snowflake/connector/os_details.py +88 -0
  29. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/result_batch.py +68 -13
  30. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/result_set.py +26 -5
  31. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/telemetry.py +1 -0
  32. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/test_util.py +2 -2
  33. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/_collections.py +8 -0
  34. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/_version.py +16 -3
  35. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/connection.py +6 -0
  36. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +1 -0
  37. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +6 -1
  38. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +8 -8
  39. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +6 -8
  40. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +2 -2
  41. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +1 -1
  42. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +2 -2
  43. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +4 -4
  44. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +9 -11
  45. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/response.py +276 -103
  46. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/request.py +11 -14
  47. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +16 -0
  48. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +11 -8
  49. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/version.py +1 -1
  50. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake_connector_python.egg-info/PKG-INFO +12 -2
  51. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +2 -0
  52. snowflake_connector_python-4.2.0/src/snowflake/connector/interval_util.py +0 -17
  53. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/CONTRIBUTING.md +0 -0
  54. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/LICENSE.txt +0 -0
  55. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/NOTICE +0 -0
  56. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/SECURITY.md +0 -0
  57. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/pyproject.toml +0 -0
  58. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/setup.cfg +0 -0
  59. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/setup.py +0 -0
  60. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/__init__.py +0 -0
  61. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  62. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/_sql_util.py +0 -0
  63. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
  64. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
  65. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_cursor.py +0 -0
  66. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_description.py +0 -0
  67. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
  68. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
  69. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
  70. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_network.py +0 -0
  71. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
  72. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
  73. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
  74. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
  75. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_result_set.py +0 -0
  76. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
  77. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_session_manager.py +0 -0
  78. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
  79. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
  80. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_time_util.py +0 -0
  81. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/_wif_util.py +0 -0
  82. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
  83. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_auth.py +0 -0
  84. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
  85. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
  86. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
  87. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
  88. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
  89. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
  90. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
  91. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
  92. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
  93. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
  94. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
  95. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
  96. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
  97. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/__init__.py +0 -0
  98. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  99. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  100. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/default.py +0 -0
  101. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  102. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  103. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/oauth.py +0 -0
  104. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/okta.py +0 -0
  105. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/pat.py +0 -0
  106. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  107. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
  108. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
  109. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  110. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/backoff_policies.py +0 -0
  111. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  112. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/cache.py +0 -0
  113. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/compat.py +0 -0
  114. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/config_manager.py +0 -0
  115. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
  116. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  117. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/converter_null.py +0 -0
  118. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  119. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/crl.py +0 -0
  120. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/crl_cache.py +0 -0
  121. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/dbapi.py +0 -0
  122. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/description.py +0 -0
  123. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  124. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/encryption_util.py +0 -0
  125. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/errorcode.py +0 -0
  126. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/errors.py +0 -0
  127. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  128. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  129. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/feature.py +0 -0
  130. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/file_compression_type.py +0 -0
  131. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/file_lock.py +0 -0
  132. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
  133. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/file_util.py +0 -0
  134. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  135. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  136. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/local_storage_client.py +0 -0
  137. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/log_configuration.py +0 -0
  138. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  139. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  140. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/minicore/__init__.py +0 -0
  141. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  142. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  143. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  144. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  145. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  146. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  147. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  148. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  149. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  150. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  151. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  152. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  153. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  154. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  155. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  156. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  157. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  158. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  159. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  160. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  161. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  162. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  163. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  164. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  165. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  166. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  167. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  168. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  169. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  170. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  171. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  172. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  173. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  174. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  175. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  176. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  177. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  178. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  179. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  180. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  181. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  182. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  183. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  184. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  185. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  186. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  187. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  188. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  189. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  190. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  191. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  192. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  193. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  194. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  195. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  196. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  197. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  198. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  199. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  200. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  201. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  202. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  203. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  204. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  205. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  206. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  207. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  208. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  209. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  210. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  211. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  212. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  213. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  214. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  215. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  216. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  217. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  218. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  219. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  220. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  221. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  222. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  223. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  224. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  225. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  226. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  227. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/network.py +0 -0
  228. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/options.py +0 -0
  229. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/pandas_tools.py +0 -0
  230. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/platform_detection.py +0 -0
  231. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/proxy.py +0 -0
  232. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/py.typed +0 -0
  233. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  234. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/secret_detector.py +0 -0
  235. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/session_manager.py +0 -0
  236. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/sf_dirs.py +0 -0
  237. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  238. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/sfdatetime.py +0 -0
  239. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/snow_logging.py +0 -0
  240. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/sqlstate.py +0 -0
  241. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  242. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  243. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/storage_client.py +0 -0
  244. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  245. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/time_util.py +0 -0
  246. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/token_cache.py +0 -0
  247. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/tool/__init__.py +0 -0
  248. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  249. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  250. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  251. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  252. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/url_util.py +0 -0
  253. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/util_text.py +0 -0
  254. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  255. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  256. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  257. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  258. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  259. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  260. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  261. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  262. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  263. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  264. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  265. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  266. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  267. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  268. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  269. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
  270. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  271. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  272. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  273. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  274. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  275. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  276. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
  277. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
  278. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  279. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  280. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
  281. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
  282. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  283. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  284. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
  285. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
  286. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
  287. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  288. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  289. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  290. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  291. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  292. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  293. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  294. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  295. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
  296. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  297. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake/connector/wif_util.py +0 -0
  298. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  299. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  300. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  301. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake_connector_python.egg-info/requires.txt +0 -0
  302. {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.3.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,10 +7,20 @@ https://docs.snowflake.com/
7
7
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
8
8
 
9
9
  # Release Notes
10
+ - v4.3.0(February 12,2026)
11
+ - Ensured proper list conversion - the converter runs to_snowflake on all list elements.
12
+ - Made the parameter `server_session_keep_alive` in `SnowflakeConnection` skip checking for pending async queries, providing faster connection close times especially when many async queries are executed.
13
+ - Fix string representation of INTERVAL YEAR and INTERVAL MONTH types.
14
+ - Log a warning when using http protocol for OAuth urls.
15
+ - Deprecated support for custom revocation error classes in OCSP response cache deserialization. By default, only `RevocationCheckError` exceptions are deserialized from OCSP cache. Custom exception classes can be temporarily enabled by setting the `SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS` environment variable to `true` or `1`, but this support will be removed in a future release.
16
+ - Bumped up vendored `urllib3` to `2.6.3`
17
+ - Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema incosistency between batches.
18
+
10
19
  - v4.2.0(January 07,2026)
11
20
  - Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
12
21
  - Added support for injecting SPCS service identifier token (`SPCS_TOKEN`) into login requests when present in SPCS containers.
13
- - Introduced shared library for extended telemetry to identify and prepare testing platform for native rust extensions.
22
+ - Introduced shared library([source code](https://github.com/snowflakedb/universal-driver/tree/main/sf_mini_core)) for extended telemetry to identify and prepare testing platform for native rust extensions.
23
+ - Added `private_key_passphrase` connection parameter for key pair authentication with encrypted private keys.
14
24
 
15
25
  - v4.1.1(December 12,2025)
16
26
  - Relaxed pandas dependency requirements for Python below 3.12.
@@ -4,6 +4,7 @@ include LICENSE.txt
4
4
  include NOTICE
5
5
  include pyproject.toml
6
6
  include src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt
7
+ include src/snowflake/connector/aio/README.md
7
8
  recursive-include src/snowflake/connector py.typed *.py *.pyx *.js
8
9
  recursive-include src/snowflake/connector/vendored LICENSE*
9
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.2.0
3
+ Version: 4.3.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -93,10 +93,20 @@ https://docs.snowflake.com/
93
93
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
94
94
 
95
95
  # Release Notes
96
+ - v4.3.0(February 12,2026)
97
+ - Ensured proper list conversion - the converter runs to_snowflake on all list elements.
98
+ - Made the parameter `server_session_keep_alive` in `SnowflakeConnection` skip checking for pending async queries, providing faster connection close times especially when many async queries are executed.
99
+ - Fix string representation of INTERVAL YEAR and INTERVAL MONTH types.
100
+ - Log a warning when using http protocol for OAuth urls.
101
+ - Deprecated support for custom revocation error classes in OCSP response cache deserialization. By default, only `RevocationCheckError` exceptions are deserialized from OCSP cache. Custom exception classes can be temporarily enabled by setting the `SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS` environment variable to `true` or `1`, but this support will be removed in a future release.
102
+ - Bumped up vendored `urllib3` to `2.6.3`
103
+ - Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema incosistency between batches.
104
+
96
105
  - v4.2.0(January 07,2026)
97
106
  - Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
98
107
  - Added support for injecting SPCS service identifier token (`SPCS_TOKEN`) into login requests when present in SPCS containers.
99
- - Introduced shared library for extended telemetry to identify and prepare testing platform for native rust extensions.
108
+ - Introduced shared library([source code](https://github.com/snowflakedb/universal-driver/tree/main/sf_mini_core)) for extended telemetry to identify and prepare testing platform for native rust extensions.
109
+ - Added `private_key_passphrase` connection parameter for key pair authentication with encrypted private keys.
100
110
 
101
111
  - v4.1.1(December 12,2025)
102
112
  - Relaxed pandas dependency requirements for Python below 3.12.
@@ -103,6 +103,8 @@ To ensure the authenticity and integrity of the Python package, follow the steps
103
103
  Verified OK
104
104
  ````
105
105
 
106
- ## NOTE
106
+ ## Notes
107
107
 
108
108
  This library currently does not support GCP regional endpoints. Please ensure that any workloads using through this library do not require support for regional endpoints on GCP. If you have questions about this, please contact [Snowflake Support](https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge).
109
+
110
+ The driver uses Rust library called sf_mini_core, you can find its source code [here](https://github.com/snowflakedb/universal-driver/tree/main/sf_mini_core)
@@ -7,6 +7,7 @@ import os
7
7
  import platform
8
8
  import string
9
9
  import threading
10
+ import time
10
11
  from enum import Enum
11
12
  from inspect import stack
12
13
  from pathlib import Path
@@ -136,11 +137,23 @@ def get_spcs_token() -> str | None:
136
137
  return None
137
138
 
138
139
 
140
+ class _NanoarrowLoader:
141
+ def __init__(self):
142
+ self._error: Exception | None = None
143
+
144
+ def set_load_error(self, err: Exception):
145
+ self._error = err
146
+
147
+ def get_load_error(self) -> str:
148
+ return str(self._error)
149
+
150
+
139
151
  class _CoreLoader:
140
152
  def __init__(self):
141
153
  self._version: bytes | None = None
142
154
  self._error: Exception | None = None
143
155
  self._path: str | None = None
156
+ self._load_time: float | None = None
144
157
 
145
158
  @staticmethod
146
159
  def _detect_os() -> str:
@@ -229,7 +242,7 @@ class _CoreLoader:
229
242
  return "libsf_mini_core.so"
230
243
 
231
244
  @staticmethod
232
- def _get_core_path() -> Path:
245
+ def _get_core_path():
233
246
  """Get the path to the minicore library for the current platform."""
234
247
  subdir = _CoreLoader._get_platform_subdir()
235
248
  lib_name = _CoreLoader._get_lib_name()
@@ -253,20 +266,49 @@ class _CoreLoader:
253
266
  core = ctypes.CDLL(str(lib_path))
254
267
  return core
255
268
 
269
+ def get_present_binaries(self) -> str:
270
+ present_binaries = []
271
+ try:
272
+ minicore_files = importlib.resources.files("snowflake.connector.minicore")
273
+ # Iterate through all items in the minicore module
274
+ for item in minicore_files.iterdir():
275
+ # Skip non-platform directories like __pycache__
276
+ if item.is_dir() and not item.name.startswith("__"):
277
+ # This is a platform subdirectory
278
+ platform_name = item.name
279
+ try:
280
+ # List all files in this subdirectory
281
+ for binary_file in item.iterdir():
282
+ if binary_file.is_file():
283
+ # Store as "platform/filename"
284
+ present_binaries.append(
285
+ f"{platform_name}/{binary_file.name}"
286
+ )
287
+ except Exception as e:
288
+ logger.debug(f"Error listing binaries in {platform_name}: {e}")
289
+ except Exception as e:
290
+ logger.debug(f"Error populating present binaries: {e}")
291
+
292
+ return ",".join(present_binaries)
293
+
256
294
  def _is_core_disabled(self) -> bool:
257
295
  value = str(os.getenv("SNOWFLAKE_DISABLE_MINICORE", None)).lower()
258
296
  return value in ["1", "true"]
259
297
 
260
298
  def _load(self) -> None:
299
+ start_time = time.perf_counter()
261
300
  try:
262
301
  path = self._get_core_path()
302
+ self._path = str(path)
263
303
  core = self._load_minicore(path)
264
304
  self._register_functions(core)
265
305
  self._version = core.sf_core_full_version()
266
306
  self._error = None
267
- self._path = str(path)
268
307
  except Exception as err:
269
308
  self._error = err
309
+ end_time = time.perf_counter()
310
+ # Store load time in milliseconds (with sub-millisecond precision)
311
+ self._load_time = (end_time - start_time) * 1000
270
312
 
271
313
  def load(self):
272
314
  """Spawn a separate thread to load the minicore library (non-blocking)."""
@@ -291,8 +333,13 @@ class _CoreLoader:
291
333
  def get_file_name(self) -> str:
292
334
  return self._path
293
335
 
336
+ def get_load_time(self) -> float | None:
337
+ """Return the time it took to load the minicore binary in milliseconds."""
338
+ return self._load_time
339
+
294
340
 
295
341
  _core_loader = _CoreLoader()
342
+ _nanoarrow_loader = _NanoarrowLoader()
296
343
 
297
344
 
298
345
  def build_minicore_usage_for_session() -> dict[str, str | None]:
@@ -308,5 +355,16 @@ def build_minicore_usage_for_telemetry() -> dict[str, str | None]:
308
355
  "OS": OPERATING_SYSTEM,
309
356
  "OS_VERSION": OS_VERSION,
310
357
  "CORE_LOAD_ERROR": _core_loader.get_load_error(),
358
+ "CORE_BINARIES_PRESENT": _core_loader.get_present_binaries(),
359
+ "CORE_LOAD_TIME": _core_loader.get_load_time(),
311
360
  **build_minicore_usage_for_session(),
312
361
  }
362
+
363
+
364
+ def build_nanoarrow_usage_for_telemetry() -> dict[str, str | None]:
365
+ return {
366
+ "OS": OPERATING_SYSTEM,
367
+ "OS_VERSION": OS_VERSION,
368
+ "NANOARROW_LOAD_ERROR": _nanoarrow_loader.get_load_error(),
369
+ "ISA": ISA,
370
+ }
@@ -0,0 +1,88 @@
1
+ # Notice
2
+
3
+ **This component is a Preview feature provided for experimental purposes only.
4
+ It is provided "AS IS" and without warranty of any kind. This module is not
5
+ supported by Snowflake Support. Use of this code is at your own risk and it
6
+ is not intended for production environments.**
7
+
8
+ ## Features NOT Supported
9
+
10
+
11
+ - ❌ `conn.errorhandler` (get/set) - no support for async errorhandlers
12
+ - ❌ `enable_connection_diag=True` - no connection diagnostic
13
+ - ❌ `authenticator='PAT_WITH_EXTERNAL_SESSION'` - not supported
14
+ - ❌ `mfa_callback` / `password_callback` - not supported
15
+ - ❌ `_probe_connection=True` - no connection diagnostic
16
+ - ❌ Raw binary response handling - not supported
17
+ - ❌ CRL (Certificate Revocation List) - not supported (only OCSP is supported)
18
+
19
+ ## Installation & Import
20
+
21
+ Using aio version requires additional installation of `aiohttp` dependency.
22
+
23
+ ```python
24
+ # Same package, different import
25
+ from snowflake.connector.aio import connect, SnowflakeConnection, DictCursor
26
+ ```
27
+
28
+
29
+ ## Connection Patterns
30
+
31
+
32
+ ```python
33
+ # Pattern 1: Async context manager (recommended)
34
+ async with connect(user='...', password='...', account='...') as conn:
35
+ # Use connection
36
+ pass
37
+
38
+
39
+ # Pattern 2: Direct await
40
+ conn = await connect(user='...', password='...', account='...')
41
+ await conn.close()
42
+
43
+
44
+ # Pattern 3: Manual
45
+ conn = SnowflakeConnection(user='...', password='...', account='...')
46
+ await conn.connect()
47
+ await conn.close()
48
+ ```
49
+
50
+
51
+ ## Basic Operations Comparison
52
+
53
+
54
+ | Operation | Sync | Async |
55
+ |-----------|------|-------|
56
+ | **Connect** | `conn = connect(...)` | `conn = await connect(...)` |
57
+ | **Create cursor** | `cur = conn.cursor()` | `cur = conn.cursor()` *(same)* |
58
+ | **Execute** | `cur.execute(sql)` | `await cur.execute(sql)` |
59
+ | **Fetch one** | `cur.fetchone()` | `await cur.fetchone()` |
60
+ | **Fetch many** | `cur.fetchmany(n)` | `await cur.fetchmany(n)` |
61
+ | **Fetch all** | `cur.fetchall()` | `await cur.fetchall()` |
62
+ | **Iterate** | `for row in cur:` | `async for row in cur:` |
63
+ | **Commit** | `conn.commit()` | `await conn.commit()` |
64
+ | **Rollback** | `conn.rollback()` | `await conn.rollback()` |
65
+ | **Close** | `conn.close()` | `await conn.close()` |
66
+
67
+
68
+ ## Quick Examples
69
+
70
+
71
+ ### Simple Query
72
+
73
+
74
+ ```python
75
+ import asyncio
76
+ from snowflake.connector.aio import connect
77
+
78
+
79
+ async def query_data():
80
+ async with connect(user='...', password='...', account='...') as conn:
81
+ async with conn.cursor() as cur:
82
+ await cur.execute("SELECT * FROM table WHERE id < %s", (100,))
83
+ async for row in cur:
84
+ print(row)
85
+
86
+
87
+ asyncio.run(query_data())
88
+ ```
@@ -1,9 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- # temporarily disable aio - SNOW-2905263
4
- raise ImportError("aio is not supported in this version of the connector")
5
-
6
-
7
3
  from functools import wraps
8
4
  from typing import Any, Coroutine, Generator, Protocol, TypeVar, runtime_checkable
9
5
 
@@ -343,6 +343,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
343
343
 
344
344
  elif self._authenticator == KEY_PAIR_AUTHENTICATOR:
345
345
  private_key = self._private_key
346
+ private_key_passphrase = self._private_key_passphrase
346
347
 
347
348
  if self._private_key_file:
348
349
  private_key = _get_private_bytes_from_file(
@@ -352,6 +353,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
352
353
 
353
354
  self.auth_class = AuthByKeyPair(
354
355
  private_key=private_key,
356
+ private_key_passphrase=private_key_passphrase,
355
357
  timeout=self.login_timeout,
356
358
  backoff_generator=self._backoff_generator,
357
359
  )
@@ -930,22 +932,32 @@ class SnowflakeConnection(SnowflakeConnectionSync):
930
932
 
931
933
  if self.telemetry_enabled:
932
934
  await self._telemetry.close(retry=retry)
933
- if (
934
- await self._all_async_queries_finished()
935
- and not self._server_session_keep_alive
936
- ):
937
- logger.debug("No async queries seem to be running, deleting session")
938
- try:
939
- await self.rest.delete_session(retry=retry)
940
- except Exception as e:
935
+
936
+ if not self._server_session_keep_alive:
937
+ if await self._all_async_queries_finished():
941
938
  logger.debug(
942
- "Exception encountered in deleting session. ignoring...: %s", e
939
+ "No async queries seem to be running, deleting session"
943
940
  )
944
- else:
945
- logger.debug(
946
- "There are {} async queries still running, not deleting session".format(
947
- len(self._async_sfqids)
941
+ try:
942
+ await self.rest.delete_session(retry=retry)
943
+ except Exception as e:
944
+ logger.debug(
945
+ "Exception encountered in deleting session. ignoring...: %s",
946
+ e,
947
+ )
948
+ else:
949
+ logger.debug(
950
+ "There are {} async queries still running, not deleting session".format(
951
+ len(self._async_sfqids)
952
+ )
948
953
  )
954
+ else:
955
+ logger.info(
956
+ "Parameter server_session_keep_alive was set to True - skipping session logout. "
957
+ "If there are any not-finished queries in the current session (session_id: %s) - "
958
+ "they will continue to live in Snowflake and consume credits until they finish. "
959
+ "To cancel them use Monitoring tab in Snowsight or plain SQL.",
960
+ self.session_id,
949
961
  )
950
962
  await self.rest.close()
951
963
  self._rest = None
@@ -165,10 +165,14 @@ class ArrowConverterContext:
165
165
  def DECFLOAT_to_numpy_float64(self, exponent: int, significand: bytes) -> float64:
166
166
  return numpy.float64(self.DECFLOAT_to_decimal(exponent, significand))
167
167
 
168
- def INTERVAL_YEAR_MONTH_to_str(self, months: int) -> str:
169
- return interval_year_month_to_string(months)
170
-
171
- def INTERVAL_YEAR_MONTH_to_numpy_timedelta(self, months: int) -> timedelta64:
168
+ def INTERVAL_YEAR_MONTH_to_str(self, months: int, scale: int) -> str:
169
+ return interval_year_month_to_string(months, scale)
170
+
171
+ def INTERVAL_YEAR_MONTH_to_numpy_timedelta(
172
+ self, months: int, scale: int
173
+ ) -> timedelta64:
174
+ if scale == 1: # interval year
175
+ return numpy.timedelta64(months // 12, "Y")
172
176
  return numpy.timedelta64(months, "M")
173
177
 
174
178
  def INTERVAL_DAY_TIME_int_to_numpy_timedelta(self, nanos: int) -> timedelta64:
@@ -56,6 +56,7 @@ from ..network import (
56
56
  PYTHON_CONNECTOR_USER_AGENT,
57
57
  ReauthenticationRequest,
58
58
  )
59
+ from ..os_details import get_os_details
59
60
  from ..platform_detection import detect_platforms
60
61
  from ..session_manager import BaseHttpConfig, HttpConfig
61
62
  from ..session_manager import SessionManager as SyncSessionManager
@@ -159,6 +160,7 @@ class Auth:
159
160
  platform_detection_timeout_seconds=platform_detection_timeout_seconds,
160
161
  session_manager=session_manager.clone(max_retries=0),
161
162
  ),
163
+ "OS_DETAILS": get_os_details(),
162
164
  **build_minicore_usage_for_session(),
163
165
  },
164
166
  },
@@ -633,8 +635,8 @@ def get_token_from_private_key(
633
635
  from . import AuthByKeyPair
634
636
 
635
637
  auth_instance = AuthByKeyPair(
636
- private_key,
637
- DAY_IN_SECONDS,
638
+ private_key=private_key,
639
+ lifetime_in_seconds=DAY_IN_SECONDS,
638
640
  ) # token valid for 24 hours
639
641
  return auth_instance.prepare(account=account, user=user)
640
642
 
@@ -428,6 +428,27 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
428
428
  "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
429
429
  }
430
430
 
431
+ @staticmethod
432
+ def _log_if_http_in_use(url: str) -> None:
433
+ """Log a warning if the URL uses insecure HTTP protocol.
434
+
435
+ Args:
436
+ url: The URL to check for HTTP usage
437
+ """
438
+ try:
439
+ parsed_url = urllib.parse.urlparse(url)
440
+ if parsed_url.scheme == "http":
441
+ logger.warning(
442
+ "OAuth URL uses insecure HTTP protocol: %s",
443
+ SecretDetector.mask_secrets(url),
444
+ )
445
+ except Exception as e:
446
+ logger.warning(
447
+ "Cannot parse URL: %s. %s",
448
+ SecretDetector.mask_secrets(url),
449
+ e,
450
+ )
451
+
431
452
  @staticmethod
432
453
  def _resolve_proxy_url(
433
454
  connection: SnowflakeConnection, request_url: str
@@ -40,6 +40,7 @@ class AuthByKeyPair(AuthByPlugin):
40
40
  def __init__(
41
41
  self,
42
42
  private_key: bytes | str | RSAPrivateKey,
43
+ private_key_passphrase: bytes | None = None,
43
44
  lifetime_in_seconds: int = LIFETIME,
44
45
  **kwargs,
45
46
  ) -> None:
@@ -72,6 +73,7 @@ class AuthByKeyPair(AuthByPlugin):
72
73
  )
73
74
 
74
75
  self._private_key: bytes | str | RSAPrivateKey | None = private_key
76
+ self._private_key_passphrase: bytes | None = private_key_passphrase
75
77
  self._jwt_token = ""
76
78
  self._jwt_token_exp = 0
77
79
  self._lifetime = timedelta(
@@ -116,13 +118,14 @@ class AuthByKeyPair(AuthByPlugin):
116
118
  try:
117
119
  private_key = load_der_private_key(
118
120
  data=self._private_key,
119
- password=None,
121
+ password=self._private_key_passphrase,
120
122
  backend=default_backend(),
121
123
  )
122
124
  except Exception as e:
123
125
  raise ProgrammingError(
124
126
  msg=f"Failed to load private key: {e}\nPlease provide a valid "
125
- "unencrypted rsa private key in DER format as bytes object",
127
+ "rsa private key in DER format as bytes object. If the key is "
128
+ "encrypted, provide the passphrase via private_key_passphrase",
126
129
  errno=ER_INVALID_PRIVATE_KEY,
127
130
  )
128
131
 
@@ -79,6 +79,11 @@ class AuthByOauthCode(AuthByOAuthBase):
79
79
  host,
80
80
  connection,
81
81
  )
82
+ # Warn if HTTP is used for OAuth URLs
83
+ if authentication_url:
84
+ self._log_if_http_in_use(authentication_url)
85
+ if token_request_url:
86
+ self._log_if_http_in_use(token_request_url)
82
87
 
83
88
  super().__init__(
84
89
  client_id=client_id,
@@ -31,6 +31,9 @@ class AuthByOauthCredentials(AuthByOAuthBase):
31
31
  **kwargs,
32
32
  ) -> None:
33
33
  self._validate_client_credentials_present(client_id, client_secret, connection)
34
+ # Warn if HTTP is used for OAuth token request URL
35
+ if token_request_url:
36
+ self._log_if_http_in_use(token_request_url)
34
37
  super().__init__(
35
38
  client_id=client_id,
36
39
  client_secret=client_secret,
@@ -43,6 +43,7 @@ from ._utils import (
43
43
  _DEFAULT_VALUE_SERVER_DOP_CAP_FOR_FILE_TRANSFER,
44
44
  _VARIABLE_NAME_SERVER_DOP_CAP_FOR_FILE_TRANSFER,
45
45
  build_minicore_usage_for_telemetry,
46
+ build_nanoarrow_usage_for_telemetry,
46
47
  )
47
48
  from .auth import (
48
49
  FIRST_PARTY_AUTHENTICATORS,
@@ -232,6 +233,7 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
232
233
  "passcode_in_password": (False, bool), # Snowflake MFA
233
234
  "passcode": (None, (type(None), str)), # Snowflake MFA
234
235
  "private_key": (None, (type(None), bytes, str, RSAPrivateKey)),
236
+ "private_key_passphrase": (None, (type(None), bytes)),
235
237
  "private_key_file": (None, (type(None), str)),
236
238
  "private_key_file_pwd": (None, (type(None), str, bytes)),
237
239
  "token": (None, (type(None), str)), # OAuth/JWT/PAT/OIDC Token
@@ -682,6 +684,7 @@ class SnowflakeConnection:
682
684
 
683
685
  # get the imported modules from sys.modules
684
686
  self._log_telemetry_imported_packages()
687
+ self._log_nanoarrow_import()
685
688
  self._log_minicore_import()
686
689
  # check SNOW-1218851 for long term improvement plan to refactor ocsp code
687
690
  atexit.register(self._close_at_exit)
@@ -1197,17 +1200,26 @@ class SnowflakeConnection:
1197
1200
  logger.debug("closed")
1198
1201
  if self.telemetry_enabled:
1199
1202
  self._telemetry.close(retry=retry)
1200
- if (
1201
- self._all_async_queries_finished()
1202
- and not self._server_session_keep_alive
1203
- ):
1204
- logger.debug("No async queries seem to be running, deleting session")
1205
- self.rest.delete_session(retry=retry)
1206
- else:
1207
- logger.debug(
1208
- "There are {} async queries still running, not deleting session".format(
1209
- len(self._async_sfqids)
1203
+
1204
+ if not self._server_session_keep_alive:
1205
+ if self._all_async_queries_finished():
1206
+ logger.debug(
1207
+ "No async queries seem to be running, deleting session"
1210
1208
  )
1209
+ self.rest.delete_session(retry=retry)
1210
+ else:
1211
+ logger.debug(
1212
+ "There are {} async queries still running, not deleting session".format(
1213
+ len(self._async_sfqids)
1214
+ )
1215
+ )
1216
+ else:
1217
+ logger.info(
1218
+ "Parameter server_session_keep_alive was set to True - skipping session logout. "
1219
+ "If there are any not-finished queries in the current session (session_id: %s) - "
1220
+ "they will continue to live in Snowflake and consume credits until they finish. "
1221
+ "To cancel them use Monitoring tab in Snowsight or plain SQL.",
1222
+ self.session_id,
1211
1223
  )
1212
1224
  self.rest.close()
1213
1225
  self._rest = None
@@ -1463,6 +1475,7 @@ class SnowflakeConnection:
1463
1475
 
1464
1476
  elif self._authenticator == KEY_PAIR_AUTHENTICATOR:
1465
1477
  private_key = self._private_key
1478
+ private_key_passphrase = self._private_key_passphrase
1466
1479
 
1467
1480
  if self._private_key_file:
1468
1481
  private_key = _get_private_bytes_from_file(
@@ -1472,6 +1485,7 @@ class SnowflakeConnection:
1472
1485
 
1473
1486
  self.auth_class = AuthByKeyPair(
1474
1487
  private_key=private_key,
1488
+ private_key_passphrase=private_key_passphrase,
1475
1489
  timeout=self.login_timeout,
1476
1490
  backoff_generator=self._backoff_generator,
1477
1491
  )
@@ -2530,6 +2544,19 @@ class SnowflakeConnection:
2530
2544
  )
2531
2545
  )
2532
2546
 
2547
+ def _log_nanoarrow_import(self):
2548
+ ts = get_time_millis()
2549
+ self._log_telemetry(
2550
+ TelemetryData.from_telemetry_data_dict(
2551
+ from_dict={
2552
+ TelemetryField.KEY_TYPE.value: TelemetryField.NANOARROW_IMPORT.value,
2553
+ TelemetryField.KEY_VALUE.value: build_nanoarrow_usage_for_telemetry(),
2554
+ },
2555
+ timestamp=ts,
2556
+ connection=self,
2557
+ )
2558
+ )
2559
+
2533
2560
  def _log_telemetry_imported_packages(self) -> None:
2534
2561
  if self._log_imported_packages_in_telemetry:
2535
2562
  # filter out duplicates caused by submodules
@@ -442,6 +442,7 @@ DAY_IN_SECONDS = 60 * 60 * 24
442
442
  ENV_VAR_PARTNER = "SF_PARTNER"
443
443
  ENV_VAR_TEST_MODE = "SNOWFLAKE_TEST_MODE"
444
444
  ENV_VAR_DISABLE_PLATFORM_DETECTION = "SNOWFLAKE_DISABLE_PLATFORM_DETECTION"
445
+ ENV_VAR_ENABLE_CUSTOM_REVOCATION_ERRORS = "SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS"
445
446
 
446
447
  # Boolean positive values (lowercased) for environment variable checks
447
448
  ENV_VAR_BOOL_POSITIVE_VALUES_LOWERCASED = ["true"]
@@ -357,7 +357,8 @@ class SnowflakeConverter:
357
357
  return lambda value: value in ("1", "TRUE")
358
358
 
359
359
  def _INTERVAL_YEAR_MONTH_to_python(self, ctx: dict[str, Any]) -> Callable:
360
- return lambda v: interval_year_month_to_string(int(v))
360
+ scale = ctx["scale"]
361
+ return lambda v: interval_year_month_to_string(int(v), scale)
361
362
 
362
363
  def _INTERVAL_YEAR_MONTH_numpy_to_python(self, ctx: dict[str, Any]) -> Callable:
363
364
  return lambda v: numpy.timedelta64(int(v), "M")
@@ -647,7 +648,7 @@ class SnowflakeConverter:
647
648
  def _list_to_snowflake(self, value: list) -> list:
648
649
  return [
649
650
  SnowflakeConverter.quote(v0)
650
- for v0 in [SnowflakeConverter.escape(v) for v in value]
651
+ for v0 in [SnowflakeConverter.escape(self.to_snowflake(v)) for v in value]
651
652
  ]
652
653
 
653
654
  _tuple_to_snowflake = _list_to_snowflake