snowflake-connector-python 4.6.0__tar.gz → 4.7.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 (303) hide show
  1. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/DESCRIPTION.md +13 -0
  2. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/PKG-INFO +19 -3
  3. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/setup.cfg +5 -2
  4. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_connection.py +7 -2
  5. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_wif_util.py +106 -57
  6. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_keypair.py +6 -2
  7. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_oauth_code.py +9 -13
  8. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +10 -13
  9. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/_oauth_base.py +144 -67
  10. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/oauth_code.py +15 -3
  11. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/workload_identity.py +3 -0
  12. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/connection.py +14 -3
  13. snowflake_connector_python-4.7.0/src/snowflake/connector/log_configuration.py +98 -0
  14. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +36 -0
  15. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/options.py +21 -0
  16. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/s3_storage_client.py +83 -2
  17. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/url_util.py +10 -14
  18. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/version.py +1 -1
  19. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/wif_util.py +122 -62
  20. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/PKG-INFO +19 -3
  21. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/requires.txt +6 -2
  22. snowflake_connector_python-4.6.0/src/snowflake/connector/log_configuration.py +0 -62
  23. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/CONTRIBUTING.md +0 -0
  24. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/LICENSE.txt +0 -0
  25. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/MANIFEST.in +0 -0
  26. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/NOTICE +0 -0
  27. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/README.md +0 -0
  28. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/SECURITY.md +0 -0
  29. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/pyproject.toml +0 -0
  30. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/setup.py +0 -0
  31. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/__init__.py +0 -0
  32. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/_connection_identifier_shape.py +0 -0
  33. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  34. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/_sql_util.py +0 -0
  35. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/_utils.py +0 -0
  36. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/README.md +0 -0
  37. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/__init__.py +0 -0
  38. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
  39. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
  40. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_cursor.py +0 -0
  41. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_description.py +0 -0
  42. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
  43. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
  44. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
  45. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_network.py +0 -0
  46. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
  47. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
  48. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
  49. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
  50. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_result_set.py +0 -0
  51. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
  52. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_session_manager.py +0 -0
  53. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
  54. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
  55. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_time_util.py +0 -0
  56. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
  57. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_auth.py +0 -0
  58. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
  59. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
  60. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
  61. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
  62. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
  63. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
  64. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
  65. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
  66. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
  67. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
  68. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/arrow_context.py +0 -0
  69. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/__init__.py +0 -0
  70. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/_auth.py +0 -0
  71. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  72. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  73. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/default.py +0 -0
  74. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  75. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/keypair.py +0 -0
  76. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  77. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/oauth.py +0 -0
  78. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  79. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/okta.py +0 -0
  80. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/pat.py +0 -0
  81. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  82. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
  83. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  84. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/backoff_policies.py +0 -0
  85. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  86. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/cache.py +0 -0
  87. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/compat.py +0 -0
  88. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/config_manager.py +0 -0
  89. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
  90. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/constants.py +0 -0
  91. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter.py +0 -0
  92. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  93. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter_null.py +0 -0
  94. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  95. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/crl.py +0 -0
  96. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/crl_cache.py +0 -0
  97. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/cursor.py +0 -0
  98. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/dbapi.py +0 -0
  99. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/description.py +0 -0
  100. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  101. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/encryption_util.py +0 -0
  102. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/errorcode.py +0 -0
  103. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/errors.py +0 -0
  104. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  105. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  106. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/feature.py +0 -0
  107. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_compression_type.py +0 -0
  108. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_lock.py +0 -0
  109. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
  110. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_util.py +0 -0
  111. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  112. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  113. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/interval_util.py +0 -0
  114. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/local_storage_client.py +0 -0
  115. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  116. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  117. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/minicore/__init__.py +0 -0
  118. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  119. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  120. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  121. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  122. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  123. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  124. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  125. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  126. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  127. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  128. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  129. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  130. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  131. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  132. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  133. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  134. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  135. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  136. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  137. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  138. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  139. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  140. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  141. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  142. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  143. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  144. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  145. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  146. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  147. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  148. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  149. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  150. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  151. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  152. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  153. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  154. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  155. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  156. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  157. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  158. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  159. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  160. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  161. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  162. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  163. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  164. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  165. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  166. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  167. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  168. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  169. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  170. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  171. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  172. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  173. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  174. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  175. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  176. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  177. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  178. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  179. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  180. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  181. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  182. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  183. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  184. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  185. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  186. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  187. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  188. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  189. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  190. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  191. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  192. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  193. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  194. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  195. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  196. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  197. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  198. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  199. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  200. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  201. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  202. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  203. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  204. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  205. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  206. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  207. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  208. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  209. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/network.py +0 -0
  210. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  211. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  212. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/os_details.py +0 -0
  213. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/pandas_tools.py +0 -0
  214. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/platform_detection.py +0 -0
  215. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/proxy.py +0 -0
  216. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/py.typed +0 -0
  217. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/result_batch.py +0 -0
  218. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/result_set.py +0 -0
  219. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/secret_detector.py +0 -0
  220. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/session_manager.py +0 -0
  221. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sf_dirs.py +0 -0
  222. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  223. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sfdatetime.py +0 -0
  224. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/snow_logging.py +0 -0
  225. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sqlstate.py +0 -0
  226. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  227. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  228. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/storage_client.py +0 -0
  229. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/telemetry.py +0 -0
  230. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  231. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/test_util.py +0 -0
  232. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/time_util.py +0 -0
  233. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/token_cache.py +0 -0
  234. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/__init__.py +0 -0
  235. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  236. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  237. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  238. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  239. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/util_text.py +0 -0
  240. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  241. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  242. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  243. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  244. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  245. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  246. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  247. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  248. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  249. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  250. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  251. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  252. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  253. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  254. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  255. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
  256. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  257. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  258. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  259. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  260. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  261. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  262. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
  263. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  264. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
  265. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  266. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  267. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  268. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  269. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
  270. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
  271. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
  272. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
  273. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
  274. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
  275. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  276. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  277. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  278. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  279. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  280. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
  281. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
  282. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
  283. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  284. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
  285. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  286. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  287. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  288. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  289. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  290. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  291. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  292. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  293. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  294. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  295. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  296. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  297. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
  298. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  299. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  300. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  301. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  302. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  303. {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,6 +7,19 @@ 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.0(Jul 2,2026)
11
+ - Fixed `python-connector.log` not rotating on Windows, and every record being logged twice, when easy logging is enabled via `config.toml` (SNOW-3680325).
12
+ - **Note:** As part of this fix, easy logging no longer calls `logging.basicConfig()` and therefore no longer configures the root logger. `python-connector.log` now captures only the `snowflake.connector`, `botocore`, and `boto3`.
13
+ - Improved URL validation reliability by replacing the hand-rolled regex in `is_valid_url()` with `urllib.parse.urlparse` (SNOW-3392651).
14
+ - Fixed OAuth infinite loop when tokens expire by ensuring `reauthenticate()` calls `_request_tokens()` directly instead of looping through `prepare()`. Token cache is now read exactly once per connection, and `_store_tokens()` preserves macOS Keychain ACL by never calling `remove()`. The async OAuth `reauthenticate()` now runs the synchronous OAuth flow on a worker thread instead of blocking the event loop.
15
+ - Fixed OAuth scope handling for Snowflake custom OAuth: when refresh tokens are enabled, the connector no longer appends the OIDC `offline_access` scope for token endpoints on `*.snowflakecomputing.com` or `*.snowflakecomputing.cn`, which caused `invalid_scope` errors. Snowflake custom OAuth expects `refresh_token` in scope instead. External IdP behavior is unchanged.
16
+ - Fixed input validation for `scale` metadata in Arrow result set processing for `TIME`, `TIMESTAMP_NTZ`, `TIMESTAMP_LTZ`, and `TIMESTAMP_TZ` columns (SNOW-3388299).
17
+ - Removed pandas upper bound dependency constraint on the `[pandas]` extra to allow installation of pandas 3.0.0 and later.
18
+ - Fixed S3 storage client to correctly handle 307/308 (method-preserving) and 301/302 (GET/HEAD only) redirects by disabling automatic redirect following and re-signing each request with AWS SigV4 credentials for the redirect target. The region is updated from the `x-amz-bucket-region` response header on each redirect. Redirects are capped at 5 hops.
19
+ - 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.
20
+ - 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.
21
+ - 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).
22
+
10
23
  - v4.6.0(May 28,2026)
