snowflake-connector-python 4.7.4__tar.gz → 4.8.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.7.4 → snowflake_connector_python-4.8.0}/DESCRIPTION.md +11 -0
  2. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/PKG-INFO +13 -2
  3. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/setup.cfg +1 -1
  4. snowflake_connector_python-4.8.0/src/snowflake/connector/_ocsp_mode.py +68 -0
  5. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/README.md +1 -1
  6. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_azure_storage_client.py +4 -19
  7. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_connection.py +23 -0
  8. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_network.py +2 -1
  9. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_result_batch.py +5 -5
  10. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_session_manager.py +2 -2
  11. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_storage_client.py +1 -0
  12. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_webbrowser.py +35 -34
  13. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/webbrowser.py +141 -71
  14. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/workload_identity.py +3 -0
  15. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/azure_storage_client.py +17 -19
  16. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/connection.py +169 -22
  17. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/connection_diagnostic.py +5 -0
  18. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/constants.py +123 -2
  19. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/cursor.py +87 -1
  20. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/errors.py +19 -0
  21. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_transfer_agent.py +1 -0
  22. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_util.py +29 -0
  23. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/network.py +10 -3
  24. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/result_batch.py +138 -13
  25. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/session_manager.py +61 -0
  26. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ssl_wrap_socket.py +201 -3
  27. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/storage_client.py +27 -1
  28. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/version.py +1 -1
  29. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/wif_util.py +197 -39
  30. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/PKG-INFO +13 -2
  31. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +1 -0
  32. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
  33. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/CONTRIBUTING.md +0 -0
  34. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/LICENSE.txt +0 -0
  35. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/MANIFEST.in +0 -0
  36. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/NOTICE +0 -0
  37. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/README.md +0 -0
  38. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/SECURITY.md +0 -0
  39. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/pyproject.toml +0 -0
  40. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/setup.py +0 -0
  41. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/__init__.py +0 -0
  42. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_connection_identifier_shape.py +0 -0
  43. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_host_util.py +0 -0
  44. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  45. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_sql_util.py +0 -0
  46. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_utils.py +0 -0
  47. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/__init__.py +0 -0
  48. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
  49. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_cursor.py +0 -0
  50. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_description.py +0 -0
  51. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
  52. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
  53. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
  54. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
  55. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
  56. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
  57. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_result_set.py +0 -0
  58. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
  59. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
  60. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_time_util.py +0 -0
  61. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_wif_util.py +0 -0
  62. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
  63. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_auth.py +0 -0
  64. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
  65. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
  66. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
  67. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
  68. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
  69. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
  70. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
  71. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
  72. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
  73. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
  74. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
  75. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
  76. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/arrow_context.py +0 -0
  77. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/__init__.py +0 -0
  78. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/_auth.py +0 -0
  79. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  80. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
  81. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  82. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/default.py +0 -0
  83. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  84. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/keypair.py +0 -0
  85. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  86. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/oauth.py +0 -0
  87. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/oauth_code.py +0 -0
  88. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  89. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/okta.py +0 -0
  90. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/pat.py +0 -0
  91. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  92. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/backoff_policies.py +0 -0
  93. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  94. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/cache.py +0 -0
  95. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/compat.py +0 -0
  96. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/config_manager.py +0 -0
  97. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter.py +0 -0
  98. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  99. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter_null.py +0 -0
  100. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  101. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/crl.py +0 -0
  102. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/crl_cache.py +0 -0
  103. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/dbapi.py +0 -0
  104. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/description.py +0 -0
  105. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  106. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/encryption_util.py +0 -0
  107. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/errorcode.py +0 -0
  108. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  109. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  110. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/feature.py +0 -0
  111. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_compression_type.py +0 -0
  112. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_lock.py +0 -0
  113. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  114. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  115. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/interval_util.py +0 -0
  116. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/local_storage_client.py +0 -0
  117. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/log_configuration.py +0 -0
  118. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  119. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  120. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/minicore/__init__.py +0 -0
  121. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  122. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  123. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  124. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  125. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  126. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  127. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  128. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  129. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  130. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  131. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  132. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  133. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  134. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  135. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  136. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  137. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  138. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  139. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  140. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  141. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  142. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  143. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  144. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  145. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  146. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  147. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  148. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  149. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  150. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  151. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  152. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  153. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  154. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  155. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  156. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  157. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  158. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  159. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  160. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  161. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  162. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  163. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  164. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  165. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  166. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  167. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  168. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  169. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  170. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  171. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  172. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  173. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  174. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  175. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  176. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  177. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  178. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  179. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  180. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  181. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  182. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  183. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  184. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  185. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  186. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  187. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  188. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  189. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  190. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  191. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  192. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  193. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  194. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  195. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  196. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  197. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  198. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  199. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  200. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  201. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  202. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  203. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  204. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  205. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  206. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  207. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  208. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  209. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  210. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  211. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  212. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  213. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  214. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  215. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/options.py +0 -0
  216. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/os_details.py +0 -0
  217. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/pandas_tools.py +0 -0
  218. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/platform_detection.py +0 -0
  219. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/proxy.py +0 -0
  220. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/py.typed +0 -0
  221. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/result_set.py +0 -0
  222. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  223. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/secret_detector.py +0 -0
  224. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sf_dirs.py +0 -0
  225. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  226. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sfdatetime.py +0 -0
  227. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/snow_logging.py +0 -0
  228. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sqlstate.py +0 -0
  229. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  230. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/telemetry.py +0 -0
  231. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  232. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/test_util.py +0 -0
  233. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/time_util.py +0 -0
  234. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/token_cache.py +0 -0
  235. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/__init__.py +0 -0
  236. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  237. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  238. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  239. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  240. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/url_util.py +0 -0
  241. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/util_text.py +0 -0
  242. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  243. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  244. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  245. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  246. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  247. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  248. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  249. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  250. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  251. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  252. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  253. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  254. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  255. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  256. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  257. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
  258. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  259. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  260. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  261. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  262. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  263. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  264. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
  265. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  266. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
  267. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  268. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  269. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  270. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  271. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
  272. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
  273. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
  274. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
  275. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
  276. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
  277. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  278. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  279. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  280. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  281. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  282. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
  283. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
  284. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
  285. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  286. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
  287. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  288. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  289. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  290. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  291. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  292. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  293. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  294. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  295. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  296. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  297. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  298. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  299. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
  300. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  301. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  302. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  303. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  304. {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,6 +7,17 @@ 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.8.0(Sep 30,2026)
11
+ - Fixed external-browser (SSO) authentication to validate the `Origin` header on the local callback server, rejecting tokens delivered from unexpected origins. A trailing slash in the origin (e.g. `https://account.snowflakecomputing.com/`) is now accepted on par with the bare origin, matching JDBC and other driver behaviour. Preconnect probe connections (empty recv) no longer count against the retry budget and no longer abort the login flow.
12
+ - Added the `SNOWFLAKE_TLS_CIPHERS` environment variable to restrict which TLS ciphers the connector offers. It takes a colon-separated list; names beginning with `TLS_` are applied as TLS 1.3 cipher suites and the remainder as the cipher list for TLS 1.2 and below, so a single variable covers both. Leaving it unset keeps OpenSSL's defaults unchanged, and an unrecognized cipher name is rejected rather than silently ignored. The restriction covers Snowflake API traffic, cloud-storage (stage) transfers, OCSP/CRL fetches and IdP requests. Requests issued by the AWS and Azure SDKs, and asynchronous connections, are not covered — for TLS 1.3 suites specifically they cannot be, because the Python standard library exposes no API for restricting them.
13
+ - Raised the minimum `pyOpenSSL` requirement to 25.3.0, the first version providing `set_tls13_ciphersuites`. This does not narrow the set of installable versions in practice: earlier releases cap `cryptography` below 46 and so were already uninstallable alongside the connector's own `cryptography>=46.0.5` requirement.
14
+ - Added the `workload_identity_host` connection option that overrides the STS host used by AWS Workload Identity Federation, for endpoints the driver cannot derive from the region (such as an interface VPC endpoint). The default STS host is now resolved via botocore so partitions that do not use `amazonaws.com` (ISO, European Sovereign Cloud, ...) get the correct hostname. A privately routed host cannot be reached by Snowflake on the default GetCallerIdentity path, so a VPC or PrivateLink STS endpoint also requires `workload_identity_aws_use_outbound_token=True` (SNOW-4017192).
15
+ - Fixed MD5 computation for Azure clouds (SNOW-4168830).
16
+ - OCSP certificate revocation checks are now off unless you opt in. Set `ocsp_fail_open=True` or `ocsp_fail_open=False` to enable OCSP. The stored default is `None` (unset); only an explicit `True`/`False` opts in, so forwarding `DEFAULT_CONFIGURATION` as kwargs does not turn OCSP on. `disable_ocsp_checks=True` (or `insecure_mode=True`) always turns OCSP off, including when `ocsp_fail_open` is also set. `disable_ocsp_checks=False` and `insecure_mode=False` are the stored defaults and are not an opt-in. Connection attribute `ocsp_fail_open` is no longer a report of whether OCSP *is* fail-open; it is the stored preference (`None` = unset, `True` = fail-open, `False` = fail-closed). Use `_ocsp_mode()` / `disable_ocsp_checks` to see whether checks are actually on. `ocsp_response_cache_filename` and `ocsp_root_certs_dict_lock_timeout` do not turn OCSP on; if they are set without an OCSP mode parameter they are ignored and a warning is logged. The `SF_OCSP_FAIL_OPEN` environment variable still only switches fail-open vs fail-closed after OCSP is already on. Login `OCSP_MODE` telemetry now reports `DISABLE_OCSP_CHECKS` by default. The process-global `FEATURE_OCSP_MODE` is updated by each constructed REST client, except that a later default (OCSP off) client does not overwrite a non-default already stored on the process, and a later `FAIL_OPEN` client does not overwrite `FAIL_CLOSED`.
17
+
18
+ - v4.7.5(Sep 18,2026)
19
+ - Follow-up to the v4.7.4 incomplete-result fix (SNOW-4109042): when a successful query-request has an incomplete inline first chunk, the connector re-fetches the finished query once via `GET /queries/{qid}/result` before building the result set. JSON treats empty or shorter-than-declared inline rowsets as incomplete; Arrow only treats a missing/empty `rowsetBase64` as incomplete so the execute hot path does not decode IPC. If the result GET fails (transport error or `success: false`), the original payload is kept; if the GET succeeds but is still incomplete, that response is used. In either incomplete case the existing rowcount/total checks still raise `OperationalError` errno `252013` when the result is drained (no silent EOF). On the sync path, a remote result chunk whose body holds fewer rows than its declared `rowCount` is re-downloaded once before that check raises, so a truncated-but-valid chunk download can recover without silent data loss. Asynchronous (`snowflake.connector.aio`) remote-chunk re-download is unchanged.
20
+
10
21
  - v4.7.4(Sep 16,2026)
11
22
  - Fixed missing retries on transient HTTP failures when fetching an OAuth access token from the IdP token endpoint (`OAUTH_CLIENT_CREDENTIALS` and `OAUTH_AUTHORIZATION_CODE`). Token requests now retry transport errors, HTTP 408/429, and 5xx responses (SNOW-3984430, #3003).
12
23
  - Fixed a bug where a TLS handshake terminated by the peer (`SSLError` containing `SysCallError(-1, 'Unexpected EOF')`) was classified as non-retryable and surfaced as an `OperationalError`, unlike `ECONNRESET`. Such handshake `Unexpected EOF` errors are now retried, on both the sync and async request paths (SNOW-4058589).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.7.4
3
+ Version: 4.8.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -41,7 +41,7 @@ License-File: LICENSE.txt
41
41
  License-File: NOTICE
42
42
  Requires-Dist: asn1crypto<2.0.0,>0.24.0
43
43
  Requires-Dist: cryptography>=46.0.5
44
- Requires-Dist: pyOpenSSL>=24.0.0
44
+ Requires-Dist: pyOpenSSL>=25.3.0
45
45
  Requires-Dist: pyjwt<3.0.0,>=2.10.1
46
46
  Requires-Dist: pytz
47
47
  Requires-Dist: requests<3.0.0,>=2.32.4
@@ -97,6 +97,17 @@ https://docs.snowflake.com/
97
97
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
98
98
 
99
99
  # Release Notes
100
+ - v4.8.0(Sep 30,2026)
101
+ - Fixed external-browser (SSO) authentication to validate the `Origin` header on the local callback server, rejecting tokens delivered from unexpected origins. A trailing slash in the origin (e.g. `https://account.snowflakecomputing.com/`) is now accepted on par with the bare origin, matching JDBC and other driver behaviour. Preconnect probe connections (empty recv) no longer count against the retry budget and no longer abort the login flow.
102
+ - Added the `SNOWFLAKE_TLS_CIPHERS` environment variable to restrict which TLS ciphers the connector offers. It takes a colon-separated list; names beginning with `TLS_` are applied as TLS 1.3 cipher suites and the remainder as the cipher list for TLS 1.2 and below, so a single variable covers both. Leaving it unset keeps OpenSSL's defaults unchanged, and an unrecognized cipher name is rejected rather than silently ignored. The restriction covers Snowflake API traffic, cloud-storage (stage) transfers, OCSP/CRL fetches and IdP requests. Requests issued by the AWS and Azure SDKs, and asynchronous connections, are not covered — for TLS 1.3 suites specifically they cannot be, because the Python standard library exposes no API for restricting them.
103
+ - Raised the minimum `pyOpenSSL` requirement to 25.3.0, the first version providing `set_tls13_ciphersuites`. This does not narrow the set of installable versions in practice: earlier releases cap `cryptography` below 46 and so were already uninstallable alongside the connector's own `cryptography>=46.0.5` requirement.
104
+ - Added the `workload_identity_host` connection option that overrides the STS host used by AWS Workload Identity Federation, for endpoints the driver cannot derive from the region (such as an interface VPC endpoint). The default STS host is now resolved via botocore so partitions that do not use `amazonaws.com` (ISO, European Sovereign Cloud, ...) get the correct hostname. A privately routed host cannot be reached by Snowflake on the default GetCallerIdentity path, so a VPC or PrivateLink STS endpoint also requires `workload_identity_aws_use_outbound_token=True` (SNOW-4017192).
105
+ - Fixed MD5 computation for Azure clouds (SNOW-4168830).
106
+ - OCSP certificate revocation checks are now off unless you opt in. Set `ocsp_fail_open=True` or `ocsp_fail_open=False` to enable OCSP. The stored default is `None` (unset); only an explicit `True`/`False` opts in, so forwarding `DEFAULT_CONFIGURATION` as kwargs does not turn OCSP on. `disable_ocsp_checks=True` (or `insecure_mode=True`) always turns OCSP off, including when `ocsp_fail_open` is also set. `disable_ocsp_checks=False` and `insecure_mode=False` are the stored defaults and are not an opt-in. Connection attribute `ocsp_fail_open` is no longer a report of whether OCSP *is* fail-open; it is the stored preference (`None` = unset, `True` = fail-open, `False` = fail-closed). Use `_ocsp_mode()` / `disable_ocsp_checks` to see whether checks are actually on. `ocsp_response_cache_filename` and `ocsp_root_certs_dict_lock_timeout` do not turn OCSP on; if they are set without an OCSP mode parameter they are ignored and a warning is logged. The `SF_OCSP_FAIL_OPEN` environment variable still only switches fail-open vs fail-closed after OCSP is already on. Login `OCSP_MODE` telemetry now reports `DISABLE_OCSP_CHECKS` by default. The process-global `FEATURE_OCSP_MODE` is updated by each constructed REST client, except that a later default (OCSP off) client does not overwrite a non-default already stored on the process, and a later `FAIL_OPEN` client does not overwrite `FAIL_CLOSED`.
107
+
108
+ - v4.7.5(Sep 18,2026)
109
+ - Follow-up to the v4.7.4 incomplete-result fix (SNOW-4109042): when a successful query-request has an incomplete inline first chunk, the connector re-fetches the finished query once via `GET /queries/{qid}/result` before building the result set. JSON treats empty or shorter-than-declared inline rowsets as incomplete; Arrow only treats a missing/empty `rowsetBase64` as incomplete so the execute hot path does not decode IPC. If the result GET fails (transport error or `success: false`), the original payload is kept; if the GET succeeds but is still incomplete, that response is used. In either incomplete case the existing rowcount/total checks still raise `OperationalError` errno `252013` when the result is drained (no silent EOF). On the sync path, a remote result chunk whose body holds fewer rows than its declared `rowCount` is re-downloaded once before that check raises, so a truncated-but-valid chunk download can recover without silent data loss. Asynchronous (`snowflake.connector.aio`) remote-chunk re-download is unchanged.
110
+
100
111
  - v4.7.4(Sep 16,2026)
101
112
  - Fixed missing retries on transient HTTP failures when fetching an OAuth access token from the IdP token endpoint (`OAUTH_CLIENT_CREDENTIALS` and `OAUTH_AUTHORIZATION_CODE`). Token requests now retry transport errors, HTTP 408/429, and 5xx responses (SNOW-3984430, #3003).
102
113
  - Fixed a bug where a TLS handshake terminated by the peer (`SSLError` containing `SysCallError(-1, 'Unexpected EOF')`) was classified as non-retryable and surfaced as an `OperationalError`, unlike `ECONNRESET`. Such handshake `Unexpected EOF` errors are now retried, on both the sync and async request paths (SNOW-4058589).
@@ -46,7 +46,7 @@ packages = find_namespace:
46
46
  install_requires =
47
47
  asn1crypto>0.24.0,<2.0.0
48
48
  cryptography>=46.0.5
49
- pyOpenSSL>=24.0.0
49
+ pyOpenSSL>=25.3.0
50
50
  pyjwt>=2.10.1,<3.0.0
51
51
  pytz
52
52
  requests>=2.32.4,<3.0.0
@@ -0,0 +1,68 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, Collection
5
+
6
+ from .constants import OCSPMode
7
+
8
+ # ocsp_fail_open True/False opts into OCSP. None is the stored default and
9
+ # is not an opt-in. disable_ocsp_checks / insecure_mode only turn OCSP off
10
+ # when True; their stored False default is not an opt-in. Cache/timeout
11
+ # knobs never enable OCSP.
12
+ OCSP_MODE_PARAMS = frozenset({"disable_ocsp_checks", "ocsp_fail_open", "insecure_mode"})
13
+ OCSP_SUPPORT_PARAMS = frozenset(
14
+ {"ocsp_response_cache_filename", "ocsp_root_certs_dict_lock_timeout"}
15
+ )
16
+ OCSP_EXPLICIT_PARAMS = OCSP_MODE_PARAMS | OCSP_SUPPORT_PARAMS
17
+
18
+ IGNORED_OCSP_SUPPORT_PARAMS_WARNING = (
19
+ "OCSP is disabled unless you opt in. The following OCSP setting(s) will be "
20
+ "ignored because none of ocsp_fail_open, disable_ocsp_checks, or "
21
+ "insecure_mode was set: {params}. Set ocsp_fail_open=True or "
22
+ "ocsp_fail_open=False to enable OCSP."
23
+ )
24
+
25
+
26
+ def snapshot_ocsp_explicit_params(params: Mapping[str, Any]) -> frozenset[str]:
27
+ return frozenset(name for name in OCSP_EXPLICIT_PARAMS if name in params)
28
+
29
+
30
+ def resolve_ocsp_mode(
31
+ *,
32
+ explicit: Collection[str],
33
+ disable_ocsp_checks: bool,
34
+ ocsp_fail_open: bool | None,
35
+ insecure_mode: bool | None = None,
36
+ ) -> OCSPMode:
37
+ """Resolve OCSP mode from explicit user/toml presence plus stored values.
38
+
39
+ ``ocsp_fail_open`` is the only opt-in: True = fail-open, False =
40
+ fail-closed. None is the stored default and does not enable OCSP, even
41
+ when the key is present (a caller forwarding DEFAULT_CONFIGURATION).
42
+
43
+ Connection-property disable (``disable_ocsp_checks=True`` or
44
+ ``insecure_mode=True``) always turns OCSP off, including when
45
+ ``ocsp_fail_open`` is True/False. Presence of
46
+ ``disable_ocsp_checks=False`` or ``insecure_mode=False`` is not an
47
+ opt-in; those are the stored defaults.
48
+ """
49
+ if "disable_ocsp_checks" in explicit:
50
+ disable_value = disable_ocsp_checks
51
+ elif "insecure_mode" in explicit:
52
+ disable_value = (
53
+ insecure_mode if insecure_mode is not None else disable_ocsp_checks
54
+ )
55
+ else:
56
+ disable_value = False
57
+
58
+ if disable_value:
59
+ return OCSPMode.DISABLE_OCSP_CHECKS
60
+ if ocsp_fail_open is not None:
61
+ return OCSPMode.FAIL_OPEN if ocsp_fail_open else OCSPMode.FAIL_CLOSED
62
+ return OCSPMode.DISABLE_OCSP_CHECKS
63
+
64
+
65
+ def ignored_ocsp_support_params(explicit: Collection[str]) -> tuple[str, ...]:
66
+ if any(name in explicit for name in OCSP_MODE_PARAMS):
67
+ return ()
68
+ return tuple(sorted(name for name in OCSP_SUPPORT_PARAMS if name in explicit))
@@ -14,7 +14,7 @@ is not intended for production environments.**
14
14
  - ❌ `mfa_callback` / `password_callback` - not supported
15
15
  - ❌ `_probe_connection=True` - no connection diagnostic
16
16
  - ❌ Raw binary response handling - not supported
17
- - ❌ CRL (Certificate Revocation List) - not supported (only OCSP is supported)
17
+ - ❌ CRL (Certificate Revocation List) - not supported (only OCSP is supported). OCSP is off by default; set `ocsp_fail_open=True`/`False` to enable it.
18
18
 
19
19
  ## Installation & Import
20
20
 
@@ -17,7 +17,6 @@ from ..azure_storage_client import (
17
17
  from ..compat import quote
18
18
  from ..constants import FileHeader, ResultStatus
19
19
  from ..encryption_util import EncryptionMetadata
20
- from ..util_text import get_md5_for_integrity
21
20
  from ._storage_client import SnowflakeStorageClient as SnowflakeStorageClientAsync
22
21
 
23
22
  if TYPE_CHECKING: # pragma: no cover
@@ -173,26 +172,12 @@ class SnowflakeAzureRestClient(
173
172
  part = ET.Element("Latest")
174
173
  part.text = block_id
175
174
  root.append(part)
176
- # SNOW-1778088: We need to calculate the MD5 sum of this file for Azure Blob storage
177
- new_stream = not bool(self.meta.src_stream or self.meta.intermediate_stream)
178
- fd = (
179
- self.meta.src_stream
180
- or self.meta.intermediate_stream
181
- or open(self.meta.real_src_file_name, "rb")
182
- )
183
- try:
184
- if not new_stream:
185
- # Reset position in file
186
- fd.seek(0)
187
- file_content = fd.read()
188
- finally:
189
- if new_stream:
190
- fd.close()
175
+ # SNOW-1778088: We need to provide the MD5 sum of this file for Azure Blob storage.
191
176
  headers = {
192
177
  "x-ms-blob-content-encoding": "utf-8",
193
- "x-ms-blob-content-md5": base64.b64encode(
194
- get_md5_for_integrity(file_content)
195
- ).decode("utf-8"),
178
+ "x-ms-blob-content-md5": base64.b64encode(self.meta.md5_digest).decode(
179
+ "utf-8"
180
+ ),
196
181
  }
197
182
  azure_metadata = self._prepare_file_metadata()
198
183
  headers.update(azure_metadata)
@@ -23,6 +23,7 @@ from snowflake.connector import (
23
23
  OperationalError,
24
24
  ProgrammingError,
25
25
  )
26
+ from snowflake.connector.errors import NonRetryableTlsError
26
27
 
27
28
  from .._connection_identifier_shape import (
28
29
  ConnectionIdentifierShape,
@@ -38,6 +39,7 @@ from ..connection import _get_private_bytes_from_file
38
39
  from ..constants import (
39
40
  _CONNECTIVITY_ERR_MSG,
40
41
  _OAUTH_DEFAULT_SCOPE,
42
+ ENV_VAR_MIN_TLS_VERSION,
41
43
  PARAMETER_AUTOCOMMIT,
42
44
  PARAMETER_CLIENT_PREFETCH_THREADS,
43
45
  PARAMETER_CLIENT_REQUEST_MFA_TOKEN,
@@ -570,6 +572,11 @@ class SnowflakeConnection(SnowflakeConnectionSync):
570
572
  password_callback=self._password_callback,
571
573
  session_parameters=self._session_parameters,
572
574
  )
575
+ except NonRetryableTlsError:
576
+ # See the sync counterpart: a TLS failure that a retry cannot fix must
577
+ # surface with its diagnosis rather than be replaced by the generic
578
+ # "could not connect" message the retry loop below ends with.
579
+ raise
573
580
  except OperationalError as e:
574
581
  logger.debug(
575
582
  "Operational Error raised at authentication"
@@ -652,6 +659,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
652
659
  self._rest = None
653
660
  for name, (value, _) in DEFAULT_CONFIGURATION.items():
654
661
  setattr(self, f"_{name}", value)
662
+ self._ocsp_explicit: frozenset[str] = frozenset()
655
663
 
656
664
  self._heartbeat_task = None
657
665
  is_kwargs_empty = not connection_init_kwargs
@@ -668,6 +676,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
668
676
  DeprecationWarning,
669
677
  stacklevel=2,
670
678
  )
679
+ self._insecure_mode = connection_init_kwargs["insecure_mode"]
671
680
 
672
681
  if (
673
682
  "disable_ocsp_checks" in connection_init_kwargs
@@ -1110,6 +1119,20 @@ class SnowflakeConnection(SnowflakeConnectionSync):
1110
1119
  async def connect(self, **kwargs) -> None:
1111
1120
  """Establishes connection to Snowflake."""
1112
1121
  logger.debug("connect")
1122
+ self._validate_min_tls_version()
1123
+ # Validating the value here must not be read as enforcing it: the async
1124
+ # stack builds its TLS contexts through aiohttp, which the connector's
1125
+ # urllib3 interception never sees, so the floor is not applied to async
1126
+ # handshakes. Say so rather than let a successful connect imply otherwise.
1127
+ # Not raised, because the variable is process-wide -- failing here would
1128
+ # break async connections in any process that set it for the sync path.
1129
+ if os.environ.get(ENV_VAR_MIN_TLS_VERSION, "").strip():
1130
+ logger.warning(
1131
+ "%s is set but is not enforced on asynchronous connections; their "
1132
+ "TLS handshakes may negotiate a lower version. Use a synchronous "
1133
+ "connection where the minimum must be guaranteed.",
1134
+ ENV_VAR_MIN_TLS_VERSION,
1135
+ )
1113
1136
  if len(kwargs) > 0:
1114
1137
  self.__config(**kwargs)
1115
1138
  else:
@@ -42,6 +42,7 @@ from ..errors import (
42
42
  Error,
43
43
  ForbiddenError,
44
44
  HttpError,
45
+ NonRetryableTlsError,
45
46
  OperationalError,
46
47
  ProgrammingError,
47
48
  RefreshTokenError,
@@ -826,7 +827,7 @@ class SnowflakeRestful(SnowflakeRestfulSync):
826
827
  Error.errorhandler_wrapper(
827
828
  self._connection,
828
829
  None,
829
- OperationalError,
830
+ NonRetryableTlsError,
830
831
  {
831
832
  "msg": msg,
832
833
  "errno": ER_FAILED_TO_REQUEST,
@@ -32,7 +32,10 @@ from snowflake.connector.result_batch import DownloadMetrics
32
32
  from snowflake.connector.result_batch import JSONResultBatch as JSONResultBatchSync
33
33
  from snowflake.connector.result_batch import RemoteChunkInfo
34
34
  from snowflake.connector.result_batch import ResultBatch as ResultBatchSync
35
- from snowflake.connector.result_batch import _create_nanoarrow_iterator
35
+ from snowflake.connector.result_batch import (
36
+ _create_nanoarrow_iterator,
37
+ inline_first_chunk_rowcount,
38
+ )
36
39
  from snowflake.connector.secret_detector import SecretDetector
37
40
 
38
41
  if TYPE_CHECKING:
@@ -60,8 +63,7 @@ def create_batches_from_response(
60
63
  column_converters: list[tuple[str, SnowflakeConverterType]] = []
61
64
  arrow_context: ArrowConverterContext | None = None
62
65
  rowtypes = data["rowtype"]
63
- total_len: int = data.get("total", 0)
64
- first_chunk_len = total_len
66
+ first_chunk_len = inline_first_chunk_rowcount(data)
65
67
  rest_of_chunks: list[ResultBatch] = []
66
68
  if _format == "json":
67
69
 
@@ -138,8 +140,6 @@ def create_batches_from_response(
138
140
  )
139
141
  for c in chunks
140
142
  ]
141
- for c in rest_of_chunks:
142
- first_chunk_len -= c.rowcount
143
143
  if _format == "json":
144
144
  first_chunk = JSONResultBatch.from_data(
145
145
  data.get("rowset"),
@@ -44,7 +44,7 @@ class SnowflakeSSLConnector(aiohttp.TCPConnector):
44
44
  def __init__(
45
45
  self,
46
46
  *args,
47
- snowflake_ocsp_mode: OCSPMode = OCSPMode.FAIL_OPEN,
47
+ snowflake_ocsp_mode: OCSPMode = OCSPMode.DISABLE_OCSP_CHECKS,
48
48
  session_manager: SessionManager | None = None,
49
49
  **kwargs,
50
50
  ):
@@ -139,7 +139,7 @@ class AioHttpConfig(BaseHttpConfig):
139
139
  """Trust environment variables for proxy configuration (HTTP_PROXY, HTTPS_PROXY, NO_PROXY).
140
140
  Required for proxy support set by proxy.set_proxies() in connection initialization."""
141
141
 
142
- snowflake_ocsp_mode: OCSPMode = OCSPMode.FAIL_OPEN
142
+ snowflake_ocsp_mode: OCSPMode = OCSPMode.DISABLE_OCSP_CHECKS
143
143
  """OCSP validation mode obtained from connection._ocsp_mode()."""
144
144
 
145
145
  def get_connector(
@@ -104,6 +104,7 @@ class SnowflakeStorageClient(SnowflakeStorageClientSync):
104
104
  else:
105
105
  self.data_file = meta.real_src_file_name
106
106
  logger.debug("finished preprocessing")
107
+ self._compute_content_md5()
107
108
  if meta.upload_size < meta.multipart_threshold or not self.chunked_transfer:
108
109
  self.num_of_chunks = 1
109
110
  else:
@@ -25,7 +25,6 @@ from ...constants import (
25
25
  HTTP_HEADER_USER_AGENT,
26
26
  )
27
27
  from ...errorcode import (
28
- ER_IDP_CONNECTION_ERROR,
29
28
  ER_INVALID_VALUE,
30
29
  ER_NO_HOSTNAME_FOUND,
31
30
  ER_UNABLE_TO_OPEN_BROWSER,
@@ -111,7 +110,7 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
111
110
  )
112
111
  else:
113
112
  raise ex
114
- socket_connection.listen(0) # no backlog
113
+ socket_connection.listen(5)
115
114
  callback_port = socket_connection.getsockname()[1]
116
115
 
117
116
  if conn._disable_console_login:
@@ -246,34 +245,45 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
246
245
  else:
247
246
  logger.debug("Exceeded retry count")
248
247
 
249
- data = raw_data.decode("utf-8").split("\r\n")
248
+ if not raw_data:
249
+ continue
250
250
 
251
- if not await self._process_options(data, socket_client):
252
- await self._process_receive_saml_token(conn, data, socket_client)
251
+ data = raw_data.decode("utf-8").splitlines()
252
+
253
+ method = self._request_method(data)
254
+ if method == "OPTIONS":
255
+ await self._process_options(data, socket_client)
256
+ continue
257
+ if method not in {"GET", "POST"}:
258
+ continue
259
+ if not self._validate_callback_origin(data):
260
+ continue
261
+ if await self._process_receive_saml_token(conn, data, socket_client):
253
262
  break
254
263
 
255
264
  finally:
256
- socket_client.shutdown(socket.SHUT_RDWR)
257
- socket_client.close()
265
+ self._close_socket_client(socket_client)
258
266
 
259
267
  async def _process_options(
260
268
  self, data: list[str], socket_client: socket.socket
261
269
  ) -> bool:
262
270
  """Allows JS Ajax access to this endpoint."""
263
- for line in data:
264
- if line.startswith("OPTIONS "):
265
- break
266
- else:
271
+ if self._request_method(data) != "OPTIONS":
267
272
  return False
268
273
 
269
274
  self._get_user_agent(data)
270
275
  requested_headers, requested_origin = self._check_post_requested(data)
271
- if not requested_headers:
272
- return False
276
+ if requested_origin is None:
277
+ return True
278
+
279
+ if requested_headers and any(
280
+ header.strip().lower() != "content-type"
281
+ for header in requested_headers.split(",")
282
+ ):
283
+ return True
273
284
 
274
285
  if not self._validate_origin(requested_origin):
275
- # validate Origin and fail if not match with the server.
276
- return False
286
+ return True
277
287
 
278
288
  self._origin = requested_origin
279
289
  content = [
@@ -281,8 +291,8 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
281
291
  "Date: {}".format(
282
292
  time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime())
283
293
  ),
284
- "Access-Control-Allow-Methods: POST, GET",
285
- f"Access-Control-Allow-Headers: {requested_headers}",
294
+ "Access-Control-Allow-Methods: POST",
295
+ "Access-Control-Allow-Headers: Content-Type",
286
296
  "Access-Control-Max-Age: 86400",
287
297
  f"Access-Control-Allow-Origin: {self._origin}",
288
298
  "",
@@ -295,9 +305,9 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
295
305
 
296
306
  async def _process_receive_saml_token(
297
307
  self, conn: SnowflakeConnection, data: list[str], socket_client: socket.socket
298
- ) -> None:
308
+ ) -> bool:
299
309
  if not self._process_get(data) and not await self._process_post(conn, data):
300
- return # error
310
+ return False
301
311
 
302
312
  content = [
303
313
  "HTTP/1.1 200 OK",
@@ -324,32 +334,23 @@ You can close this window now and go back where you started from.
324
334
  await self._event_loop.sock_sendall(
325
335
  socket_client, "\r\n".join(content).encode("utf-8")
326
336
  )
337
+ return True
327
338
 
328
339
  async def _process_post(self, conn: SnowflakeConnection, data: list[str]) -> bool:
329
- for line in data:
330
- if line.startswith("POST "):
331
- break
332
- else:
333
- await self._handle_failure(
334
- conn=conn,
335
- ret={
336
- "code": ER_IDP_CONNECTION_ERROR,
337
- "message": "Invalid HTTP request from web browser. Idp "
338
- "authentication could have failed.",
339
- },
340
- )
340
+ body = self._request_body(data)
341
+ if self._request_method(data) != "POST" or body is None:
341
342
  return False
342
343
 
343
344
  self._get_user_agent(data)
344
345
  try:
345
346
  # parse the response as JSON
346
- payload = json.loads(data[-1])
347
+ payload = json.loads(body)
347
348
  self._token = payload.get("token")
348
349
  self.consent_cache_id_token = payload.get("consent", True)
349
350
  except Exception:
350
351
  # key=value form.
351
- self._token = parse_qs(data[-1])["token"][0]
352
- return True
352
+ self._token = (parse_qs(body).get("token") or [None])[0]
353
+ return self._token is not None
353
354
 
354
355
  async def _get_sso_url(
355
356
  self,