snowflake-connector-python 4.7.3__tar.gz → 4.7.5__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 (303) hide show
  1. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/DESCRIPTION.md +13 -3
  2. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/PKG-INFO +16 -6
  3. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/README.md +2 -5
  4. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/setup.cfg +2 -2
  5. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_connection.py +21 -0
  6. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_cursor.py +22 -17
  7. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_network.py +4 -2
  8. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_result_batch.py +9 -6
  9. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_result_set.py +26 -0
  10. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_oauth_code.py +6 -1
  11. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_oauth_credentials.py +6 -1
  12. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/_oauth_base.py +171 -26
  13. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/connection.py +55 -1
  14. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/connection_diagnostic.py +5 -0
  15. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/constants.py +55 -0
  16. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/cursor.py +109 -16
  17. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/errorcode.py +1 -0
  18. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/errors.py +19 -0
  19. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/network.py +11 -2
  20. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/result_batch.py +192 -8
  21. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/result_set.py +60 -2
  22. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/session_manager.py +61 -0
  23. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/ssl_wrap_socket.py +114 -2
  24. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/storage_client.py +22 -1
  25. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/version.py +1 -1
  26. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/wif_util.py +17 -3
  27. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake_connector_python.egg-info/PKG-INFO +16 -6
  28. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake_connector_python.egg-info/requires.txt +2 -2
  29. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/CONTRIBUTING.md +0 -0
  30. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/LICENSE.txt +0 -0
  31. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/MANIFEST.in +0 -0
  32. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/NOTICE +0 -0
  33. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/SECURITY.md +0 -0
  34. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/pyproject.toml +0 -0
  35. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/setup.py +0 -0
  36. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/__init__.py +0 -0
  37. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/_connection_identifier_shape.py +0 -0
  38. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/_host_util.py +0 -0
  39. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/_query_context_cache.py +0 -0
  40. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/_sql_util.py +0 -0
  41. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/_utils.py +0 -0
  42. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/README.md +0 -0
  43. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/__init__.py +0 -0
  44. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
  45. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
  46. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_description.py +0 -0
  47. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
  48. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
  49. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
  50. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
  51. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
  52. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
  53. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
  54. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_session_manager.py +0 -0
  55. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_storage_client.py +0 -0
  56. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_telemetry.py +0 -0
  57. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_time_util.py +0 -0
  58. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/_wif_util.py +0 -0
  59. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/__init__.py +0 -0
  60. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_auth.py +0 -0
  61. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
  62. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_default.py +0 -0
  63. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
  64. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
  65. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
  66. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
  67. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_okta.py +0 -0
  68. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_pat.py +0 -0
  69. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
  70. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
  71. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
  72. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/arrow_context.py +0 -0
  73. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/__init__.py +0 -0
  74. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/_auth.py +0 -0
  75. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/_http_server.py +0 -0
  76. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/by_plugin.py +0 -0
  77. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/default.py +0 -0
  78. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/idtoken.py +0 -0
  79. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/keypair.py +0 -0
  80. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/no_auth.py +0 -0
  81. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/oauth.py +0 -0
  82. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/oauth_code.py +0 -0
  83. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  84. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/okta.py +0 -0
  85. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/pat.py +0 -0
  86. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  87. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/webbrowser.py +0 -0
  88. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/auth/workload_identity.py +0 -0
  89. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/azure_storage_client.py +0 -0
  90. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/backoff_policies.py +0 -0
  91. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/bind_upload_agent.py +0 -0
  92. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/cache.py +0 -0
  93. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/compat.py +0 -0
  94. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/config_manager.py +0 -0
  95. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/converter.py +0 -0
  96. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/converter_issue23517.py +0 -0
  97. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/converter_null.py +0 -0
  98. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/converter_snowsql.py +0 -0
  99. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/crl.py +0 -0
  100. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/crl_cache.py +0 -0
  101. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/dbapi.py +0 -0
  102. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/description.py +0 -0
  103. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  104. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/encryption_util.py +0 -0
  105. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  106. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  107. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/feature.py +0 -0
  108. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/file_compression_type.py +0 -0
  109. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/file_lock.py +0 -0
  110. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/file_transfer_agent.py +0 -0
  111. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/file_util.py +0 -0
  112. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/gcs_storage_client.py +0 -0
  113. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/gzip_decoder.py +0 -0
  114. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/interval_util.py +0 -0
  115. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/local_storage_client.py +0 -0
  116. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/log_configuration.py +0 -0
  117. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  118. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/logging_utils/filters.py +0 -0
  119. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/minicore/__init__.py +0 -0
  120. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  121. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  122. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  123. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  124. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  125. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  126. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  127. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  128. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  129. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  130. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  131. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  132. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  133. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  134. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  135. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  136. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  137. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  138. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  139. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  140. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  141. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  142. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  143. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  144. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  145. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  146. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  147. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  148. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  149. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  150. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  151. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  152. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  153. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  154. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  155. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  156. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  157. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  158. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  159. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  160. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  161. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  162. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  163. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  164. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  165. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  166. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  167. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  168. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  169. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  170. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  171. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  172. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  173. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  174. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  175. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  176. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  177. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  178. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  179. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  180. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  181. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  182. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  183. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  184. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  185. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  186. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  187. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  188. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  189. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  190. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  191. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  192. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  193. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  194. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  195. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  196. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  197. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  198. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  199. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  200. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  201. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  202. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  203. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  204. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  205. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  206. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  207. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  208. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  209. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  210. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  211. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  212. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  213. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  214. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/options.py +0 -0
  215. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/os_details.py +0 -0
  216. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/pandas_tools.py +0 -0
  217. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/platform_detection.py +0 -0
  218. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/proxy.py +0 -0
  219. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/py.typed +0 -0
  220. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/s3_storage_client.py +0 -0
  221. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/secret_detector.py +0 -0
  222. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/sf_dirs.py +0 -0
  223. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/sfbinaryformat.py +0 -0
  224. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/sfdatetime.py +0 -0
  225. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/snow_logging.py +0 -0
  226. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/sqlstate.py +0 -0
  227. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  228. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/telemetry.py +0 -0
  229. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/telemetry_oob.py +0 -0
  230. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/test_util.py +0 -0
  231. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/time_util.py +0 -0
  232. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/token_cache.py +0 -0
  233. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/tool/__init__.py +0 -0
  234. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/tool/dump_certs.py +0 -0
  235. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  236. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  237. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/tool/probe_connection.py +0 -0
  238. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/url_util.py +0 -0
  239. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/util_text.py +0 -0
  240. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/__init__.py +0 -0
  241. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  242. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  243. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  244. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  245. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  246. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/api.py +0 -0
  247. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  248. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  249. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  250. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  251. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  252. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/help.py +0 -0
  253. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  254. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/models.py +0 -0
  255. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/packages.py +0 -0
  256. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  257. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  258. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  259. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  260. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  261. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  262. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
  263. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  264. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
  265. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  266. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  267. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  268. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  269. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
  270. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
  271. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
  272. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
  273. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
  274. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
  275. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  276. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  277. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  278. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  279. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  280. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
  281. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
  282. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
  283. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  284. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
  285. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  286. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  287. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  288. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  289. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  290. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  291. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  292. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  293. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  294. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  295. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  296. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  297. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
  298. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  299. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  300. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  301. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  302. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  303. {snowflake_connector_python-4.7.3 → snowflake_connector_python-4.7.5}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,11 +7,22 @@ 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.7.5(Sep 18,2026)