11
24
  - Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
12
25
  - Fixed sdist to only install the minicore binary matching the current platform (SNOW-3526469). Previous 4.x releases copied every platform's minicore `.so`/`.dylib`/`.dll` into the install prefix, breaking downstream packagers (e.g. Homebrew) whose audits reject foreign-arch binaries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.6.0
3
+ Version: 4.7.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -58,8 +58,11 @@ Requires-Dist: botocore>=1.24
58
58
  Provides-Extra: boto
59
59
  Requires-Dist: boto3>=1.24; extra == "boto"
60
60
  Requires-Dist: botocore>=1.24; extra == "boto"
61
+ Provides-Extra: azure
62
+ Requires-Dist: azure-identity>=1.16; extra == "azure"
61
63
  Provides-Extra: development
62
64
  Requires-Dist: Cython; extra == "development"
65
+ Requires-Dist: azure-identity>=1.16; extra == "development"
63
66
  Requires-Dist: coverage; extra == "development"
64
67
  Requires-Dist: mitmproxy>=12.0.0; python_version >= "3.12" and extra == "development"
65
68
  Requires-Dist: more-itertools; extra == "development"
@@ -75,8 +78,8 @@ Requires-Dist: pytest-xdist; extra == "development"
75
78
  Requires-Dist: pytzdata; extra == "development"
