snowflake-connector-python 4.3.0__tar.gz → 4.5.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.3.0 → snowflake_connector_python-4.5.0}/CONTRIBUTING.md +3 -3
  2. snowflake_connector_python-4.3.0/PKG-INFO → snowflake_connector_python-4.5.0/DESCRIPTION.md +33 -87
  3. {snowflake_connector_python-4.3.0/src/snowflake_connector_python.egg-info → snowflake_connector_python-4.5.0}/PKG-INFO +39 -6
  4. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/setup.cfg +5 -4
  5. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/_utils.py +38 -33
  6. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_connection.py +2 -1
  7. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_cursor.py +3 -4
  8. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_network.py +39 -1
  9. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_pandas_tools.py +1 -1
  10. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_wif_util.py +77 -9
  11. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_auth.py +5 -0
  12. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/_auth.py +11 -2
  13. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/keypair.py +41 -11
  14. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/okta.py +3 -3
  15. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/azure_storage_client.py +3 -1
  16. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/compat.py +2 -0
  17. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/config_manager.py +43 -3
  18. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/connection.py +45 -14
  19. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/crl.py +1 -1
  20. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/cursor.py +4 -8
  21. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/network.py +44 -1
  22. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/ocsp_snowflake.py +14 -40
  23. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/pandas_tools.py +1 -1
  24. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/platform_detection.py +18 -1
  25. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/result_batch.py +22 -0
  26. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/token_cache.py +43 -13
  27. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/util_text.py +108 -1
  28. snowflake_connector_python-4.5.0/src/snowflake/connector/version.py +3 -0
  29. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/wif_util.py +117 -31
  30. snowflake_connector_python-4.3.0/DESCRIPTION.md → snowflake_connector_python-4.5.0/src/snowflake_connector_python.egg-info/PKG-INFO +120 -1
  31. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake_connector_python.egg-info/requires.txt +5 -5
  32. snowflake_connector_python-4.3.0/src/snowflake/connector/version.py +0 -3
  33. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/LICENSE.txt +0 -0
  34. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/MANIFEST.in +0 -0
  35. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/NOTICE +0 -0
  36. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/README.md +0 -0
  37. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/SECURITY.md +0 -0
  38. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/pyproject.toml +0 -0
  39. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/setup.py +0 -0
  40. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/__init__.py +0 -0
  41. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  42. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/_sql_util.py +0 -0
  43. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/README.md +0 -0
  44. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/__init__.py +0 -0
  45. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
  46. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
  47. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_description.py +0 -0
  48. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
  49. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
  50. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
  51. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
  52. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
  53. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
  54. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_result_set.py +0 -0
  55. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
  56. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_session_manager.py +0 -0
  57. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
  58. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
  59. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/_time_util.py +0 -0
  60. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
  61. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
  62. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
  63. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
  64. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
  65. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
  66. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
  67. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
  68. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
  69. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
  70. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
  71. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
  72. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
  73. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
  74. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/arrow_context.py +0 -0
  75. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/__init__.py +0 -0
  76. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  77. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
  78. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  79. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/default.py +0 -0
  80. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  81. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  82. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/oauth.py +0 -0
  83. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/oauth_code.py +0 -0
  84. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  85. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/pat.py +0 -0
  86. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  87. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
  88. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
  89. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/backoff_policies.py +0 -0
  90. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  91. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/cache.py +0 -0
  92. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
  93. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/constants.py +0 -0
  94. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/converter.py +0 -0
  95. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  96. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/converter_null.py +0 -0
  97. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  98. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/crl_cache.py +0 -0
  99. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/dbapi.py +0 -0
  100. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/description.py +0 -0
  101. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  102. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/encryption_util.py +0 -0
  103. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/errorcode.py +0 -0
  104. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/errors.py +0 -0
  105. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  106. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  107. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/feature.py +0 -0
  108. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/file_compression_type.py +0 -0
  109. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/file_lock.py +0 -0
  110. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
  111. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/file_util.py +0 -0
  112. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  113. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  114. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/interval_util.py +0 -0
  115. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/local_storage_client.py +0 -0
  116. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/log_configuration.py +0 -0
  117. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  118. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  119. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/minicore/__init__.py +0 -0
  120. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  121. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  122. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  123. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  124. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  125. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  126. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  127. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  128. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  129. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  130. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  131. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  132. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  133. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  134. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  135. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  136. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  137. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  138. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  139. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  140. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  141. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  142. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  143. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  144. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  145. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  146. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  147. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  148. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  149. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  150. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  151. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  152. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  153. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  154. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  155. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  156. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  157. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  158. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  159. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  160. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  161. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  162. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  163. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  164. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  165. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  166. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  167. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  168. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  169. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  170. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  171. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  172. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  173. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  174. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  175. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  176. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  177. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  178. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  179. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  180. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  181. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  182. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  183. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  184. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  185. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  186. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  187. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  188. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  189. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  190. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  191. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  192. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  193. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  194. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  195. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  196. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  197. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  198. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  199. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  200. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  201. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  202. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  203. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  204. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  205. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  206. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  207. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  208. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  209. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  210. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  211. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  212. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  213. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/options.py +0 -0
  214. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/os_details.py +0 -0
  215. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/proxy.py +0 -0
  216. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/py.typed +0 -0
  217. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/result_set.py +0 -0
  218. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  219. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/secret_detector.py +0 -0
  220. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/session_manager.py +0 -0
  221. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/sf_dirs.py +0 -0
  222. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  223. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/sfdatetime.py +0 -0
  224. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/snow_logging.py +0 -0
  225. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/sqlstate.py +0 -0
  226. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  227. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  228. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/storage_client.py +0 -0
  229. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/telemetry.py +0 -0
  230. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  231. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/test_util.py +0 -0
  232. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/time_util.py +0 -0
  233. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/tool/__init__.py +0 -0
  234. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  235. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  236. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  237. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  238. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/url_util.py +0 -0
  239. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  240. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  241. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  242. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  243. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  244. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  245. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  246. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  247. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  248. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  249. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  250. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  251. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  252. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  253. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  254. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
  255. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  256. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  257. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  258. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  259. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  260. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  261. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
  262. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  263. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
  264. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  265. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  266. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  267. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  268. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
  269. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
  270. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
  271. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
  272. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
  273. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
  274. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  275. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  276. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  277. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  278. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  279. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
  280. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
  281. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
  282. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  283. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
  284. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  285. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  286. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  287. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  288. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  289. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  290. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  291. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  292. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  293. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  294. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  295. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  296. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
  297. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  298. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  299. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  300. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  301. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  302. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.5.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -27,11 +27,11 @@ We require our contributors to sign a CLA, available at https://github.com/snowf