11
+ - Follow-up to the v4.7.4 incomplete-result fix (SNOW-4109042): when a successful query-request has an incomplete inline first chunk, the connector re-fetches the finished query once via `GET /queries/{qid}/result` before building the result set. JSON treats empty or shorter-than-declared inline rowsets as incomplete; Arrow only treats a missing/empty `rowsetBase64` as incomplete so the execute hot path does not decode IPC. If the result GET fails (transport error or `success: false`), the original payload is kept; if the GET succeeds but is still incomplete, that response is used. In either incomplete case the existing rowcount/total checks still raise `OperationalError` errno `252013` when the result is drained (no silent EOF). On the sync path, a remote result chunk whose body holds fewer rows than its declared `rowCount` is re-downloaded once before that check raises, so a truncated-but-valid chunk download can recover without silent data loss. Asynchronous (`snowflake.connector.aio`) remote-chunk re-download is unchanged.
12
+
13
+ - v4.7.4(Sep 16,2026)
14
+ - Fixed missing retries on transient HTTP failures when fetching an OAuth access token from the IdP token endpoint (`OAUTH_CLIENT_CREDENTIALS` and `OAUTH_AUTHORIZATION_CODE`). Token requests now retry transport errors, HTTP 408/429, and 5xx responses (SNOW-3984430, #3003).
15
+ - Fixed a bug where a TLS handshake terminated by the peer (`SSLError` containing `SysCallError(-1, 'Unexpected EOF')`) was classified as non-retryable and surfaced as an `OperationalError`, unlike `ECONNRESET`. Such handshake `Unexpected EOF` errors are now retried, on both the sync and async request paths (SNOW-4058589).
16
+ - Fixed `fetchone()`, `fetchmany()`, `fetchall()` and cursor iteration silently returning an incomplete result set. A downloaded result chunk holding fewer rows than the back-end reported just ended the iteration, which the fetch methods report as a normal end of results, so callers received fewer rows than the query produced with no exception raised. Such a chunk now raises an `OperationalError` (errno `252013`). Errors raised while iterating a result set are no longer reported as end-of-results either: `_fetchone()` caught every `TypeError` and returned `None`, so a failure anywhere in the download/parse chain was indistinguishable from an exhausted result set. Both the sync and async paths are fixed (SNOW-4109042).
17
+ - Added the `SNOWFLAKE_MIN_TLS_VERSION` environment variable (`1.2`, `1.3`, `TLSv1.2` or `TLSv1.3`, defaulting to TLS 1.2) to raise the minimum TLS version on every outbound connection a synchronous connector makes: the Snowflake API, stage transfers, OCSP/CRL fetches, platform detection, IdP requests, AWS SDK requests (workload identity STS calls and the platform-detection identity probe) and Azure AD token requests made by `azure-identity`. An unrecognized value is rejected at connect time. The variable name and accepted values match the Go and JDBC drivers. Asynchronous (`snowflake.connector.aio`) connections are not yet covered.
18
+ - Fixed a TLS handshake failure that cannot succeed on a retry — a minimum-version mismatch, an untrusted certificate, a hostname mismatch — being reported by `connect()` as a generic `250001: Could not connect to Snowflake backend after N attempt(s)` alongside a firewall-troubleshooting hint. The network layer already identified and named such failures, but the authentication layer retried them until the login timeout expired and then replaced the diagnosis. They now surface as `NonRetryableTlsError` (a subclass of `OperationalError` keeping the same errno, so existing handlers are unaffected) naming the underlying cause, and are no longer retried. Transient handshake faults (`ECONNRESET`, unexpected EOF) remain retryable.
19
+
10
20
  - v4.7.3(Sep 3,2026)
11
21
  - Added experimental Python 3.14t (free-threaded CPython) wheel support. **Experimental — not intended for production use.**
12
22
  - Fixed TLS hostname verification rejecting matching certificate SANs when a Snowflake account locator contains an underscore (SNOW-4011646).
13
23
  - Fixed `connect()` being significantly slower on deep call stacks (e.g. Django apps with several middleware/decorator layers) because `get_application_path()` used `inspect.stack()`, which reads and parses the source file of every frame on the stack. It now walks frame references directly instead (SNOW-3691001, #2908).
14
24
  - Fixed `split_statements` truncating unquoted URLs containing `://` at the `//`, misreading it as a line comment. The guards added alongside `//` comment support in 4.7.2 (SNOW-3772985) only recognized `file://`, so every other scheme (`http://`, `https://`, `s3://`, `snow://`, `azure://`) was cut short. Any `scheme://` is now recognized, on both the line-comment and block-comment paths (the latter affected globs such as `s3://bucket/*.csv`) (SNOW-3930192).
25
+ - Fixed the on-disk OCSP response validation cache failing with `RuntimeError: UnixFileLock on ... was inherited across fork; construct a new instance` when it was written from a forked child process. This could surface on fork-based platforms when fetching results with `client_fetch_use_mp=True`, where chunk downloads run in worker processes that perform their own certificate revocation checks. The cache's file lock is now re-created when the owning process changes, matching what already happened for the `spawn` start method.
15
26
  - Result batch construction now logs only whether a `qrmk` is present, for both the sync and async result paths (SNOW-3675590).
16
27
  - DEBUG logging in `create_batches_from_response()` reports chunk-header names with type/length value metadata (SNOW-3675590).
17
28
  - The malformed-response ERROR log in `create_batches_from_response()` reports a structural summary of the response (SNOW-3675590).
@@ -25,15 +36,15 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
25
36
  - Extended log secret masking coverage (SNOW-3675583). The connection-token pattern accepts `:` and `%` in the token value. Added patterns for OAuth access and refresh tokens in serialized JSON, for one-time passcodes, and for OAuth client identifiers and secrets. The passcode pattern accepts quoted values. The password pattern requires at least six characters in the value, so ordinary prose following the word "password" is not redacted.
26
37
  - Request headers are copied before mutation on the async path, and masking is applied to the `Authorization` header in error logs (SNOW-3675593).
27
38
  - Applied secret masking to the `snowflake.connector` loggers by default, independent of how application logging is configured. The same filter also covers the third-party loggers the connector uses (`botocore`, `boto3`, `aiohttp`, `aiobotocore`, `aioboto3`, vendored `urllib3`). Set `SNOWFLAKE_DISABLE_LOG_SECRET_MASKING=true` to opt out; it is honored at emit time, including after import (SNOW-3675583).
28
- - Fixed the on-disk OCSP response validation cache failing with `RuntimeError: UnixFileLock on ... was inherited across fork; construct a new instance` when it was written from a forked child process. This could surface on fork-based platforms when fetching results with `client_fetch_use_mp=True`, where chunk downloads run in worker processes that perform their own certificate revocation checks. The cache's file lock is now re-created when the owning process changes, matching what already happened for the `spawn` start method.
29
39
 
30
- - v4.7.2(Aug 6,2026)
40
+ - v4.7.2(Aug 7,2026)
31
41
  - Fixed a thread leak in the file transfer agent by properly shutting down ThreadPoolExecutors after PUT/GET transfers (SNOW-3556240, #2878).
32
42
  - Fixed `split_statements` treating `//` as SQL instead of a line comment, which could merge multiple statements when a `//` comment contained an apostrophe (SNOW-3772985).
33
43
  - Fixed large-file PUT uploads to internal Azure stages failing against the Azure 50,000-block-per-blob limit. The Azure multipart chunk size is now scaled up dynamically for very large files (mirroring the existing S3 behavior), and the default Azure chunk size was raised from 4 MB to 8 MB (consistent with S3) for better throughput (SNOW-3839943).
34
44
  - Fixed OAuth cached-credential connections failing with `250001 Invalid OAuth access token` when the cached token was invalid (GS code `390303`); the connector now reauthenticates silently (via refresh token if available, otherwise browser) instead of hard-failing. Also fixed fresh processes holding only a cached refresh token going straight to an interactive browser prompt instead of attempting a silent refresh first.
35
45
  - Fixed Okta/SAML authentication reporting an exhausted `login_timeout` as `250003: Failed to execute request: Attempted to set connect timeout to <negative value>`. Obtaining the one-time token in step 4 can overshoot the login deadline, which made the remaining budget negative; it was then passed to the HTTP layer, which rejected it with an opaque `ValueError`. A timed-out SAML login now raises `250006` with a message naming `login_timeout`. Running out of budget while retrying on `RefreshTokenError` reports the same error instead of failing later with an `AttributeError` on an empty response (SNOW-3891419).
36
46
  - Fixed OAuth authorization code flow failing for accounts with uppercase letters in the account name. `urlparse().hostname` always returns lowercase, but the host was compared case-sensitively in `_is_snowflake_as_idp`, causing Snowflake-as-IdP detection to return `False` and raising error 251013 (`client_id is empty`) even for connections that don't require a client ID.
47
+ - Fixed JWT key-pair authentication errors to surface the server's specific error code (e.g. `394304` for fingerprint mismatch, `394303` for clock skew) instead of always reporting the generic `250001`. Auth-rejection failures now also use SQLState `28000` (invalid authorization) instead of `08001` (SNOW-3775156).
37
48
 
38
49
  - v4.7.1(Jul 15,2026)
39
50
  - Added support for Python 3.14t (free-threaded).
@@ -49,7 +60,6 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
49
60
  - Added native AKS (Azure Kubernetes Service) workload identity support. When running on AKS with workload identity configured, the connector automatically uses `WorkloadIdentityCredential` to authenticate via the injected service account credentials. OIDC backward compatibility is also supported.
50
61
  - Added the `workload_identity_aws_use_outbound_token` connection option (default `false`) to opt into AWS WIF JWT attestation via STS `GetWebIdentityToken` instead of the default SigV4 `GetCallerIdentity` method.
51
62
  - Fixed a bug where a fully-qualified DDL statement (e.g. `CREATE VIEW db.schema.obj`) on a session with no current schema would populate the connector's cached `_schema`/`_database` from the referenced object's namespace. This made `get_current_schema()` diverge from the server's `CURRENT_SCHEMA()` and mis-qualified Snowpark temp objects (SNOW-3665226).
52
- - Fixed JWT key-pair authentication errors to surface the server's specific error code (e.g. `394304` for fingerprint mismatch, `394303` for clock skew) instead of always reporting the generic `250001`. Auth-rejection failures now also use SQLState `28000` (invalid authorization) instead of `08001` (SNOW-3775156).
53
63
 
54
64
  - v4.6.0(May 28,2026)
55
65
  - Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.7.3
3
+ Version: 4.7.5
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -70,8 +70,8 @@ Requires-Dist: more-itertools; extra == "development"
70
70
  Requires-Dist: numpy<=2.4.3; extra == "development"
71
71
  Requires-Dist: pendulum!=2.1.1; extra == "development"
72
72
  Requires-Dist: pexpect; extra == "development"
73
- Requires-Dist: pytest<7.5.0; extra == "development"
74
- Requires-Dist: pytest-asyncio; extra == "development"
73
+ Requires-Dist: pytest<9,>=8.4; extra == "development"
74
+ Requires-Dist: pytest-asyncio<2,>=1.4.0; extra == "development"
75
75
  Requires-Dist: pytest-cov; extra == "development"
76
76
  Requires-Dist: pytest-rerunfailures<16.0; extra == "development"
77
77
  Requires-Dist: pytest-timeout; extra == "development"
@@ -97,11 +97,22 @@ https://docs.snowflake.com/
97
97
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
98
98
 
99
99
  # Release Notes
100
+ - v4.7.5(Sep 18,2026)
101
+ - Follow-up to the v4.7.4 incomplete-result fix (SNOW-4109042): when a successful query-request has an incomplete inline first chunk, the connector re-fetches the finished query once via `GET /queries/{qid}/result` before building the result set. JSON treats empty or shorter-than-declared inline rowsets as incomplete; Arrow only treats a missing/empty `rowsetBase64` as incomplete so the execute hot path does not decode IPC. If the result GET fails (transport error or `success: false`), the original payload is kept; if the GET succeeds but is still incomplete, that response is used. In either incomplete case the existing rowcount/total checks still raise `OperationalError` errno `252013` when the result is drained (no silent EOF). On the sync path, a remote result chunk whose body holds fewer rows than its declared `rowCount` is re-downloaded once before that check raises, so a truncated-but-valid chunk download can recover without silent data loss. Asynchronous (`snowflake.connector.aio`) remote-chunk re-download is unchanged.
102
+
103
+ - v4.7.4(Sep 16,2026)
104
+ - Fixed missing retries on transient HTTP failures when fetching an OAuth access token from the IdP token endpoint (`OAUTH_CLIENT_CREDENTIALS` and `OAUTH_AUTHORIZATION_CODE`). Token requests now retry transport errors, HTTP 408/429, and 5xx responses (SNOW-3984430, #3003).
105
+ - Fixed a bug where a TLS handshake terminated by the peer (`SSLError` containing `SysCallError(-1, 'Unexpected EOF')`) was classified as non-retryable and surfaced as an `OperationalError`, unlike `ECONNRESET`. Such handshake `Unexpected EOF` errors are now retried, on both the sync and async request paths (SNOW-4058589).
106
+ - Fixed `fetchone()`, `fetchmany()`, `fetchall()` and cursor iteration silently returning an incomplete result set. A downloaded result chunk holding fewer rows than the back-end reported just ended the iteration, which the fetch methods report as a normal end of results, so callers received fewer rows than the query produced with no exception raised. Such a chunk now raises an `OperationalError` (errno `252013`). Errors raised while iterating a result set are no longer reported as end-of-results either: `_fetchone()` caught every `TypeError` and returned `None`, so a failure anywhere in the download/parse chain was indistinguishable from an exhausted result set. Both the sync and async paths are fixed (SNOW-4109042).
107
+ - Added the `SNOWFLAKE_MIN_TLS_VERSION` environment variable (`1.2`, `1.3`, `TLSv1.2` or `TLSv1.3`, defaulting to TLS 1.2) to raise the minimum TLS version on every outbound connection a synchronous connector makes: the Snowflake API, stage transfers, OCSP/CRL fetches, platform detection, IdP requests, AWS SDK requests (workload identity STS calls and the platform-detection identity probe) and Azure AD token requests made by `azure-identity`. An unrecognized value is rejected at connect time. The variable name and accepted values match the Go and JDBC drivers. Asynchronous (`snowflake.connector.aio`) connections are not yet covered.
108
+ - Fixed a TLS handshake failure that cannot succeed on a retry — a minimum-version mismatch, an untrusted certificate, a hostname mismatch — being reported by `connect()` as a generic `250001: Could not connect to Snowflake backend after N attempt(s)` alongside a firewall-troubleshooting hint. The network layer already identified and named such failures, but the authentication layer retried them until the login timeout expired and then replaced the diagnosis. They now surface as `NonRetryableTlsError` (a subclass of `OperationalError` keeping the same errno, so existing handlers are unaffected) naming the underlying cause, and are no longer retried. Transient handshake faults (`ECONNRESET`, unexpected EOF) remain retryable.
109
+
100
110
  - v4.7.3(Sep 3,2026)
101
111
  - Added experimental Python 3.14t (free-threaded CPython) wheel support. **Experimental — not intended for production use.**
102
112
  - Fixed TLS hostname verification rejecting matching certificate SANs when a Snowflake account locator contains an underscore (SNOW-4011646).
103
113
  - Fixed `connect()` being significantly slower on deep call stacks (e.g. Django apps with several middleware/decorator layers) because `get_application_path()` used `inspect.stack()`, which reads and parses the source file of every frame on the stack. It now walks frame references directly instead (SNOW-3691001, #2908).
104
114
  - Fixed `split_statements` truncating unquoted URLs containing `://` at the `//`, misreading it as a line comment. The guards added alongside `//` comment support in 4.7.2 (SNOW-3772985) only recognized `file://`, so every other scheme (`http://`, `https://`, `s3://`, `snow://`, `azure://`) was cut short. Any `scheme://` is now recognized, on both the line-comment and block-comment paths (the latter affected globs such as `s3://bucket/*.csv`) (SNOW-3930192).
115
+ - Fixed the on-disk OCSP response validation cache failing with `RuntimeError: UnixFileLock on ... was inherited across fork; construct a new instance` when it was written from a forked child process. This could surface on fork-based platforms when fetching results with `client_fetch_use_mp=True`, where chunk downloads run in worker processes that perform their own certificate revocation checks. The cache's file lock is now re-created when the owning process changes, matching what already happened for the `spawn` start method.
105
116
  - Result batch construction now logs only whether a `qrmk` is present, for both the sync and async result paths (SNOW-3675590).
106
117
  - DEBUG logging in `create_batches_from_response()` reports chunk-header names with type/length value metadata (SNOW-3675590).
107
118
  - The malformed-response ERROR log in `create_batches_from_response()` reports a structural summary of the response (SNOW-3675590).
@@ -115,15 +126,15 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
115
126
  - Extended log secret masking coverage (SNOW-3675583). The connection-token pattern accepts `:` and `%` in the token value. Added patterns for OAuth access and refresh tokens in serialized JSON, for one-time passcodes, and for OAuth client identifiers and secrets. The passcode pattern accepts quoted values. The password pattern requires at least six characters in the value, so ordinary prose following the word "password" is not redacted.
116
127
  - Request headers are copied before mutation on the async path, and masking is applied to the `Authorization` header in error logs (SNOW-3675593).
117
128
  - Applied secret masking to the `snowflake.connector` loggers by default, independent of how application logging is configured. The same filter also covers the third-party loggers the connector uses (`botocore`, `boto3`, `aiohttp`, `aiobotocore`, `aioboto3`, vendored `urllib3`). Set `SNOWFLAKE_DISABLE_LOG_SECRET_MASKING=true` to opt out; it is honored at emit time, including after import (SNOW-3675583).
118
- - Fixed the on-disk OCSP response validation cache failing with `RuntimeError: UnixFileLock on ... was inherited across fork; construct a new instance` when it was written from a forked child process. This could surface on fork-based platforms when fetching results with `client_fetch_use_mp=True`, where chunk downloads run in worker processes that perform their own certificate revocation checks. The cache's file lock is now re-created when the owning process changes, matching what already happened for the `spawn` start method.
119
129
 
120
- - v4.7.2(Aug 6,2026)
130
+ - v4.7.2(Aug 7,2026)
121
131
  - Fixed a thread leak in the file transfer agent by properly shutting down ThreadPoolExecutors after PUT/GET transfers (SNOW-3556240, #2878).
122
132
  - Fixed `split_statements` treating `//` as SQL instead of a line comment, which could merge multiple statements when a `//` comment contained an apostrophe (SNOW-3772985).
123
133
  - Fixed large-file PUT uploads to internal Azure stages failing against the Azure 50,000-block-per-blob limit. The Azure multipart chunk size is now scaled up dynamically for very large files (mirroring the existing S3 behavior), and the default Azure chunk size was raised from 4 MB to 8 MB (consistent with S3) for better throughput (SNOW-3839943).
124
134
  - Fixed OAuth cached-credential connections failing with `250001 Invalid OAuth access token` when the cached token was invalid (GS code `390303`); the connector now reauthenticates silently (via refresh token if available, otherwise browser) instead of hard-failing. Also fixed fresh processes holding only a cached refresh token going straight to an interactive browser prompt instead of attempting a silent refresh first.
125
135
  - Fixed Okta/SAML authentication reporting an exhausted `login_timeout` as `250003: Failed to execute request: Attempted to set connect timeout to <negative value>`. Obtaining the one-time token in step 4 can overshoot the login deadline, which made the remaining budget negative; it was then passed to the HTTP layer, which rejected it with an opaque `ValueError`. A timed-out SAML login now raises `250006` with a message naming `login_timeout`. Running out of budget while retrying on `RefreshTokenError` reports the same error instead of failing later with an `AttributeError` on an empty response (SNOW-3891419).
126
136
  - Fixed OAuth authorization code flow failing for accounts with uppercase letters in the account name. `urlparse().hostname` always returns lowercase, but the host was compared case-sensitively in `_is_snowflake_as_idp`, causing Snowflake-as-IdP detection to return `False` and raising error 251013 (`client_id is empty`) even for connections that don't require a client ID.
137
+ - Fixed JWT key-pair authentication errors to surface the server's specific error code (e.g. `394304` for fingerprint mismatch, `394303` for clock skew) instead of always reporting the generic `250001`. Auth-rejection failures now also use SQLState `28000` (invalid authorization) instead of `08001` (SNOW-3775156).
127
138
 
128
139
  - v4.7.1(Jul 15,2026)
129
140
  - Added support for Python 3.14t (free-threaded).
@@ -139,7 +150,6 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
139
150
  - Added native AKS (Azure Kubernetes Service) workload identity support. When running on AKS with workload identity configured, the connector automatically uses `WorkloadIdentityCredential` to authenticate via the injected service account credentials. OIDC backward compatibility is also supported.
140
151
  - Added the `workload_identity_aws_use_outbound_token` connection option (default `false`) to opt into AWS WIF JWT attestation via STS `GetWebIdentityToken` instead of the default SigV4 `GetCallerIdentity` method.
141
152
  - Fixed a bug where a fully-qualified DDL statement (e.g. `CREATE VIEW db.schema.obj`) on a session with no current schema would populate the connector's cached `_schema`/`_database` from the referenced object's namespace. This made `get_current_schema()` diverge from the server's `CURRENT_SCHEMA()` and mis-qualified Snowpark temp objects (SNOW-3665226).
142
- - Fixed JWT key-pair authentication errors to surface the server's specific error code (e.g. `394304` for fingerprint mismatch, `394303` for clock skew) instead of always reporting the generic `250001`. Auth-rejection failures now also use SQLState `28000` (invalid authorization) instead of `08001` (SNOW-3775156).
143
153
 
144
154
  - v4.6.0(May 28,2026)
145
155
  - Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
@@ -1,10 +1,7 @@
1
1
  # Snowflake Connector for Python
2
2
 
3
- [![Build and Test](https://github.com/snowflakedb/snowflake-connector-python/actions/workflows/build_test.yml/badge.svg)](https://github.com/snowflakedb/snowflake-connector-python/actions/workflows/build_test.yml)
4
- [![codecov](https://codecov.io/gh/snowflakedb/snowflake-connector-python/branch/main/graph/badge.svg?token=MVKSNtnLr0)](https://codecov.io/gh/snowflakedb/snowflake-connector-python)
5
- [![PyPi](https://img.shields.io/pypi/v/snowflake-connector-python.svg)](https://pypi.python.org/pypi/snowflake-connector-python/)
6
- [![License Apache-2.0](https://img.shields.io/:license-Apache%202-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.txt)
7
- [![Codestyle Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
3
+ > [!IMPORTANT]
4
+ > A new version of the driver is being developed in [snowflakedb/drivers](https://github.com/snowflakedb/drivers) and is currently in public preview. See the [documentation](https://docs.snowflake.com/en/developer-guide/python-connector/python-connector-universal-core) for more information.
8
5
 
9
6
  This package includes the Snowflake Connector for Python, which conforms to the [Python DB API 2.0](https://www.python.org/dev/peps/pep-0249/) specification.
10
7
 
@@ -97,8 +97,8 @@ development =
97
97
  numpy<=2.4.3
98
98
  pendulum!=2.1.1
99
99
  pexpect
100
- pytest<7.5.0
101
- pytest-asyncio
100
+ pytest>=8.4,<9
101
+ pytest-asyncio>=1.4.0,<2
102
102
  pytest-cov
103
103
  pytest-rerunfailures<16.0
104
104
  pytest-timeout
@@ -23,6 +23,7 @@ from snowflake.connector import (
23
23
  OperationalError,
24
24
  ProgrammingError,
25
25
  )
26
+ from snowflake.connector.errors import NonRetryableTlsError
26
27
 
27
28
  from .._connection_identifier_shape import (
28
29
  ConnectionIdentifierShape,
@@ -38,6 +39,7 @@ from ..connection import _get_private_bytes_from_file
38
39
  from ..constants import (
39
40
  _CONNECTIVITY_ERR_MSG,
40
41
  _OAUTH_DEFAULT_SCOPE,
42
+ ENV_VAR_MIN_TLS_VERSION,
41
43
  PARAMETER_AUTOCOMMIT,
42
44
  PARAMETER_CLIENT_PREFETCH_THREADS,
43
45
  PARAMETER_CLIENT_REQUEST_MFA_TOKEN,
@@ -570,6 +572,11 @@ class SnowflakeConnection(SnowflakeConnectionSync):
570
572
  password_callback=self._password_callback,
571
573
  session_parameters=self._session_parameters,
572
574
  )
575
+ except NonRetryableTlsError:
576
+ # See the sync counterpart: a TLS failure that a retry cannot fix must
577
+ # surface with its diagnosis rather than be replaced by the generic
578
+ # "could not connect" message the retry loop below ends with.
579
+ raise
573
580
  except OperationalError as e:
574
581
  logger.debug(
575
582
  "Operational Error raised at authentication"
@@ -1110,6 +1117,20 @@ class SnowflakeConnection(SnowflakeConnectionSync):
1110
1117
  async def connect(self, **kwargs) -> None:
1111
1118
  """Establishes connection to Snowflake."""
1112
1119
  logger.debug("connect")
1120
+ self._validate_min_tls_version()
1121
+ # Validating the value here must not be read as enforcing it: the async
1122
+ # stack builds its TLS contexts through aiohttp, which the connector's
1123
+ # urllib3 interception never sees, so the floor is not applied to async
1124
+ # handshakes. Say so rather than let a successful connect imply otherwise.
1125
+ # Not raised, because the variable is process-wide -- failing here would
1126
+ # break async connections in any process that set it for the sync path.
1127
+ if os.environ.get(ENV_VAR_MIN_TLS_VERSION, "").strip():
1128
+ logger.warning(
1129
+ "%s is set but is not enforced on asynchronous connections; their "
1130
+ "TLS handshakes may negotiate a lower version. Use a synchronous "
1131
+ "connection where the minimum must be guaranteed.",
1132
+ ENV_VAR_MIN_TLS_VERSION,
1133
+ )
1113
1134
  if len(kwargs) > 0:
1114
1135
  self.__config(**kwargs)
1115
1136
  else:
@@ -379,6 +379,10 @@ class SnowflakeCursorBase(SnowflakeCursorBaseSync, abc.ABC, typing.Generic[Fetch
379
379
  self,
380
380
  result_chunks,
381
381
  self._connection.client_prefetch_threads,
382
+ # SNOW-4109042: a DML reuses "total" for the rows the statement
383
+ # affected, which says nothing about the rows in its result set, so
384
+ # only a query's total is a promise worth holding the back-end to.
385
+ total_row_count=None if is_dml else data.get("total"),
382
386
  )
383
387
  self._rownumber = -1
384
388
  self._result_state = ResultState.VALID
@@ -922,24 +926,25 @@ class SnowflakeCursorBase(SnowflakeCursorBaseSync, abc.ABC, typing.Generic[Fetch
922
926
  if self._result is None and self._result_set is not None:
923
927
  self._result: ResultSetIterator = await self._result_set._create_iter()
924
928
  self._result_state = ResultState.VALID
925
- try:
926
- if self._result is None:
927
- raise TypeError("'NoneType' object is not an iterator")
928
- _next = await self._result.get_next()
929
- if isinstance(_next, Exception):
930
- Error.errorhandler_wrapper_from_ready_exception(
931
- self._connection,
932
- self,
933
- _next,
934
- )
935
- if _next is not None:
936
- self._rownumber += 1
937
- return _next
938
- except TypeError as err:
929
+ if self._result is None:
930
+ # SNOW-4109042: a missing result iterator is the only reason to report
931
+ # end-of-results here -- a cursor that was reset has no rows left to
932
+ # hand out. Errors raised while iterating a real result set must reach
933
+ # the caller instead of looking like a result set that ran out.
939
934
  if self._result_state == ResultState.DEFAULT:
940
- raise err
941
- else:
942
- return None
935
+ raise TypeError("'NoneType' object is not an iterator")
936
+ return None
937
+
938
+ _next = await self._result.get_next()
939
+ if isinstance(_next, Exception):
940
+ Error.errorhandler_wrapper_from_ready_exception(
941
+ self._connection,
942
+ self,
943
+ _next,
944
+ )
945
+ if _next is not None:
946
+ self._rownumber += 1
947
+ return _next
943
948
 
944
949
  async def fetchmany(self, size: int | None = None) -> list[FetchRow]:
945
950
  """Fetches the number of specified rows."""
@@ -42,6 +42,7 @@ from ..errors import (
42
42
  Error,
43
43
  ForbiddenError,
44
44
  HttpError,
45
+ NonRetryableTlsError,
45
46
  OperationalError,
46
47
  ProgrammingError,
47
48
  RefreshTokenError,
@@ -79,6 +80,7 @@ from ..network import (
79
80
  is_econnreset_exception,
80
81
  is_login_request,
81
82
  is_retryable_http_code,
83
+ is_unexpected_eof_exception,
82
84
  )
83
85
  from ..secret_detector import SecretDetector
84
86
  from ..sqlstate import (
@@ -816,7 +818,7 @@ class SnowflakeRestful(SnowflakeRestfulSync):
816
818
  finally:
817
819
  raw_ret.close() # ensure response is closed
818
820
  except (aiohttp.ClientSSLError, aiohttp.ClientConnectorSSLError) as se:
819
- if is_econnreset_exception(se):
821
+ if is_econnreset_exception(se) or is_unexpected_eof_exception(se):
820
822
  raise RetryRequest(se.os_error)
821
823
  msg = f"Hit non-retryable SSL error, {str(se)}.\n{_CONNECTIVITY_ERR_MSG}"
822
824
  logger.debug(msg)
@@ -825,7 +827,7 @@ class SnowflakeRestful(SnowflakeRestfulSync):
825
827
  Error.errorhandler_wrapper(
826
828
  self._connection,
827
829
  None,
828
- OperationalError,
830
+ NonRetryableTlsError,
829
831
  {
830
832
  "msg": msg,
831
833
  "errno": ER_FAILED_TO_REQUEST,
@@ -32,7 +32,10 @@ from snowflake.connector.result_batch import DownloadMetrics
32
32
  from snowflake.connector.result_batch import JSONResultBatch as JSONResultBatchSync
33
33
  from snowflake.connector.result_batch import RemoteChunkInfo
34
34
  from snowflake.connector.result_batch import ResultBatch as ResultBatchSync
35
- from snowflake.connector.result_batch import _create_nanoarrow_iterator
35
+ from snowflake.connector.result_batch import (
36
+ _create_nanoarrow_iterator,
37
+ inline_first_chunk_rowcount,
38
+ )
36
39
  from snowflake.connector.secret_detector import SecretDetector
37
40
 
38
41
  if TYPE_CHECKING:
@@ -60,8 +63,7 @@ def create_batches_from_response(
60
63
  column_converters: list[tuple[str, SnowflakeConverterType]] = []
61
64
  arrow_context: ArrowConverterContext | None = None
62
65
  rowtypes = data["rowtype"]
63
- total_len: int = data.get("total", 0)
64
- first_chunk_len = total_len
66
+ first_chunk_len = inline_first_chunk_rowcount(data)
65
67
  rest_of_chunks: list[ResultBatch] = []
66
68
  if _format == "json":
67
69
 
@@ -138,8 +140,6 @@ def create_batches_from_response(
138
140
  )
139
141
  for c in chunks
140
142
  ]
141
- for c in rest_of_chunks:
142
- first_chunk_len -= c.rowcount
143
143
  if _format == "json":
144
144
  first_chunk = JSONResultBatch.from_data(
145
145
  data.get("rowset"),
@@ -333,6 +333,7 @@ class JSONResultBatch(ResultBatch, JSONResultBatchSync):
333
333
  async with TimerContextManager() as parse_metric:
334
334
  parsed_data = self._parse(downloaded_data)
335
335
  self._metrics[DownloadMetrics.parse.value] = parse_metric.get_timing_millis()
336
+ self._check_rowcount(len(parsed_data))
336
337
  return iter(parsed_data)
337
338
 
338
339
  async def _load(self, content: bytes, encoding: str) -> list:
@@ -451,4 +452,6 @@ class ArrowResultBatch(ResultBatch, ArrowResultBatchSync):
451
452
  else:
452
453
  return await self._get_arrow_iter(connection=connection)
453
454
  else:
454
- return await self._create_iter(iter_unit=iter_unit, connection=connection)
455
+ return self._iter_checked_rows(
456
+ await self._create_iter(iter_unit=iter_unit, connection=connection)
457
+ )
@@ -29,6 +29,7 @@ from snowflake.connector.aio._result_batch import (
29
29
  from snowflake.connector.constants import IterUnit
30
30
  from snowflake.connector.options import pandas
31
31
  from snowflake.connector.result_set import ResultSet as ResultSetSync
32
+ from snowflake.connector.result_set import check_total_rowcount
32
33
 
33
34
  from .. import NotSupportedError
34
35
  from ..errors import Error
@@ -57,6 +58,7 @@ class ResultSetIterator:
57
58
  ) -> None:
58
59
  self._is_fetch_all = kw.pop("is_fetch_all", False)
59
60
  self._cursor = kw.pop("cursor", None)
61
+ self._total_row_count = kw.pop("total_row_count", None)
60
62
  self._first_batch_iter = first_batch_iter
61
63
  self._unfetched_batches = unfetched_batches
62
64
  self._final = final
@@ -104,9 +106,22 @@ class ResultSetIterator:
104
106
  )
105
107
  rets.extend(batch)
106
108
  await self._final()
109
+ check_total_rowcount(len(rets), self._total_row_count)
107
110
  return rets
108
111
 
109
112
  async def generator(self):
113
+ """Yields every row, then verifies the count the back-end declared.
114
+
115
+ SNOW-4109042: the check sits past the last ``yield`` on purpose, so a
116
+ consumer that stops early abandons this generator before reaching it.
117
+ """
118
+ rows_yielded = 0
119
+ async for value in self._generate():
120
+ rows_yielded += 1
121
+ yield value
122
+ check_total_rowcount(rows_yielded, self._total_row_count)
123
+
124
+ async def _generate(self):
110
125
  if self._is_fetch_all:
111
126
 
112
127
  tasks = await self._download_all_batches()
@@ -172,12 +187,14 @@ class ResultSet(ResultSetSync):
172
187
  cursor: SnowflakeCursor,
173
188
  result_chunks: list[JSONResultBatch] | list[ArrowResultBatch],
174
189
  prefetch_thread_num: int,
190
+ total_row_count: int | None = None,
175
191
  ) -> None:
176
192
  super().__init__(
177
193
  cursor,
178
194
  result_chunks,
179
195
  prefetch_thread_num,
180
196
  use_mp=False, # async code depends on aio rather than multiprocessing
197
+ total_row_count=total_row_count,
181
198
  )
182
199
  self.batches = cast(
183
200
  Union[list[JSONResultBatch], list[ArrowResultBatch]], self.batches
@@ -215,6 +232,14 @@ class ResultSet(ResultSetSync):
215
232
  for num, batch in enumerate(unfetched_batches):
216
233
  logger.debug(f"result batch {num + 1} has id: {batch.id}")
217
234
 
235
+ # SNOW-4109042: only row iteration yields one item per row; a table or
236
+ # pandas unit yields whole tables, so there is nothing to count there.
237
+ total_row_count = (
238
+ self._total_row_count
239
+ if kwargs.get("iter_unit", IterUnit.ROW_UNIT) == IterUnit.ROW_UNIT
240
+ else None
241
+ )
242
+
218
243
  return ResultSetIterator(
219
244
  first_batch_iter,
220
245
  unfetched_batches,
@@ -222,6 +247,7 @@ class ResultSet(ResultSetSync):
222
247
  self.prefetch_thread_num,
223
248
  cursor=self._cursor,
224
249
  is_fetch_all=is_fetch_all,
250
+ total_row_count=total_row_count,
225
251
  **kwargs,
226
252
  )
227
253
 
@@ -68,7 +68,12 @@ class AuthByOauthCode(AuthByPluginAsync, AuthByOauthCodeSync):
68
68
  AuthByOauthCodeSync.reset_secrets(self)
69
69
 
70
70
  async def prepare(self, **kwargs: Any) -> None:
71
- AuthByOauthCodeSync.prepare(self, **kwargs)
71
+ # Sync prepare may open a browser, block on the callback socket, POST to
72
+ # the IdP via urllib3, and sleep on token-request retries.
73
+ loop = asyncio.get_running_loop()
74
+ await loop.run_in_executor(
75
+ None, lambda: AuthByOauthCodeSync.prepare(self, **kwargs)
76
+ )
72
77
 
73
78
  async def reauthenticate(
74
79
  self, conn: SnowflakeConnection, **kwargs: Any
@@ -51,7 +51,12 @@ class AuthByOauthCredentials(AuthByPluginAsync, AuthByOauthCredentialsSync):
51
51
  AuthByOauthCredentialsSync.reset_secrets(self)
52
52
 
53
53
  async def prepare(self, **kwargs: Any) -> None:
54
- AuthByOauthCredentialsSync.prepare(self, **kwargs)
54
+ # Sync prepare POSTs to the IdP via urllib3 and may sleep on token-request
55
+ # retries, which would stall the asyncio event loop.
56
+ loop = asyncio.get_running_loop()
57
+ await loop.run_in_executor(
58
+ None, lambda: AuthByOauthCredentialsSync.prepare(self, **kwargs)
59
+ )
55
60
 
56
61
  async def reauthenticate(
57
62
  self, conn: SnowflakeConnection, **kwargs: Any