76
79
  Requires-Dist: responses; extra == "development"
77
80
  Provides-Extra: pandas
78
- Requires-Dist: pandas<3.0.0,>=1.0.0; python_version < "3.13" and extra == "pandas"
79
- Requires-Dist: pandas<3.0.0,>=2.1.2; python_version >= "3.13" and extra == "pandas"
81
+ Requires-Dist: pandas>=1.0.0; python_version < "3.13" and extra == "pandas"
82
+ Requires-Dist: pandas>=2.1.2; python_version >= "3.13" and extra == "pandas"
80
83
  Requires-Dist: pyarrow>=14.0.1; extra == "pandas"
81
84
  Provides-Extra: secure-local-storage
82
85
  Requires-Dist: keyring<26.0.0,>=23.1.0; extra == "secure-local-storage"
@@ -92,6 +95,19 @@ https://docs.snowflake.com/
92
95
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
93
96
 
94
97
  # Release Notes
98
+ - v4.7.0(Jul 2,2026)
99
+ - Fixed `python-connector.log` not rotating on Windows, and every record being logged twice, when easy logging is enabled via `config.toml` (SNOW-3680325).
100
+ - **Note:** As part of this fix, easy logging no longer calls `logging.basicConfig()` and therefore no longer configures the root logger. `python-connector.log` now captures only the `snowflake.connector`, `botocore`, and `boto3`.
101
+ - Improved URL validation reliability by replacing the hand-rolled regex in `is_valid_url()` with `urllib.parse.urlparse` (SNOW-3392651).
102
+ - Fixed OAuth infinite loop when tokens expire by ensuring `reauthenticate()` calls `_request_tokens()` directly instead of looping through `prepare()`. Token cache is now read exactly once per connection, and `_store_tokens()` preserves macOS Keychain ACL by never calling `remove()`. The async OAuth `reauthenticate()` now runs the synchronous OAuth flow on a worker thread instead of blocking the event loop.
103
+ - Fixed OAuth scope handling for Snowflake custom OAuth: when refresh tokens are enabled, the connector no longer appends the OIDC `offline_access` scope for token endpoints on `*.snowflakecomputing.com` or `*.snowflakecomputing.cn`, which caused `invalid_scope` errors. Snowflake custom OAuth expects `refresh_token` in scope instead. External IdP behavior is unchanged.
104
+ - Fixed input validation for `scale` metadata in Arrow result set processing for `TIME`, `TIMESTAMP_NTZ`, `TIMESTAMP_LTZ`, and `TIMESTAMP_TZ` columns (SNOW-3388299).
105
+ - Removed pandas upper bound dependency constraint on the `[pandas]` extra to allow installation of pandas 3.0.0 and later.
106
+ - Fixed S3 storage client to correctly handle 307/308 (method-preserving) and 301/302 (GET/HEAD only) redirects by disabling automatic redirect following and re-signing each request with AWS SigV4 credentials for the redirect target. The region is updated from the `x-amz-bucket-region` response header on each redirect. Redirects are capped at 5 hops.
107
+ - 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.
108
+ - 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.
109
+ - 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).
110
+
95
111
  - v4.6.0(May 28,2026)
