snowflake-connector-python 4.5.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 (304) hide show
  1. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/CONTRIBUTING.md +2 -2
  2. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/DESCRIPTION.md +20 -0
  3. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/PKG-INFO +27 -6
  4. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/README.md +2 -2
  5. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/setup.cfg +6 -5
  6. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/setup.py +66 -0
  7. snowflake_connector_python-4.7.0/src/snowflake/connector/_connection_identifier_shape.py +136 -0
  8. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_connection.py +49 -2
  9. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_session_manager.py +0 -9
  10. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_wif_util.py +106 -57
  11. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_keypair.py +6 -2
  12. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_oauth_code.py +9 -13
  13. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +10 -13
  14. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/_oauth_base.py +144 -67
  15. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/oauth_code.py +15 -3
  16. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/workload_identity.py +3 -0
  17. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/connection.py +80 -3
  18. snowflake_connector_python-4.7.0/src/snowflake/connector/log_configuration.py +98 -0
  19. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +36 -0
  20. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/options.py +21 -0
  21. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/s3_storage_client.py +83 -2
  22. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/telemetry.py +16 -0
  23. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/url_util.py +10 -14
  24. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +3 -1
  25. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -1
  26. snowflake_connector_python-4.7.0/src/snowflake/connector/vendored/urllib3/_version.py +24 -0
  27. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/connection.py +4 -4
  28. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +23 -10
  29. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +5 -1
  30. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +7 -8
  31. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +1 -1
  32. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +2 -2
  33. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/fields.py +14 -14
  34. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +8 -6
  35. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/response.py +35 -22
  36. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +8 -0
  37. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +11 -61
  38. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +5 -11
  39. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/version.py +1 -1
  40. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/wif_util.py +122 -62
  41. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/PKG-INFO +27 -6
  42. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +1 -0
  43. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/requires.txt +5 -4
  44. snowflake_connector_python-4.5.0/src/snowflake/connector/log_configuration.py +0 -62
  45. snowflake_connector_python-4.5.0/src/snowflake/connector/vendored/urllib3/_version.py +0 -34
  46. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/LICENSE.txt +0 -0
  47. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/MANIFEST.in +0 -0
  48. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/NOTICE +0 -0
  49. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/SECURITY.md +0 -0
  50. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/pyproject.toml +0 -0
  51. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/__init__.py +0 -0
  52. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  53. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/_sql_util.py +0 -0
  54. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/_utils.py +0 -0
  55. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/README.md +0 -0
  56. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/__init__.py +0 -0
  57. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
  58. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
  59. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_cursor.py +0 -0
  60. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_description.py +0 -0
  61. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
  62. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
  63. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
  64. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_network.py +0 -0
  65. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
  66. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
  67. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
  68. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
  69. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_result_set.py +0 -0
  70. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
  71. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
  72. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
  73. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/_time_util.py +0 -0
  74. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
  75. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_auth.py +0 -0
  76. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
  77. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
  78. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
  79. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
  80. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
  81. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
  82. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
  83. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
  84. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
  85. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
  86. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/arrow_context.py +0 -0
  87. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/__init__.py +0 -0
  88. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/_auth.py +0 -0
  89. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  90. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  91. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/default.py +0 -0
  92. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  93. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/keypair.py +0 -0
  94. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  95. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/oauth.py +0 -0
  96. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  97. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/okta.py +0 -0
  98. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/pat.py +0 -0
  99. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  100. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
  101. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  102. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/backoff_policies.py +0 -0
  103. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  104. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/cache.py +0 -0
  105. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/compat.py +0 -0
  106. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/config_manager.py +0 -0
  107. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
  108. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/constants.py +0 -0
  109. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter.py +0 -0
  110. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  111. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter_null.py +0 -0
  112. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  113. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/crl.py +0 -0
  114. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/crl_cache.py +0 -0
  115. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/cursor.py +0 -0
  116. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/dbapi.py +0 -0
  117. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/description.py +0 -0
  118. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  119. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/encryption_util.py +0 -0
  120. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/errorcode.py +0 -0
  121. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/errors.py +0 -0
  122. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  123. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  124. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/feature.py +0 -0
  125. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_compression_type.py +0 -0
  126. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_lock.py +0 -0
  127. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
  128. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/file_util.py +0 -0
  129. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  130. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  131. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/interval_util.py +0 -0
  132. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/local_storage_client.py +0 -0
  133. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  134. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  135. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/minicore/__init__.py +0 -0
  136. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  137. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  138. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  139. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  140. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  141. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  142. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  143. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  144. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  145. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  146. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  147. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  148. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  149. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  150. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  151. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  152. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  153. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  154. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  155. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  156. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  157. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  158. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  159. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  160. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  161. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  162. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  163. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  164. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  165. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  166. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  167. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  168. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  169. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  170. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  171. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  172. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  173. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  174. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  175. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  176. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  177. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  178. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  179. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  180. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  181. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  182. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  183. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  184. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  185. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  186. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  187. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  188. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  189. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  190. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  191. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  192. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  193. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  194. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  195. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  196. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  197. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  198. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  199. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  200. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  201. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  202. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  203. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  204. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  205. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  206. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  207. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  208. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  209. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  210. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  211. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  212. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  213. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  214. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  215. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  216. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  217. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  218. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  219. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  220. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  221. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  222. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  223. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  224. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  225. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  226. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  227. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/network.py +0 -0
  228. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  229. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  230. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/os_details.py +0 -0
  231. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/pandas_tools.py +0 -0
  232. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/platform_detection.py +0 -0
  233. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/proxy.py +0 -0
  234. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/py.typed +0 -0
  235. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/result_batch.py +0 -0
  236. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/result_set.py +0 -0
  237. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/secret_detector.py +0 -0
  238. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/session_manager.py +0 -0
  239. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sf_dirs.py +0 -0
  240. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  241. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sfdatetime.py +0 -0
  242. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/snow_logging.py +0 -0
  243. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/sqlstate.py +0 -0
  244. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  245. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  246. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/storage_client.py +0 -0
  247. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  248. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/test_util.py +0 -0
  249. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/time_util.py +0 -0
  250. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/token_cache.py +0 -0
  251. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/__init__.py +0 -0
  252. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  253. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  254. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  255. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  256. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/util_text.py +0 -0
  257. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  258. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  259. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  260. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  261. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  262. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  263. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  264. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  265. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  266. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  267. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  268. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  269. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  270. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  271. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  272. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
  273. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  274. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  275. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  276. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  277. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  278. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  279. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
  280. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  281. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
  282. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
  283. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
  284. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
  285. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
  286. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  287. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
  288. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
  289. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
  290. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
  291. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  292. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  293. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  294. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  295. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  296. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  297. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  298. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  299. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
  300. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  301. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  302. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  303. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  304. {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.7.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -30,8 +30,8 @@ dependencies installed with `snowflake-connector-python` installed as an editabl
30
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 venv39 -e py39
34
- . venv39/bin/activate
33
+ tox --devenv venv310 -e py310
34
+ . venv310/bin/activate
35
35
  ```
36
36
 
37
37
  Note: we suggest using the lowest supported Python version for development.
@@ -7,8 +7,28 @@ 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
+
23
+ - v4.6.0(May 28,2026)
24
+ - Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
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.
26
+ - Added one in-band telemetry record per successful login describing which connection-identifier fields the user supplied (`account_provided`, `account_with_region`, `account_org_provided`, `region_provided`, `host_provided`). No hostname or account value is included. This is gated by the existing server-side `CLIENT_TELEMETRY_ENABLED` parameter and can additionally be disabled locally by setting `SF_TELEMETRY_DISABLE_CONNECTION_SHAPE=true`. The telemetry collection is time-boxed and will be removed in a future release.
27
+ - Bumped up vendored `urllib3` to `2.7.0`
28
+
10
29
  - v4.5.0(May 12,2026)
11
30
  - 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".
31
+ - Replaced third-party download URLs in CI scripts and Dockerfiles with Snowflake Artifactory to improve supply-chain security.
12
32
  - 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
33
  - 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
34
  - Added ECDSA key support (ES256, ES384, ES512) for key-pair authentication.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.5.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
@@ -22,7 +22,6 @@ Classifier: License :: OSI Approved :: Apache Software License
22
22
  Classifier: Operating System :: OS Independent
23
23
  Classifier: Programming Language :: Python :: 3
24
24
  Classifier: Programming Language :: Python :: 3 :: Only
25
- Classifier: Programming Language :: Python :: 3.9
26
25
  Classifier: Programming Language :: Python :: 3.10
27
26
  Classifier: Programming Language :: Python :: 3.11
28
27
  Classifier: Programming Language :: Python :: 3.12
@@ -35,7 +34,7 @@ Classifier: Topic :: Software Development
35
34
  Classifier: Topic :: Software Development :: Libraries
36
35
  Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
37
36
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
38
- Requires-Python: >=3.9
37
+ Requires-Python: >=3.10
39
38
  Description-Content-Type: text/markdown
40
39
  License-File: LICENSE.txt
41
40
  License-File: NOTICE
@@ -48,7 +47,6 @@ Requires-Dist: requests<3.0.0,>=2.32.4
48
47
  Requires-Dist: packaging
49
48
  Requires-Dist: charset_normalizer<4,>=2
50
49
  Requires-Dist: idna<4,>=3.7
51
- Requires-Dist: urllib3<2.0.0,>=1.26.5; python_version < "3.10"
52
50
  Requires-Dist: certifi>=2024.7.4
53
51
  Requires-Dist: typing_extensions<5,>=4.3
54
52
  Requires-Dist: filelock<4,>=3.5
@@ -60,8 +58,11 @@ Requires-Dist: botocore>=1.24
60
58
  Provides-Extra: boto
61
59
  Requires-Dist: boto3>=1.24; extra == "boto"
62
60
  Requires-Dist: botocore>=1.24; extra == "boto"
61
+ Provides-Extra: azure
62
+ Requires-Dist: azure-identity>=1.16; extra == "azure"
63
63
  Provides-Extra: development
64
64
  Requires-Dist: Cython; extra == "development"
65
+ Requires-Dist: azure-identity>=1.16; extra == "development"
65
66
  Requires-Dist: coverage; extra == "development"
66
67
  Requires-Dist: mitmproxy>=12.0.0; python_version >= "3.12" and extra == "development"
67
68
  Requires-Dist: more-itertools; extra == "development"
@@ -77,8 +78,8 @@ Requires-Dist: pytest-xdist; extra == "development"
77
78
  Requires-Dist: pytzdata; extra == "development"
78
79
  Requires-Dist: responses; extra == "development"
79
80
  Provides-Extra: pandas
80
- Requires-Dist: pandas<3.0.0,>=1.0.0; python_version < "3.13" and extra == "pandas"
81
- 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"
82
83
  Requires-Dist: pyarrow>=14.0.1; extra == "pandas"
83
84
  Provides-Extra: secure-local-storage
84
85
  Requires-Dist: keyring<26.0.0,>=23.1.0; extra == "secure-local-storage"
@@ -94,8 +95,28 @@ https://docs.snowflake.com/
94
95
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
95
96
 
96
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
+
111
+ - v4.6.0(May 28,2026)
112
+ - Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
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.
114
+ - Added one in-band telemetry record per successful login describing which connection-identifier fields the user supplied (`account_provided`, `account_with_region`, `account_org_provided`, `region_provided`, `host_provided`). No hostname or account value is included. This is gated by the existing server-side `CLIENT_TELEMETRY_ENABLED` parameter and can additionally be disabled locally by setting `SF_TELEMETRY_DISABLE_CONNECTION_SHAPE=true`. The telemetry collection is time-boxed and will be removed in a future release.
115
+ - Bumped up vendored `urllib3` to `2.7.0`
116
+
97
117
  - v4.5.0(May 12,2026)
98
118
  - 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".
119
+ - Replaced third-party download URLs in CI scripts and Dockerfiles with Snowflake Artifactory to improve supply-chain security.
99
120
  - 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
121
  - 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
122
  - Added ECDSA key support (ES256, ES384, ES512) for key-pair authentication.
@@ -15,7 +15,7 @@ using the Snowflake JDBC or ODBC drivers.
15
15
 
16
16
  The connector has **no** dependencies on JDBC or ODBC.
17
17
  It can be installed using ``pip`` on Linux, Mac OSX, and Windows platforms
18
- where Python 3.9.0 (or higher) is installed.
18
+ where Python 3.10.0 (or higher) is installed.
19
19
 
20
20
  Snowflake Documentation is available at:
21
21
  https://docs.snowflake.com/
@@ -42,7 +42,7 @@ Find the `snowflake_connector_python*.whl` package in the `./dist` directory.
42
42
  ### In Docker
43
43
  Or use our Dockerized build script `ci/build_docker.sh` and find the built wheel files in `dist/repaired_wheels`.
44
44
 
45
- Note: `ci/build_docker.sh` can be used to compile only certain versions, like this: `ci/build_docker.sh "3.9 3.10"`
45
+ Note: `ci/build_docker.sh` can be used to compile only certain versions, like this: `ci/build_docker.sh "3.10 3.11"`
46
46
 
47
47
  ## Code hygiene and other utilities
48
48
  These tools are integrated into `tox` to allow us to easily set them up universally on any computer.
@@ -20,7 +20,6 @@ classifiers =
20
20
  Operating System :: OS Independent
21
21
  Programming Language :: Python :: 3
22
22
  Programming Language :: Python :: 3 :: Only
23
- Programming Language :: Python :: 3.9
24
23
  Programming Language :: Python :: 3.10
25
24
  Programming Language :: Python :: 3.11
26
25
  Programming Language :: Python :: 3.12
@@ -41,7 +40,7 @@ project_urls =
41
40
  Changelog=https://github.com/snowflakedb/snowflake-connector-python/blob/main/DESCRIPTION.md
42
41
 
43
42
  [options]
44
- python_requires = >=3.9
43
+ python_requires = >=3.10
45
44
  packages = find_namespace:
46
45
  install_requires =
47
46
  asn1crypto>0.24.0,<2.0.0
@@ -53,7 +52,6 @@ install_requires =
53
52
  packaging
54
53
  charset_normalizer>=2,<4
55
54
  idna>=3.7,<4
56
- urllib3>=1.26.5,<2.0.0; python_version < '3.10'
57
55
  certifi>=2024.7.4
58
56
  typing_extensions>=4.3,<5
59
57
  filelock>=3.5,<4
@@ -87,8 +85,11 @@ console_scripts =
87
85
  boto =
88
86
  boto3>=1.24
89
87
  botocore>=1.24
88
+ azure =
89
+ azure-identity>=1.16
90
90
  development =
91
91
  Cython
92
+ azure-identity>=1.16
92
93
  coverage
93
94
  mitmproxy>=12.0.0; python_version >= '3.12'
94
95
  more-itertools
@@ -104,8 +105,8 @@ development =
104
105
  pytzdata
105
106
  responses
106
107
  pandas =
107
- pandas>=1.0.0,<3.0.0; python_version < '3.13'
108
- 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'
109
110
  pyarrow>=14.0.1
110
111
  secure-local-storage =
111
112
  keyring>=23.1.0,<26.0.0
@@ -1,10 +1,13 @@
1
1
  #!/usr/bin/env python
2
2
 
3
3
  import os
4
+ import platform
5
+ import shutil
4
6
  import sys
5
7
  import warnings
6
8
 
7
9
  from setuptools import Extension, setup
10
+ from setuptools.command.build_py import build_py
8
11
  from setuptools.command.egg_info import egg_info
9
12
 
10
13
  CONNECTOR_SRC_DIR = os.path.join("src", "snowflake", "connector")
@@ -192,8 +195,71 @@ class SetDefaultInstallationExtras(egg_info):
192
195
  self.distribution.install_requires += boto_extras
193
196
 
194
197
 
198
+ def _minicore_native_subdir():
199
+ """Return the minicore/<platform> subdir matching the current interpreter.
200
+
201
+ Mirrors snowflake.connector._utils._CoreLoader._get_platform_subdir so the
202
+ build-time pruner and the runtime loader always agree on the layout.
203
+ Returns None when the platform is not recognised (leave tree untouched).
204
+ """
205
+ system = platform.system().lower()
206
+ machine = platform.machine().lower()
207
+ if machine in ("x86_64", "amd64"):
208
+ arch = "x86_64"
209
+ elif machine in ("aarch64", "arm64"):
210
+ arch = "aarch64"
211
+ elif machine == "ppc64":
212
+ arch = "ppc64"
213
+ else:
214
+ return None
215
+
216
+ if system == "linux":
217
+ libc, _ = platform.libc_ver()
218
+ libc_family = "glibc" if libc == "glibc" else "musl"
219
+ return f"linux_{arch}_{libc_family}"
220
+ if system == "darwin":
221
+ return f"macos_{arch}"
222
+ if system == "windows":
223
+ return f"windows_{arch}"
224
+ if system == "aix":
225
+ return f"aix_{arch}"
226
+ return None
227
+
228
+
229
+ class PlatformBuildPy(build_py):
230
+ """Strip non-native minicore/<platform>/ dirs from the built distribution.
231
+
232
+ The sdist ships minicore binaries for every supported platform. At
233
+ build-time we keep only the one matching the current interpreter so wheels
234
+ and downstream sdist consumers (pip install, Homebrew, conda-forge,
235
+ nixpkgs) end up with a clean single-platform layout.
236
+ """
237
+
238
+ def run(self):
239
+ super().run()
240
+ self._prune_minicore()
241
+
242
+ def _prune_minicore(self):
243
+ minicore_build_dir = os.path.join(
244
+ self.build_lib, "snowflake", "connector", "minicore"
245
+ )
246
+ if not os.path.isdir(minicore_build_dir):
247
+ return
248
+ keep = _minicore_native_subdir()
249
+ if keep is None:
250
+ return
251
+ for entry in os.listdir(minicore_build_dir):
252
+ full = os.path.join(minicore_build_dir, entry)
253
+ if not os.path.isdir(full) or entry.startswith("__"):
254
+ continue
255
+ if entry == keep:
256
+ continue
257
+ shutil.rmtree(full)
258
+
259
+
195
260
  # Update command classes
196
261
  cmd_class["egg_info"] = SetDefaultInstallationExtras
262
+ cmd_class["build_py"] = PlatformBuildPy
197
263
 
198
264
  setup(
199
265
  version=version,
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env python
2
+ """Capture user-supplied connection-identifier provenance for in-band telemetry.
3
+
4
+ The shape captured here is consumed by ``SnowflakeConnection._log_connection_identifier_shape``
5
+ and emitted as a single ``client_connection_identifier_shape`` telemetry event
6
+ per successful login. The capture function inspects the raw kwargs passed to
7
+ ``SnowflakeConnection.__config`` before any normalization (host inference,
8
+ account stripping of ``.global``, region extraction from dotted account) runs,
9
+ so the shape reflects user intent rather than the final post-normalization
10
+ state of the connection.
11
+
12
+ Removal of this module and the emission it backs is tracked in SNOW-3548350
13
+ (target: 2026-11-30).
14
+ """
15
+ from __future__ import annotations
16
+
17
+ from dataclasses import dataclass
18
+ from typing import Any, Mapping
19
+
20
+ from .telemetry import TelemetryField
21
+
22
+
23
+ @dataclass(frozen=True)
24
+ class ConnectionIdentifierShape:
25
+ """Provenance of connection-identifier fields the user supplied.
26
+
27
+ All fields describe what the user supplied at the moment of input — they
28
+ reflect intent, not the final post-normalization state of the connection.
29
+
30
+ - ``account_provided``: the user explicitly set the ``account`` parameter
31
+ (via ``connect(account=...)``, kwargs, or ``connections.toml`` merged
32
+ into kwargs before ``__config`` runs).
33
+ - ``account_with_region``: the raw account string the user typed contained
34
+ a dot (e.g. ``"myacct.us-east-1"``), signaling the deprecated
35
+ ``account.region`` embedded form. Set only on the raw input.
36
+ - ``account_org_provided``: the raw account string carried a dash in its
37
+ account portion (e.g. ``"myorg-myacct"``), signaling the org-prefixed
38
+ form. Region-portion dashes (e.g. the ``-east-`` in
39
+ ``"myacct.us-east-1"``) are intentionally not counted; only the portion
40
+ before the first ``.`` is examined.
41
+ - ``region_provided``: the user explicitly set the ``region`` parameter as
42
+ a distinct kwarg. A region embedded inside a dotted account string is
43
+ NOT ``region_provided``; that's ``account_with_region``.
44
+ - ``host_provided``: the user explicitly set the ``host`` parameter.
45
+ """
46
+
47
+ account_provided: bool = False
48
+ account_with_region: bool = False
49
+ account_org_provided: bool = False
50
+ region_provided: bool = False
51
+ host_provided: bool = False
52
+
53
+
54
+ def _is_user_supplied_string(value: Any) -> bool:
55
+ """A kwarg counts as user-supplied iff it's a non-empty string. Non-string
56
+ truthy values (e.g. an accidentally-passed ``True`` / ``int``) are not
57
+ treated as provided here — the regular ``__config`` validation will warn
58
+ or error on them later, and shape capture is best kept conservative."""
59
+ return isinstance(value, str) and value != ""
60
+
61
+
62
+ def record_input_shape(kwargs: Mapping[str, Any]) -> ConnectionIdentifierShape:
63
+ """Capture the connection-identifier shape from the raw kwargs that
64
+ ``SnowflakeConnection.__config`` receives.
65
+
66
+ Must be invoked before any normalization (the ``setattr`` loop in
67
+ ``__config``, the ``construct_hostname`` call for host inference, or any
68
+ ``parse_account`` stripping) — otherwise inferred values are
69
+ indistinguishable from user-supplied ones and ``host_provided`` /
70
+ ``account_provided`` are no longer trustworthy.
71
+ """
72
+ account = kwargs.get("account")
73
+ region = kwargs.get("region")
74
+ host = kwargs.get("host")
75
+
76
+ account_provided = _is_user_supplied_string(account)
77
+ account_with_region = False
78
+ account_org_provided = False
79
+ if account_provided:
80
+ # Only a dot at position > 0 splits the string into account / region;
81
+ # a leading dot (pathological input like ``.us-east-1``) leaves the
82
+ # whole string as the account portion. Mirrors gosnowflake's
83
+ # ``recordAccountShape`` (internal/config/dsn.go), which gates on
84
+ # ``i > 0`` so the dash search runs against the full raw value when
85
+ # there is no real account/region split.
86
+ dot_index = account.find(".")
87
+ if dot_index > 0:
88
+ account_with_region = True
89
+ account_portion = account[:dot_index]
90
+ else:
91
+ account_portion = account
92
+ # ``Contains(accountPortion, "-")`` in Go — any dash anywhere in the
93
+ # account portion (including position 0) flips the flag. The
94
+ # region-tail dashes are excluded by virtue of being outside
95
+ # ``account_portion``, not by a position check.
96
+ account_org_provided = "-" in account_portion
97
+
98
+ return ConnectionIdentifierShape(
99
+ account_provided=account_provided,
100
+ account_with_region=account_with_region,
101
+ account_org_provided=account_org_provided,
102
+ region_provided=_is_user_supplied_string(region),
103
+ host_provided=_is_user_supplied_string(host),
104
+ )
105
+
106
+
107
+ def build_shape_telemetry_message(shape: ConnectionIdentifierShape) -> dict[str, str]:
108
+ """Build the wire-format payload for the ``client_connection_identifier_shape``
109
+ in-band telemetry event from a captured ``ConnectionIdentifierShape``.
110
+
111
+ Hoisted out of the sync / async ``_log_connection_identifier_shape``
112
+ emitters so both branches stay in lockstep — the five payload keys
113
+ (``account_provided``, ``account_with_region``, ``account_org_provided``,
114
+ ``region_provided``, ``host_provided``) and their stringified-lowercase
115
+ boolean values are byte-identical across sibling drivers and must remain
116
+ so. Changing this builder is the only place that affects the wire format.
117
+
118
+ Booleans are stringified as lowercase ``"true"`` / ``"false"`` (matching
119
+ JSON-style boolean text) for cross-driver parity with gosnowflake's
120
+ ``strconv.FormatBool`` and the JDBC / Node.js siblings.
121
+
122
+ TODO(SNOW-3548350): remove with the telemetry emission
123
+ (target: 2026-11-30).
124
+ """
125
+ return {
126
+ TelemetryField.KEY_TYPE.value: TelemetryField.CONNECTION_IDENTIFIER_SHAPE.value,
127
+ TelemetryField.KEY_ACCOUNT_PROVIDED.value: str(shape.account_provided).lower(),
128
+ TelemetryField.KEY_ACCOUNT_WITH_REGION.value: str(
129
+ shape.account_with_region
130
+ ).lower(),
131
+ TelemetryField.KEY_ACCOUNT_ORG_PROVIDED.value: str(
132
+ shape.account_org_provided
133
+ ).lower(),
134
+ TelemetryField.KEY_REGION_PROVIDED.value: str(shape.region_provided).lower(),
135
+ TelemetryField.KEY_HOST_PROVIDED.value: str(shape.host_provided).lower(),
136
+ }
@@ -24,9 +24,14 @@ from snowflake.connector import (
24
24
  ProgrammingError,
25
25
  )
26
26
 
27
+ from .._connection_identifier_shape import (
28
+ ConnectionIdentifierShape,
29
+ build_shape_telemetry_message,
30
+ )
27
31
  from .._query_context_cache import QueryContextCache
28
32
  from ..compat import IS_LINUX, quote, urlencode
29
33
  from ..config_manager import CONFIG_MANAGER, _get_default_connection_params
34
+ from ..connection import _DISABLE_CONNECTION_SHAPE_ENV
30
35
  from ..connection import DEFAULT_CONFIGURATION as DEFAULT_CONFIGURATION_SYNC
31
36
  from ..connection import SnowflakeConnection as SnowflakeConnectionSync
32
37
  from ..connection import _get_private_bytes_from_file
@@ -783,6 +788,42 @@ class SnowflakeConnection(SnowflakeConnectionSync):
783
788
  )
784
789
  )
785
790
 
791
+ async def _log_connection_identifier_shape(self) -> None:
792
+ """Async counterpart to ``SnowflakeConnectionSync._log_connection_identifier_shape``.
793
+
794
+ The sync implementation reaches for ``self._log_telemetry`` directly,
795
+ which is overridden as an awaitable on the async class — so the sync
796
+ method's call to ``self._log_telemetry(...)`` would return an
797
+ unawaited coroutine here. This override mirrors the sync logic and
798
+ awaits the emission instead.
799
+
800
+ TODO(SNOW-3548350): remove with the telemetry emission
801
+ (target: 2026-11-30).
802
+ """
803
+ # See sync sibling for the strict (no ``strip``) semantics.
804
+ if os.environ.get(_DISABLE_CONNECTION_SHAPE_ENV, "").lower() == "true":
805
+ logger.debug(
806
+ "connection-identifier-shape telemetry disabled via %s",
807
+ _DISABLE_CONNECTION_SHAPE_ENV,
808
+ )
809
+ return
810
+ shape: ConnectionIdentifierShape | None = getattr(
811
+ self, "_connection_identifier_shape", None
812
+ )
813
+ if shape is None:
814
+ logger.debug(
815
+ "connection-identifier-shape telemetry skipped: shape not captured"
816
+ )
817
+ return
818
+ ts = get_time_millis()
819
+ await self._log_telemetry(
820
+ TelemetryData.from_telemetry_data_dict(
821
+ from_dict=build_shape_telemetry_message(shape),
822
+ timestamp=ts,
823
+ connection=self,
824
+ )
825
+ )
826
+
786
827
  async def _next_sequence_counter(self) -> int:
787
828
  """Gets next sequence counter. Used internally."""
788
829
  async with self._lock_sequence_counter:
@@ -1043,9 +1084,14 @@ class SnowflakeConnection(SnowflakeConnectionSync):
1043
1084
  ret["data"] = {}
1044
1085
  if _update_current_object:
1045
1086
  data = ret["data"]
1046
- 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
+ ):
1047
1091
  self._database = data["finalDatabaseName"]
1048
- 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
+ ):
1049
1095
  self._schema = data["finalSchemaName"]
1050
1096
  if "finalWarehouseName" in data and data["finalWarehouseName"] is not None:
1051
1097
  self._warehouse = data["finalWarehouseName"]
@@ -1099,6 +1145,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
1099
1145
  await self.__open_connection()
1100
1146
  self._telemetry = TelemetryClient(self._rest)
1101
1147
  await self._log_telemetry_imported_packages()
1148
+ await self._log_connection_identifier_shape()
1102
1149
 
1103
1150
  def cursor(self, cursor_class: type[CursorCls] = SnowflakeCursor) -> CursorCls:
1104
1151
  logger.debug("cursor")
@@ -55,15 +55,6 @@ class SnowflakeSSLConnector(aiohttp.TCPConnector):
55
55
  )
56
56
  session_manager = SessionManagerFactory.get_manager()
57
57
  self._session_manager = session_manager
58
- if self._snowflake_ocsp_mode == OCSPMode.FAIL_OPEN and sys.version_info < (
59
- 3,
60
- 10,
61
- ):
62
- raise RuntimeError(
63
- "Async Snowflake Python Connector requires Python 3.10+ for OCSP validation related features. "
64
- "Please open a feature request issue in github if your want to use Python 3.9 or lower: "
65
- "https://github.com/snowflakedb/snowflake-connector-python/issues/new/choose."
66
- )
67
58
 
68
59
  super().__init__(*args, **kwargs)
69
60