27
27
  What is a development environment? It's a [virtualenv](https://virtualenv.pypa.io) that has all of necessary
28
28
  dependencies installed with `snowflake-connector-python` installed as an editable package.
29
29
 
30
- Setting up a development environment is super easy with this [one simple tox command](https://tox.wiki/en/latest/example/devenv.html).
30
+ Setting up a development environment is super easy with this [one simple tox command](https://tox.wiki/en/legacy/example/devenv.html).
31
31
 
32
32
  ```shell
33
- tox --devenv venv37 -e py37
34
- . venv37/bin/activate
33
+ tox --devenv venv39 -e py39
34
+ . venv39/bin/activate
35
35
  ```
36
36
 
37
37
  Note: we suggest using the lowest supported Python version for development.
@@ -1,89 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: snowflake-connector-python
3
- Version: 4.3.0
4
- Summary: Snowflake Connector for Python
5
- Home-page: https://www.snowflake.com/
6
- Author: Snowflake, Inc
7
- Author-email: snowflake-python-libraries-dl@snowflake.com
8
- License: Apache-2.0
9
- Project-URL: Documentation, https://docs.snowflake.com/en/user-guide/python-connector.html
10
- Project-URL: Source, https://github.com/snowflakedb/snowflake-connector-python
11
- Project-URL: Issues, https://github.com/snowflakedb/snowflake-connector-python/issues
12
- Project-URL: Changelog, https://github.com/snowflakedb/snowflake-connector-python/blob/main/DESCRIPTION.md
13
- Keywords: Snowflake db database cloud analytics warehouse
14
- Classifier: Development Status :: 5 - Production/Stable
15
- Classifier: Environment :: Console
16
- Classifier: Environment :: Other Environment
17
- Classifier: Intended Audience :: Developers
18
- Classifier: Intended Audience :: Education
19
- Classifier: Intended Audience :: Information Technology
20
- Classifier: Intended Audience :: System Administrators
21
- Classifier: License :: OSI Approved :: Apache Software License
22
- Classifier: Operating System :: OS Independent
23
- Classifier: Programming Language :: Python :: 3
24
- Classifier: Programming Language :: Python :: 3 :: Only
25
- Classifier: Programming Language :: Python :: 3.9
26
- Classifier: Programming Language :: Python :: 3.10
27
- Classifier: Programming Language :: Python :: 3.11
28
- Classifier: Programming Language :: Python :: 3.12
29
- Classifier: Programming Language :: Python :: 3.13
30
- Classifier: Programming Language :: SQL
31
- Classifier: Topic :: Database
32
- Classifier: Topic :: Scientific/Engineering :: Information Analysis
33
- Classifier: Topic :: Software Development
34
- Classifier: Topic :: Software Development :: Libraries
35
- Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
36
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
37
- Requires-Python: >=3.9
38
- Description-Content-Type: text/markdown
39
- License-File: LICENSE.txt
40
- License-File: NOTICE
41
- Requires-Dist: asn1crypto<2.0.0,>0.24.0
42
- Requires-Dist: cryptography>=44.0.1
43
- Requires-Dist: pyOpenSSL<26.0.0,>=24.0.0
44
- Requires-Dist: pyjwt<3.0.0,>=2.10.1
45
- Requires-Dist: pytz
46
- Requires-Dist: requests<3.0.0,>=2.32.4
47
- Requires-Dist: packaging
48
- Requires-Dist: charset_normalizer<4,>=2
49
- Requires-Dist: idna<4,>=3.7
50
- Requires-Dist: urllib3<2.0.0,>=1.26.5; python_version < "3.10"
51
- Requires-Dist: certifi>=2024.7.4
52
- Requires-Dist: typing_extensions<5,>=4.3
53
- Requires-Dist: filelock<4,>=3.5
54
- Requires-Dist: sortedcontainers>=2.4.0
55
- Requires-Dist: platformdirs<5.0.0,>=2.6.0
56
- Requires-Dist: tomlkit
57
- Requires-Dist: boto3>=1.24
58
- Requires-Dist: botocore>=1.24
59
- Provides-Extra: boto
60
- Requires-Dist: boto3>=1.24; extra == "boto"
61
- Requires-Dist: botocore>=1.24; extra == "boto"
62
- Provides-Extra: development
63
- Requires-Dist: Cython; extra == "development"
64
- Requires-Dist: coverage; extra == "development"
65
- Requires-Dist: mitmproxy>=6.0.0; python_version >= "3.10" and extra == "development"
66
- Requires-Dist: more-itertools; extra == "development"
67
- Requires-Dist: numpy<=2.2.4; extra == "development"
68
- Requires-Dist: pendulum!=2.1.1; extra == "development"
69
- Requires-Dist: pexpect; extra == "development"
70
- Requires-Dist: pytest<7.5.0; extra == "development"
71
- Requires-Dist: pytest-asyncio; extra == "development"
72
- Requires-Dist: pytest-cov; extra == "development"
73
- Requires-Dist: pytest-rerunfailures<16.0; extra == "development"
74
- Requires-Dist: pytest-timeout; extra == "development"
75
- Requires-Dist: pytest-xdist; extra == "development"
76
- Requires-Dist: pytzdata; extra == "development"
77
- Requires-Dist: responses; extra == "development"
78
- Provides-Extra: pandas
79
- Requires-Dist: pandas<3.0.0,>=1.0.0; python_version < "3.13" and extra == "pandas"
80
- Requires-Dist: pandas<3.0.0,>=2.1.2; python_version >= "3.13" and extra == "pandas"
81
- Requires-Dist: pyarrow>=14.0.1; extra == "pandas"
82
- Provides-Extra: secure-local-storage
83
- Requires-Dist: keyring<26.0.0,>=23.1.0; extra == "secure-local-storage"
84
- Dynamic: license-file
85
- Dynamic: requires-dist
86
-
87
1
  This package includes the Snowflake Connector for Python, which conforms to the Python DB API 2.0 specification:
88
2
  https://www.python.org/dev/peps/pep-0249/
89
3
 
@@ -93,6 +7,34 @@ https://docs.snowflake.com/
93
7
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
94
8
 
95
9
  # Release Notes
10
+ - v4.5.0(May 12,2026)
11
+ - Fixed `write_pandas` temp stage name collisions (SNOW-3481510). The old PRNG could produce identical name sequences in forked processes (e.g. Notebook kernels), causing `CREATE TEMPORARY STAGE` to fail with "Object already exists".
12
+ - Fixed a security bug in Okta SAML authentication where `_is_prefix_equal()` compared `url1`'s port against itself instead of `url2`'s port, allowing an attacker to redirect credentials to a different port on the same hostname. Also fixed the default port fallback to use `int` instead of `str` for correct comparison when one URL omits the port.
13
+ - Fixed `executemany` with `paramstyle="pyformat"` to correctly locate the VALUES clause using a balanced-parentheses parser instead of a greedy regex. This fixes incorrect behaviour with nested function calls such as SQLAlchemy `@compiles VARIANT` patterns (e.g. `PARSE_JSON(%(col)s)`) and subquery-form INSERTs (SNOW-298756).
14
+ - Added ECDSA key support (ES256, ES384, ES512) for key-pair authentication.
15
+ - Added HTTP 307/308 redirect status codes to the retryable set as defense-in-depth, with redirect-aware logging in both sync and async paths.
16
+ - Consolidated keyring token cache to use a single service name with hashed account keys, reducing macOS Keychain password prompts. Legacy entries are auto-migrated on first read.
17
+ - Added support for AWS outbound JWT token attestation for Workload Identity Federation (WIF). This can be enabled by setting the `SNOWFLAKE_ENABLE_AWS_WIF_OUTBOUND_TOKEN` environment variable to `true`. Note: This environment variable will be removed in a future release.
18
+ - Removed dynamic class deserialization from the OCSP response validation cache to prevent arbitrary code execution via crafted cache files (SNOW-2439940). The `SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS` environment variable is now a no-op.
19
+ - Updated SPCS token injection to gate on `SNOWFLAKE_RUNNING_INSIDE_SPCS` environment variable, trim whitespace, and remove configurable token path.
20
+ - GCP WIF attestation now uses hostname `metadata.google.internal` instead of the IPv4 link-local address, so it works on IPv6-only GCP VMs.
21
+ - Fixed a bug where `write_pandas()` with `auto_create_table=False` and `overwrite=True` would execute `CREATE TABLE IF NOT EXISTS`, which required unnecessary `OWNERSHIP` privilege on the table. Now only `TRUNCATE TABLE` is executed in this case. Note: users who relied on the table being implicitly created despite `auto_create_table=False` should set `auto_create_table=True` instead.
22
+ - Added validation of the `account` connection parameter so malformed identifiers (for example path-like values or labels outside letters, digits, `_`, and `-`) are rejected with `ProgrammingError` before login (SNOW-1902886).
23
+ - Added support for Azure Workload Identity Federation impersonation, allowing a managed identity to authenticate as a service principal.
24
+
25
+ - v4.4.0(March 25,2026)
26
+ - Bump the lower boundary of cryptography to 46.0.5 due to CVE-2026-26007.
27
+ - Added support for Python 3.14.
28
+ - Removed pyOpenSSL upper bound dependency constraint to allow installation of pyOpenSSL 26.0.0+, which includes a fix for GHSA-vp96-hxj8-p424.
29
+ - Fixed Azure IMDS `Metadata` header to use lowercase `"true"` instead of `"True"`, which caused 400 errors during Azure Workload Identity Federation authentication.
30
+ - Fixed default `crl_download_max_size` to be 20MB instead of 200MB, as the previous value was set too high and could cause out-of-memory issues.
31
+ - Fixed a bug where Azure GET commands would incorrectly set the file status to UPLOADED instead of preserving the DOWNLOADED status during metadata retrieval.
32
+ - Renamed the environment variable for skipping config file permission warnings from `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` to `SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION`. The old variable is still supported but emits a deprecation warning.
33
+ - Fixed `unsafe_skip_file_permissions_check` flag not being respected when reading `connections.toml`.
34
+ - Fixed JSONDecodeError in result_batch._load() when fetching large result sets
35
+ - Fixed validation ordering for `client_session_keep_alive_heartbeat_frequency`.
36
+
37
+
96
38
  - v4.3.0(February 12,2026)
97
39
  - Ensured proper list conversion - the converter runs to_snowflake on all list elements.
98
40
  - 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.
@@ -100,7 +42,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
100
42
  - Log a warning when using http protocol for OAuth urls.
101
43
  - 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
44
  - 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.
45
+ - Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema inconsistency between batches.
46
+ - Fixed a bug where tilde in path to `private_key_file` specified in the connection was not properly expanded
47
+ - Added `secondary_roles` connection parameter to control secondary role activation at session creation. Supports `ALL` or `NONE` or no value.
48
+
104
49
 
105
50
  - v4.2.0(January 07,2026)
106
51
  - Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
@@ -144,6 +89,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
144
89
 
145
90
  - v3.18.0(October 03,2025)
146
91
  - Added support for pandas conversion for Day-time and Year-Month Interval types
92
+ * Fixed the return type of iterating over a cursor
147
93
 
148
94
  - v3.17.4(September 22,2025)
149
95
  - Added support for intermediate certificates as roots when they are stored in the trust store
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.3.0
3
+ Version: 4.5.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -27,6 +27,7 @@ Classifier: Programming Language :: Python :: 3.10
27
27
  Classifier: Programming Language :: Python :: 3.11
28
28
  Classifier: Programming Language :: Python :: 3.12
29
29
  Classifier: Programming Language :: Python :: 3.13
30
+ Classifier: Programming Language :: Python :: 3.14
30
31
  Classifier: Programming Language :: SQL
31
32
  Classifier: Topic :: Database
32
33
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
@@ -39,8 +40,8 @@ Description-Content-Type: text/markdown
39
40
  License-File: LICENSE.txt
40
41
  License-File: NOTICE
41
42
  Requires-Dist: asn1crypto<2.0.0,>0.24.0
42
- Requires-Dist: cryptography>=44.0.1
43
- Requires-Dist: pyOpenSSL<26.0.0,>=24.0.0
43
+ Requires-Dist: cryptography>=46.0.5
44
+ Requires-Dist: pyOpenSSL>=24.0.0
44
45
  Requires-Dist: pyjwt<3.0.0,>=2.10.1
45
46
  Requires-Dist: pytz
46
47
  Requires-Dist: requests<3.0.0,>=2.32.4
@@ -62,9 +63,9 @@ Requires-Dist: botocore>=1.24; extra == "boto"
62
63
  Provides-Extra: development
63
64
  Requires-Dist: Cython; extra == "development"
64
65
  Requires-Dist: coverage; extra == "development"
65
- Requires-Dist: mitmproxy>=6.0.0; python_version >= "3.10" and extra == "development"
66
+ Requires-Dist: mitmproxy>=12.0.0; python_version >= "3.12" and extra == "development"
66
67
  Requires-Dist: more-itertools; extra == "development"
67
- Requires-Dist: numpy<=2.2.4; extra == "development"
68
+ Requires-Dist: numpy<=2.4.3; extra == "development"
68
69
  Requires-Dist: pendulum!=2.1.1; extra == "development"
69
70
  Requires-Dist: pexpect; extra == "development"
70
71
  Requires-Dist: pytest<7.5.0; extra == "development"
@@ -93,6 +94,34 @@ https://docs.snowflake.com/
93
94
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
94
95
 
95
96
  # Release Notes
97
+ - v4.5.0(May 12,2026)
98
+ - Fixed `write_pandas` temp stage name collisions (SNOW-3481510). The old PRNG could produce identical name sequences in forked processes (e.g. Notebook kernels), causing `CREATE TEMPORARY STAGE` to fail with "Object already exists".
99
+ - Fixed a security bug in Okta SAML authentication where `_is_prefix_equal()` compared `url1`'s port against itself instead of `url2`'s port, allowing an attacker to redirect credentials to a different port on the same hostname. Also fixed the default port fallback to use `int` instead of `str` for correct comparison when one URL omits the port.
100
+ - Fixed `executemany` with `paramstyle="pyformat"` to correctly locate the VALUES clause using a balanced-parentheses parser instead of a greedy regex. This fixes incorrect behaviour with nested function calls such as SQLAlchemy `@compiles VARIANT` patterns (e.g. `PARSE_JSON(%(col)s)`) and subquery-form INSERTs (SNOW-298756).
101
+ - Added ECDSA key support (ES256, ES384, ES512) for key-pair authentication.
102
+ - Added HTTP 307/308 redirect status codes to the retryable set as defense-in-depth, with redirect-aware logging in both sync and async paths.
103
+ - Consolidated keyring token cache to use a single service name with hashed account keys, reducing macOS Keychain password prompts. Legacy entries are auto-migrated on first read.
104
+ - Added support for AWS outbound JWT token attestation for Workload Identity Federation (WIF). This can be enabled by setting the `SNOWFLAKE_ENABLE_AWS_WIF_OUTBOUND_TOKEN` environment variable to `true`. Note: This environment variable will be removed in a future release.
105
+ - Removed dynamic class deserialization from the OCSP response validation cache to prevent arbitrary code execution via crafted cache files (SNOW-2439940). The `SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS` environment variable is now a no-op.
106
+ - Updated SPCS token injection to gate on `SNOWFLAKE_RUNNING_INSIDE_SPCS` environment variable, trim whitespace, and remove configurable token path.
107
+ - GCP WIF attestation now uses hostname `metadata.google.internal` instead of the IPv4 link-local address, so it works on IPv6-only GCP VMs.
108
+ - Fixed a bug where `write_pandas()` with `auto_create_table=False` and `overwrite=True` would execute `CREATE TABLE IF NOT EXISTS`, which required unnecessary `OWNERSHIP` privilege on the table. Now only `TRUNCATE TABLE` is executed in this case. Note: users who relied on the table being implicitly created despite `auto_create_table=False` should set `auto_create_table=True` instead.
109
+ - Added validation of the `account` connection parameter so malformed identifiers (for example path-like values or labels outside letters, digits, `_`, and `-`) are rejected with `ProgrammingError` before login (SNOW-1902886).
110
+ - Added support for Azure Workload Identity Federation impersonation, allowing a managed identity to authenticate as a service principal.
111
+
112
+ - v4.4.0(March 25,2026)
113
+ - Bump the lower boundary of cryptography to 46.0.5 due to CVE-2026-26007.
114
+ - Added support for Python 3.14.
115
+ - Removed pyOpenSSL upper bound dependency constraint to allow installation of pyOpenSSL 26.0.0+, which includes a fix for GHSA-vp96-hxj8-p424.
116
+ - Fixed Azure IMDS `Metadata` header to use lowercase `"true"` instead of `"True"`, which caused 400 errors during Azure Workload Identity Federation authentication.
117
+ - Fixed default `crl_download_max_size` to be 20MB instead of 200MB, as the previous value was set too high and could cause out-of-memory issues.
118
+ - Fixed a bug where Azure GET commands would incorrectly set the file status to UPLOADED instead of preserving the DOWNLOADED status during metadata retrieval.
119
+ - Renamed the environment variable for skipping config file permission warnings from `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` to `SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION`. The old variable is still supported but emits a deprecation warning.
120
+ - Fixed `unsafe_skip_file_permissions_check` flag not being respected when reading `connections.toml`.
121
+ - Fixed JSONDecodeError in result_batch._load() when fetching large result sets
122
+ - Fixed validation ordering for `client_session_keep_alive_heartbeat_frequency`.
123
+
124
+
96
125
  - v4.3.0(February 12,2026)
97
126
  - Ensured proper list conversion - the converter runs to_snowflake on all list elements.
98
127
  - 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.
@@ -100,7 +129,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
100
129
  - Log a warning when using http protocol for OAuth urls.
101
130
  - 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
131
  - 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.
132
+ - Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema inconsistency between batches.
133
+ - Fixed a bug where tilde in path to `private_key_file` specified in the connection was not properly expanded
134
+ - Added `secondary_roles` connection parameter to control secondary role activation at session creation. Supports `ALL` or `NONE` or no value.
135
+
104
136
 
105
137
  - v4.2.0(January 07,2026)
106
138
  - Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
@@ -144,6 +176,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
144
176
 
145
177
  - v3.18.0(October 03,2025)
146
178
  - Added support for pandas conversion for Day-time and Year-Month Interval types
179
+ * Fixed the return type of iterating over a cursor
147
180
 
148
181
  - v3.17.4(September 22,2025)
149
182
  - Added support for intermediate certificates as roots when they are stored in the trust store
@@ -25,6 +25,7 @@ classifiers =
25
25
  Programming Language :: Python :: 3.11
26
26
  Programming Language :: Python :: 3.12
27
27
  Programming Language :: Python :: 3.13
28
+ Programming Language :: Python :: 3.14
28
29
  Programming Language :: SQL
29
30
  Topic :: Database
30
31
  Topic :: Scientific/Engineering :: Information Analysis
@@ -44,8 +45,8 @@ python_requires = >=3.9
44
45
  packages = find_namespace:
45
46
  install_requires =
46
47
  asn1crypto>0.24.0,<2.0.0
47
- cryptography>=44.0.1
48
- pyOpenSSL>=24.0.0,<26.0.0
48
+ cryptography>=46.0.5
49
+ pyOpenSSL>=24.0.0
49
50
  pyjwt>=2.10.1,<3.0.0
50
51
  pytz
51
52
  requests>=2.32.4,<3.0.0
@@ -89,9 +90,9 @@ boto =
89
90
  development =
90
91
  Cython
91
92
  coverage
92
- mitmproxy>=6.0.0; python_version >= '3.10'
93
+ mitmproxy>=12.0.0; python_version >= '3.12'
93
94
  more-itertools
94
- numpy<=2.2.4
95
+ numpy<=2.4.3
95
96
  pendulum!=2.1.1
96
97
  pexpect
97
98
  pytest<7.5.0
@@ -10,8 +10,7 @@ import threading
10
10
  import time
11
11
  from enum import Enum
12
12
  from inspect import stack
13
- from pathlib import Path
14
- from random import choice
13
+ from secrets import choice
15
14
  from threading import Timer
16
15
  from uuid import UUID
17
16
 
@@ -110,30 +109,29 @@ def get_application_path() -> str:
110
109
  return "unknown"
111
110
 
112
111
 
113
- _SPCS_TOKEN_ENV_VAR_NAME = "SF_SPCS_TOKEN_PATH"
114
- _SPCS_TOKEN_DEFAULT_PATH = "/snowflake/session/spcs_token"
112
+ _SPCS_ENV_VAR = "SNOWFLAKE_RUNNING_INSIDE_SPCS"
113
+ _SPCS_TOKEN_PATH = "/snowflake/session/spcs_token"
115
114
 
116
115
 
117
116
  def get_spcs_token() -> str | None:
118
- """Return the SPCS token read from the configured path, or None.
117
+ """Return the SPCS token if running inside an SPCS container, or None.
119
118
 
120
- The path is determined by the SF_SPCS_TOKEN_PATH environment variable,
121
- falling back to ``/snowflake/session/spcs_token`` when unset.
119
+ The token is only read when the SNOWFLAKE_RUNNING_INSIDE_SPCS environment
120
+ variable is set. The file at /snowflake/session/spcs_token is read as
121
+ UTF-8 text and leading/trailing whitespace is stripped.
122
122
 
123
- Any I/O errors or missing/empty files are treated as \"no token\" and
124
- will not cause authentication to fail.
123
+ Any read failure is logged as a warning and None is returned.
125
124
  """
126
- path = os.getenv(_SPCS_TOKEN_ENV_VAR_NAME) or _SPCS_TOKEN_DEFAULT_PATH
125
+ if not os.environ.get(_SPCS_ENV_VAR):
126
+ return None
127
127
  try:
128
- if not os.path.isfile(path):
129
- return None
130
- with open(path, encoding="utf-8") as f:
128
+ with open(_SPCS_TOKEN_PATH, encoding="utf-8") as f:
131
129
  token = f.read().strip()
132
130
  if not token:
133
131
  return None
134
132
  return token
135
- except Exception as exc: # pragma: no cover - best-effort logging only
136
- logger.debug("Failed to read SPCS token from %s: %s", path, exc)
133
+ except Exception as exc:
134
+ logger.warning("Failed to read SPCS token from %s: %s", _SPCS_TOKEN_PATH, exc)
137
135
  return None
138
136
 
139
137
 
@@ -185,29 +183,34 @@ class _CoreLoader:
185
183
  else:
186
184
  return "unknown"
187
185
 
186
+ @staticmethod
187
+ def _libc_ver() -> tuple[str, str]:
188
+ """Return (libc_name, libc_version) from the platform."""
189
+ return platform.libc_ver()
190
+
188
191
  @staticmethod
189
192
  def _detect_libc() -> str:
190
193
  """Detect libc type on Linux (glibc vs musl)."""
191
- # Check if we're on Alpine/musl
192
- if Path("/etc/alpine-release").exists():
193
- return "musl"
194
-
195
- # Check for musl by looking at the libc library
196
- try:
197
- import subprocess
194
+ lib, _ = _CoreLoader._libc_ver()
195
+ if lib == "glibc":
196
+ return "glibc"
197
+ return "musl"
198
198
 
199
- result = subprocess.run(
200
- ["ldd", "--version"],
201
- capture_output=True,
202
- text=True,
203
- )
204
- if "musl" in result.stdout.lower() or "musl" in result.stderr.lower():
205
- return "musl"
206
- except Exception:
207
- pass
199
+ @staticmethod
200
+ def get_libc_version() -> str | None:
201
+ """Return libc version from :func:`platform.libc_ver`, or None if unknown."""
202
+ _, version = _CoreLoader._libc_ver()
203
+ if not version:
204
+ return None
205
+ stripped = version.strip()
206
+ return stripped or None
208
207
 
209
- # Default to glibc
210
- return "glibc"
208
+ @staticmethod
209
+ def get_libc_family() -> str | None:
210
+ """Return libc family for Linux (glibc or musl), otherwise None."""
211
+ if _CoreLoader._detect_os() != "linux":
212
+ return None
213
+ return _CoreLoader._detect_libc()
211
214
 
212
215
  @staticmethod
213
216
  def _get_platform_subdir() -> str:
@@ -347,6 +350,8 @@ def build_minicore_usage_for_session() -> dict[str, str | None]:
347
350
  "ISA": ISA,
348
351
  "CORE_VERSION": _core_loader.get_core_version(),
349
352
  "CORE_FILE_NAME": _core_loader.get_file_name(),
353
+ "LIBC_FAMILY": _CoreLoader.get_libc_family(),
354
+ "LIBC_VERSION": _CoreLoader.get_libc_version(),
350
355
  }
351
356
 
352
357
 
@@ -451,6 +451,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
451
451
  not in (
452
452
  AttestationProvider.GCP,
453
453
  AttestationProvider.AWS,
454
+ AttestationProvider.AZURE,
454
455
  )
455
456
  ):
456
457
  Error.errorhandler_wrapper(
@@ -458,7 +459,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
458
459
  None,
459
460
  ProgrammingError,
460
461
  {
461
- "msg": "workload_identity_impersonation_path is currently only supported for GCP and AWS.",
462
+ "msg": "workload_identity_impersonation_path is currently only supported for GCP, AWS, and AZURE.",
462
463
  "errno": ER_INVALID_WIF_SETTINGS,
463
464
  },
464
465
  )
@@ -57,6 +57,7 @@ from snowflake.connector.errors import BindUploadError, DatabaseError
57
57
  from snowflake.connector.file_transfer_agent import SnowflakeProgressPercentage
58
58
  from snowflake.connector.telemetry import TelemetryData, TelemetryField
59
59
  from snowflake.connector.time_util import get_time_millis
60
+ from snowflake.connector.util_text import extract_values_clause
60
61
 
61
62
  from .._utils import REQUEST_ID_STATEMENT_PARAM_NAME, is_uuid4
62
63
 
@@ -765,8 +766,8 @@ class SnowflakeCursorBase(SnowflakeCursorBaseSync, abc.ABC, typing.Generic[Fetch
765
766
  # accumulate results to mock the result from a single insert statement as formatted below
766
767
  logger.debug("rewriting INSERT query")
767
768
  command_wo_comments = re.sub(self.COMMENT_SQL_RE, "", command)
768
- m = self.INSERT_SQL_VALUES_RE.match(command_wo_comments)
769
- if not m:
769
+ fmt = extract_values_clause(command_wo_comments)
770
+ if fmt is None:
770
771
  Error.errorhandler_wrapper(
771
772
  self.connection,
772
773
  self,
@@ -776,8 +777,6 @@ class SnowflakeCursorBase(SnowflakeCursorBaseSync, abc.ABC, typing.Generic[Fetch
776
777
  "errno": ER_FAILED_TO_REWRITE_MULTI_ROW_INSERT,
777
778
  },
778
779
  )
779
-
780
- fmt = m.group(1)
781
780
  values = []
782
781
  for param in seqparams:
783
782
  logger.debug(f"parameter: {param}")
@@ -11,7 +11,16 @@ from typing import TYPE_CHECKING, Any, AsyncGenerator
11
11
 
12
12
  import OpenSSL.SSL
13
13
 
14
- from ..compat import FORBIDDEN, OK, UNAUTHORIZED, urlencode, urlparse, urlsplit
14
+ from ..compat import (
15
+ FORBIDDEN,
16
+ OK,
17
+ PERMANENT_REDIRECT,
18
+ TEMPORARY_REDIRECT,
19
+ UNAUTHORIZED,
20
+ urlencode,
21
+ urlparse,
22
+ urlsplit,
23
+ )
15
24
  from ..constants import (
16
25
  _CONNECTIVITY_ERR_MSG,
17
26
  HTTP_HEADER_ACCEPT,
@@ -741,6 +750,18 @@ class SnowflakeRestful(SnowflakeRestfulSync):
741
750
  data=input_data,
742
751
  timeout=aiohttp.ClientTimeout(socket_timeout),
743
752
  )
753
+
754
+ # Log when the HTTP library auto-followed a redirect chain before
755
+ # delivering this response (history is populated by aiohttp).
756
+ if raw_ret.history:
757
+ for hist_resp in raw_ret.history:
758
+ if hist_resp.status in (TEMPORARY_REDIRECT, PERMANENT_REDIRECT):
759
+ logger.debug(
760
+ "Request was redirected: HTTP %d to %s",
761
+ hist_resp.status,
762
+ hist_resp.headers.get("Location", "unknown"),
763
+ )
764
+
744
765
  try:
745
766
  if raw_ret.status == OK:
746
767
  logger.debug("SUCCESS")
@@ -841,6 +862,23 @@ class SnowflakeRestful(SnowflakeRestfulSync):
841
862
  exc_info=True,
842
863
  )
843
864
  raise RetryRequest(err)
865
+ except aiohttp.TooManyRedirects as err:
866
+ # aiohttp raises TooManyRedirects when max_redirects is exceeded.
867
+ # Unlike .NET's HttpClient (which returns the last 307/308 response),
868
+ # aiohttp throws here — so is_retryable_http_code(307/308) never fires.
869
+ # Catch explicitly and apply the same retry/login logic.
870
+ if is_login_request(full_url):
871
+ raise OperationalError(
872
+ msg="Login request is retryable. Will be handled by authenticator",
873
+ errno=ER_RETRYABLE_CODE,
874
+ )
875
+ else:
876
+ logger.debug(
877
+ "Too many redirects. Retrying... Ignore the following "
878
+ f"error stack: {err}",
879
+ exc_info=True,
880
+ )
881
+ raise RetryRequest(err)
844
882
  except Exception as err:
845
883
  if isinstance(err, (Error, RetryRequest, ReauthenticationRequest)):
846
884
  raise err
@@ -443,7 +443,7 @@ async def write_pandas(
443
443
  quote_identifiers,
444
444
  )
445
445
 
446
- if auto_create_table or overwrite:
446
+ if auto_create_table:
447
447
  iceberg = "ICEBERG " if iceberg_config else ""
448
448
  iceberg_config_statement = _iceberg_config_statement_helper(
449
449
  iceberg_config or {}