96
112
  - Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
97
113
  - Fixed sdist to only install the minicore binary matching the current platform (SNOW-3526469). Previous 4.x releases copied every platform's minicore `.so`/`.dylib`/`.dll` into the install prefix, breaking downstream packagers (e.g. Homebrew) whose audits reject foreign-arch binaries.
@@ -85,8 +85,11 @@ console_scripts =
85
85
  boto =
86
86
  boto3>=1.24
87
87
  botocore>=1.24
88
+ azure =
89
+ azure-identity>=1.16
88
90
  development =
89
91
  Cython
92
+ azure-identity>=1.16
90
93
  coverage
91
94
  mitmproxy>=12.0.0; python_version >= '3.12'
92
95
  more-itertools
@@ -102,8 +105,8 @@ development =
102
105
  pytzdata
103
106
  responses
104
107
  pandas =
105
- pandas>=1.0.0,<3.0.0; python_version < '3.13'
106
- pandas>=2.1.2,<3.0.0; python_version >= '3.13'
108
+ pandas>=1.0.0; python_version < '3.13'
109
+ pandas>=2.1.2; python_version >= '3.13'
107
110
  pyarrow>=14.0.1
108
111
  secure-local-storage =
109
112
  keyring>=23.1.0,<26.0.0
@@ -1084,9 +1084,14 @@ class SnowflakeConnection(SnowflakeConnectionSync):
1084
1084
  ret["data"] = {}
1085
1085
  if _update_current_object:
1086
1086
  data = ret["data"]
1087
- if "finalDatabaseName" in data and data["finalDatabaseName"] is not None:
1087
+ is_context_switch = sql.strip().upper().startswith("USE ")
1088
+ if data.get("finalDatabaseName") is not None and (
1089
+ self._database is not None or is_context_switch
1090
+ ):
1088
1091
  self._database = data["finalDatabaseName"]
1089
- if "finalSchemaName" in data and data["finalSchemaName"] is not None:
1092
+ if data.get("finalSchemaName") is not None and (
1093
+ self._schema is not None or is_context_switch
1094
+ ):
1090
1095
  self._schema = data["finalSchemaName"]
1091
1096
  if "finalWarehouseName" in data and data["finalWarehouseName"] is not None:
1092
1097
  self._warehouse = data["finalWarehouseName"]
@@ -10,8 +10,10 @@ import jwt
10
10
  from snowflake.connector.options import (
11
11
  aioboto3,
12
12
  aiobotocore,
13
+ azure_identity_aio,
13
14
  botocore,
14
15
  installed_aioboto,
16
+ installed_azure_identity,
15
17
  )
16
18
 
17
19
  from ..errorcode import ER_INVALID_WIF_SETTINGS, ER_WIF_CREDENTIALS_NOT_FOUND
@@ -33,6 +35,26 @@ logger = logging.getLogger(__name__)
33
35
  GCP_METADATA_SERVICE_ACCOUNT_BASE_URL = "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default"
34
36
 
35
37
 
38
+ async def get_azure_mi_token_via_aks(resource: str) -> str:
39
+ """Gets an Azure MI access token via AsyncWorkloadIdentityCredential on AKS."""
40
+ if not installed_azure_identity:
41
+ raise MissingDependencyError(
42
+ "azure-identity (install with: pip install 'snowflake-connector-python[azure]')"
43
+ )
44
+ logger.debug(
45
+ "Detected AKS workload identity environment, using WorkloadIdentityCredential"
46
+ )
47
+ try:
48
+ async with azure_identity_aio.WorkloadIdentityCredential() as credential:
49
+ token = await credential.get_token(f"{resource}/.default")
50
+ return token.token
51
+ except Exception as e:
52
+ raise ProgrammingError(
53
+ msg=f"Error fetching Azure MI token via WorkloadIdentityCredential: {e}. Ensure the application is running on AKS with workload identity configured.",
54
+ errno=ER_WIF_CREDENTIALS_NOT_FOUND,
55
+ )
56
+
57
+
36
58
  async def get_aws_region() -> str:
37
59
  """Get the current AWS workload's region."""
38
60
  region = os.environ.get("AWS_REGION") or os.environ.get("AWS_DEFAULT_REGION")
@@ -283,73 +305,100 @@ async def create_azure_attestation(
283
305
 
284
306
  If the application isn't running on Azure or no credentials were found, raises an error.
285
307
  """
286
- if impersonation_path:
287
- if len(impersonation_path) != 1:
308
+ # AKS Workload Identity path: the three env vars are injected by the AKS webhook,
309
+ # and the token file is mounted by the Azure Workload Identity webhook.
310
+ # Checking file existence (rather than KUBERNETES_SERVICE_HOST) correctly handles
311
+ # pods with enableServiceLinks=false and avoids false positives on non-AKS K8s.
312
+ _federated_token_file = os.environ.get("AZURE_FEDERATED_TOKEN_FILE", "")
313
+ is_aks = all(
314
+ [
315
+ os.environ.get("AZURE_CLIENT_ID"),
316
+ os.environ.get("AZURE_TENANT_ID"),
317
+ _federated_token_file,
318
+ os.path.exists(_federated_token_file),
319
+ ]
320
+ )
321
+ if is_aks:
322
+ if impersonation_path:
288
323
  raise ProgrammingError(
289
- msg="Azure WIF impersonation only supports a single service principal (single-hop). impersonation_path must contain exactly one client_id.",
324
+ msg="workload_identity_impersonation_path is not supported on AKS.",
290
325
  errno=ER_INVALID_WIF_SETTINGS,
291
326
  )
292
- resource = (
293
- AZURE_WIF_FEDERATION_AUDIENCE
294
- if impersonation_path
295
- else snowflake_entra_resource
296
- )
297
- headers = {"Metadata": "true"}
298
- url_without_query_string = "http://169.254.169.254/metadata/identity/oauth2/token"
299
- query_params = f"api-version=2018-02-01&resource={resource}"
327
+ jwt_str = await get_azure_mi_token_via_aks(snowflake_entra_resource)
328
+ else:
329
+ if impersonation_path:
330
+ if len(impersonation_path) != 1:
331
+ raise ProgrammingError(
332
+ msg="Azure WIF impersonation only supports a single service principal (single-hop). impersonation_path must contain exactly one client_id.",
333
+ errno=ER_INVALID_WIF_SETTINGS,
334
+ )
335
+ resource = (
336
+ AZURE_WIF_FEDERATION_AUDIENCE
337
+ if impersonation_path
338
+ else snowflake_entra_resource
339
+ )
300
340
 
301
- # Check if running in Azure Functions environment
302
- identity_endpoint = os.environ.get("IDENTITY_ENDPOINT")
303
- identity_header = os.environ.get("IDENTITY_HEADER")
304
- is_azure_functions = identity_endpoint is not None
341
+ headers = {"Metadata": "true"}
342
+ url_without_query_string = (
343
+ "http://169.254.169.254/metadata/identity/oauth2/token"
344
+ )
345
+ query_params = f"api-version=2018-02-01&resource={resource}"
346
+
347
+ # Check if running in Azure Functions environment
348
+ identity_endpoint = os.environ.get("IDENTITY_ENDPOINT")
349
+ identity_header = os.environ.get("IDENTITY_HEADER")
350
+ is_azure_functions = identity_endpoint is not None
351
+
352
+ if is_azure_functions:
353
+ if not identity_header:
354
+ raise ProgrammingError(
355
+ msg="Managed identity is not enabled on this Azure function.",
356
+ errno=ER_WIF_CREDENTIALS_NOT_FOUND,
357
+ )
358
+
359
+ # Azure Functions uses a different endpoint, headers and API version.
360
+ url_without_query_string = identity_endpoint
361
+ headers = {"X-IDENTITY-HEADER": identity_header}
362
+ query_params = f"api-version=2019-08-01&resource={resource}"
363
+
364
+ # Allow configuring an explicit client ID, which may be used in Azure Functions,
365
+ # if there are user-assigned identities, or multiple managed identities available.
366
+ managed_identity_client_id = os.environ.get("MANAGED_IDENTITY_CLIENT_ID")
367
+ if managed_identity_client_id:
368
+ query_params += f"&client_id={managed_identity_client_id}"
369
+
370
+ response_text = None
371
+ try:
372
+ res = await session_manager.request(
373
+ method="GET",
374
+ url=f"{url_without_query_string}?{query_params}",
375
+ headers=headers,
376
+ )
305
377
 
306
- if is_azure_functions:
307
- if not identity_header:
378
+ content = await res.content.read()
379
+ response_text = content.decode("utf-8")
380
+ response_data = json.loads(response_text)
381
+ res.raise_for_status()
382
+ except Exception as e:
308
383
  raise ProgrammingError(
309
- msg="Managed identity is not enabled on this Azure function.",
384
+ msg=f"Error fetching Azure metadata: {e}. Response: {response_text}. Ensure the application is running on Azure.",
310
385
  errno=ER_WIF_CREDENTIALS_NOT_FOUND,
311
386
  )
312
387
 
313
- # Azure Functions uses a different endpoint, headers and API version.
314
- url_without_query_string = identity_endpoint
315
- headers = {"X-IDENTITY-HEADER": identity_header}
316
- query_params = f"api-version=2019-08-01&resource={resource}"
317
-
318
- # Allow configuring an explicit client ID, which may be used in Azure Functions,
319
- # if there are user-assigned identities, or multiple managed identities available.
320
- managed_identity_client_id = os.environ.get("MANAGED_IDENTITY_CLIENT_ID")
321
- if managed_identity_client_id:
322
- query_params += f"&client_id={managed_identity_client_id}"
323
-
324
- response_text = None
325
- try:
326
- res = await session_manager.request(
327
- method="GET",
328
- url=f"{url_without_query_string}?{query_params}",
329
- headers=headers,
330
- )
331
-
332
- content = await res.content.read()
333
- response_text = content.decode("utf-8")
334
- response_data = json.loads(response_text)
335
- res.raise_for_status()
336
- except Exception as e:
337
- raise ProgrammingError(
338
- msg=f"Error fetching Azure metadata: {e}. Response: {response_text}. Ensure the application is running on Azure.",
339
- errno=ER_WIF_CREDENTIALS_NOT_FOUND,
340
- )
341
-
342
- jwt_str = response_data.get("access_token")
343
- if not jwt_str:
344
- raise ProgrammingError(
345
- msg="No access token found in Azure metadata service response.",
346
- errno=ER_WIF_CREDENTIALS_NOT_FOUND,
347
- )
388
+ jwt_str = response_data.get("access_token")
389
+ if not jwt_str:
390
+ raise ProgrammingError(
391
+ msg="No access token found in Azure metadata service response.",
392
+ errno=ER_WIF_CREDENTIALS_NOT_FOUND,
393
+ )
348
394
 
349
- if impersonation_path:
350
- jwt_str = await get_azure_sp_token_via_impersonation(
351
- jwt_str, impersonation_path[0], snowflake_entra_resource, session_manager
352
- )
395
+ if impersonation_path:
396
+ jwt_str = await get_azure_sp_token_via_impersonation(
397
+ jwt_str,
398
+ impersonation_path[0],
399
+ snowflake_entra_resource,
400
+ session_manager,
401
+ )
353
402
 
354
403
  issuer, subject = extract_iss_and_sub_without_signature_verification(jwt_str)
355
404
  return WorkloadIdentityAttestation(
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  from logging import getLogger
6
6
  from typing import Any
7
7
 
8
+ from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePrivateKey
8
9
  from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey
9
10
 
10
11
  from ...auth.keypair import AuthByKeyPair as AuthByKeyPairSync
@@ -16,11 +17,14 @@ logger = getLogger(__name__)
16
17
  class AuthByKeyPair(AuthByPluginAsync, AuthByKeyPairSync):
17
18
  def __init__(
18
19
  self,
19
- private_key: bytes | str | RSAPrivateKey,
20
+ private_key: bytes | str | RSAPrivateKey | EllipticCurvePrivateKey,
21
+ private_key_passphrase: bytes | None = None,
20
22
  lifetime_in_seconds: int = AuthByKeyPairSync.LIFETIME,
21
23
  **kwargs,
22
24
  ) -> None:
23
- AuthByKeyPairSync.__init__(self, private_key, lifetime_in_seconds, **kwargs)
25
+ AuthByKeyPairSync.__init__(
26
+ self, private_key, private_key_passphrase, lifetime_in_seconds, **kwargs
27
+ )
24
28
 
25
29
  async def reset_secrets(self) -> None:
26
30
  AuthByKeyPairSync.reset_secrets(self)
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import asyncio
5
6
  import logging
6
7
  from typing import TYPE_CHECKING, Any
7
8
 
@@ -72,19 +73,14 @@ class AuthByOauthCode(AuthByPluginAsync, AuthByOauthCodeSync):
72
73
  async def reauthenticate(
73
74
  self, conn: SnowflakeConnection, **kwargs: Any
74
75
  ) -> dict[str, bool]:
75
- """Override to use async connection properly."""
76
- # Call the sync reset logic but handle the connection retry ourselves
77
- self._reset_access_token()
78
- if self._pop_cached_refresh_token():
79
- logger.debug(
80
- "OAuth refresh token is available, try to use it and get a new access token"
81
- )
82
- # this part is a little hacky - will need to refactor that in future.
83
- # we treat conn as a sync connection here, but this method only reads data from the object - which should be fine.
84
- self._do_refresh_token(conn=conn)
85
- # Use async authenticate_with_retry
86
- await conn.authenticate_with_retry(self)
87
- return {"success": True}
76
+ # The sync reauthenticate path opens a browser, blocks on the local
77
+ # callback socket, and POSTs to the IdP via urllib3 - all of which
78
+ # would stall the asyncio event loop. Run it in a worker thread.
79
+ loop = asyncio.get_running_loop()
80
+ return await loop.run_in_executor(
81
+ None,
82
+ lambda: AuthByOauthCodeSync.reauthenticate(self, conn=conn, **kwargs),
83
+ )
88
84
 
89
85
  async def update_body(self, body: dict[Any, Any]) -> None:
90
86
  AuthByOauthCodeSync.update_body(self, body)
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import asyncio
5
6
  import logging
6
7
  from typing import TYPE_CHECKING, Any
7
8
 
@@ -55,19 +56,15 @@ class AuthByOauthCredentials(AuthByPluginAsync, AuthByOauthCredentialsSync):
55
56
  async def reauthenticate(
56
57
  self, conn: SnowflakeConnection, **kwargs: Any
57
58
  ) -> dict[str, bool]:
58
- """Override to use async connection properly."""
59
- # Call the sync reset logic but handle the connection retry ourselves
60
- self._reset_access_token()
61
- if self._pop_cached_refresh_token():
62
- logger.debug(
63
- "OAuth refresh token is available, try to use it and get a new access token"
64
- )
65
- # this part is a little hacky - will need to refactor that in future.
66
- # we treat conn as a sync connection here, but this method only reads data from the object - which should be fine.
67
- self._do_refresh_token(conn=conn)
68
- # Use async authenticate_with_retry
69
- await conn.authenticate_with_retry(self)
70
- return {"success": True}
59
+ # The sync reauthenticate path POSTs to the IdP via urllib3, which
60
+ # would stall the asyncio event loop. Run it in a worker thread.
61
+ loop = asyncio.get_running_loop()
62
+ return await loop.run_in_executor(
63
+ None,
64
+ lambda: AuthByOauthCredentialsSync.reauthenticate(
65
+ self, conn=conn, **kwargs
66
+ ),
67
+ )
71
68
 
72
69
  async def update_body(self, body: dict[Any, Any]) -> None:
73
70
  AuthByOauthCredentialsSync.update_body(self, body)