snowflake-connector-python 3.17.2__tar.gz → 3.17.4__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 (281) hide show
  1. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/DESCRIPTION.md +10 -0
  2. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/MANIFEST.in +1 -1
  3. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/PKG-INFO +12 -2
  4. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/setup.cfg +1 -1
  5. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/config_manager.py +12 -2
  6. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/connection_diagnostic.py +4 -0
  7. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/cursor.py +30 -34
  8. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/session_manager.py +22 -12
  9. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/ssl_wrap_socket.py +78 -36
  10. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/__init__.py +23 -8
  11. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/__version__.py +3 -3
  12. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/adapters.py +162 -3
  13. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/api.py +1 -1
  14. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/auth.py +0 -1
  15. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/compat.py +31 -4
  16. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/cookies.py +8 -8
  17. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/exceptions.py +11 -0
  18. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/models.py +12 -6
  19. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/requests/packages.py +23 -0
  20. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/sessions.py +6 -8
  21. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/status_codes.py +5 -5
  22. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/utils.py +15 -22
  23. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +1 -1
  24. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/__init__.py +211 -0
  25. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/_base_connection.py +165 -0
  26. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/_collections.py +479 -0
  27. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/request.py → snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/_request_methods.py +137 -50
  28. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/_version.py +21 -0
  29. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/connection.py +1102 -0
  30. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/connectionpool.py +409 -368
  31. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +16 -0
  32. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +255 -0
  33. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +110 -0
  34. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +728 -0
  35. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +22 -0
  36. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +277 -0
  37. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +228 -173
  38. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +48 -36
  39. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/exceptions.py +110 -98
  40. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/fields.py +341 -0
  41. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/filepost.py +28 -37
  42. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/http2/__init__.py +53 -0
  43. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/http2/connection.py +356 -0
  44. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/http2/probe.py +87 -0
  45. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/poolmanager.py +237 -124
  46. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/py.typed +2 -0
  47. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/response.py +1307 -0
  48. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/__init__.py +6 -13
  49. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/connection.py +34 -53
  50. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/proxy.py +12 -26
  51. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/util/request.py +266 -0
  52. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/util/response.py +101 -0
  53. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/retry.py +138 -225
  54. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/util/ssl_.py +524 -0
  55. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +48 -48
  56. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +106 -56
  57. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/timeout.py +61 -57
  58. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/url.py +214 -180
  59. snowflake_connector_python-3.17.4/src/snowflake/connector/vendored/urllib3/util/util.py +42 -0
  60. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/util/wait.py +31 -59
  61. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/version.py +1 -1
  62. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake_connector_python.egg-info/PKG-INFO +12 -2
  63. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake_connector_python.egg-info/SOURCES.txt +14 -14
  64. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
  65. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/__init__.py +0 -85
  66. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/_collections.py +0 -355
  67. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/_version.py +0 -2
  68. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/connection.py +0 -572
  69. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -36
  70. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  71. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -519
  72. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -397
  73. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -314
  74. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -130
  75. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -920
  76. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/fields.py +0 -274
  77. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  78. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  79. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -51
  80. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -155
  81. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -1076
  82. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/response.py +0 -885
  83. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -22
  84. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/util/request.py +0 -146
  85. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/util/response.py +0 -107
  86. snowflake_connector_python-3.17.2/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -495
  87. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/CONTRIBUTING.md +0 -0
  88. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/LICENSE.txt +0 -0
  89. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/NOTICE +0 -0
  90. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/README.md +0 -0
  91. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/SECURITY.md +0 -0
  92. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/pyproject.toml +0 -0
  93. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/setup.py +0 -0
  94. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/__init__.py +0 -0
  95. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/_query_context_cache.py +0 -0
  96. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/_sql_util.py +0 -0
  97. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/_utils.py +0 -0
  98. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/arrow_context.py +0 -0
  99. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/__init__.py +0 -0
  100. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/_auth.py +0 -0
  101. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/_http_server.py +0 -0
  102. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/_oauth_base.py +0 -0
  103. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/by_plugin.py +0 -0
  104. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/default.py +0 -0
  105. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/idtoken.py +0 -0
  106. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/keypair.py +0 -0
  107. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/no_auth.py +0 -0
  108. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/oauth.py +0 -0
  109. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/oauth_code.py +0 -0
  110. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  111. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/okta.py +0 -0
  112. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/pat.py +0 -0
  113. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  114. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/webbrowser.py +0 -0
  115. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/auth/workload_identity.py +0 -0
  116. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/azure_storage_client.py +0 -0
  117. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/backoff_policies.py +0 -0
  118. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/bind_upload_agent.py +0 -0
  119. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/cache.py +0 -0
  120. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/compat.py +0 -0
  121. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/connection.py +0 -0
  122. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/constants.py +0 -0
  123. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/converter.py +0 -0
  124. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/converter_issue23517.py +0 -0
  125. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/converter_null.py +0 -0
  126. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/converter_snowsql.py +0 -0
  127. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/dbapi.py +0 -0
  128. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/description.py +0 -0
  129. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  130. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/encryption_util.py +0 -0
  131. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/errorcode.py +0 -0
  132. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/errors.py +0 -0
  133. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  134. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  135. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/feature.py +0 -0
  136. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/file_compression_type.py +0 -0
  137. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/file_lock.py +0 -0
  138. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/file_transfer_agent.py +0 -0
  139. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/file_util.py +0 -0
  140. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/gcs_storage_client.py +0 -0
  141. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/gzip_decoder.py +0 -0
  142. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/interval_util.py +0 -0
  143. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/local_storage_client.py +0 -0
  144. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/log_configuration.py +0 -0
  145. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  146. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/logging_utils/filters.py +0 -0
  147. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  148. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  149. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  150. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  151. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  152. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  153. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  154. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  155. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  156. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  157. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  158. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  159. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  160. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  161. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  162. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  163. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  164. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  165. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  166. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  167. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  168. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  169. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  170. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  171. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  172. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  173. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  174. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  175. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  176. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  177. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  178. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  179. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  180. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  181. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  182. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  183. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  184. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  185. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  186. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  187. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  188. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  189. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  190. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  191. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  192. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  193. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  194. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  195. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  196. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  197. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  198. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  199. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  200. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  201. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  202. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  203. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  204. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  205. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  206. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  207. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  208. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  209. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  210. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  211. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  212. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  213. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  214. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  215. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  216. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  217. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  218. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  219. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  220. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  221. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  222. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  223. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  224. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  225. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  226. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  227. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  228. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  229. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  230. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  231. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  232. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  233. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  234. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  235. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  236. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  237. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  238. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/network.py +0 -0
  239. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  240. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  241. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/options.py +0 -0
  242. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/pandas_tools.py +0 -0
  243. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/platform_detection.py +0 -0
  244. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/proxy.py +0 -0
  245. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/py.typed +0 -0
  246. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/result_batch.py +0 -0
  247. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/result_set.py +0 -0
  248. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/s3_storage_client.py +0 -0
  249. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/secret_detector.py +0 -0
  250. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/sf_dirs.py +0 -0
  251. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/sfbinaryformat.py +0 -0
  252. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/sfdatetime.py +0 -0
  253. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/snow_logging.py +0 -0
  254. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/sqlstate.py +0 -0
  255. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  256. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/storage_client.py +0 -0
  257. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/telemetry.py +0 -0
  258. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/telemetry_oob.py +0 -0
  259. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/test_util.py +0 -0
  260. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/time_util.py +0 -0
  261. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/token_cache.py +0 -0
  262. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/tool/__init__.py +0 -0
  263. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/tool/dump_certs.py +0 -0
  264. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  265. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  266. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/tool/probe_connection.py +0 -0
  267. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/url_util.py +0 -0
  268. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/util_text.py +0 -0
  269. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/__init__.py +0 -0
  270. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  271. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  272. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  273. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/help.py +1 -1
  274. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  275. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  276. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  277. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake/connector/wif_util.py +0 -0
  278. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  279. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  280. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  281. {snowflake_connector_python-3.17.2 → snowflake_connector_python-3.17.4}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,6 +7,16 @@ 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
+ - v3.17.4(September 22,2025)
11
+ - Added support for intermediate certificates as roots when they are stored in the trust store
12
+ - Bumped up vendored `urllib3` to `2.5.0` and `requests` to `v2.32.5`
13
+
14
+ - v3.17.3(September 02,2025)
15
+ - Enhanced configuration file permission warning messages.
16
+ - Improved warning messages for readable permission issues to include clear instructions on how to skip warnings using the `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` environment variable.
17
+ - Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
18
+ - This addresses the issue with `create_dataframe` call on Snowpark
19
+
10
20
  - v3.17.2(August 23,2025)
11
21
  - Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
12
22
  - Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
@@ -4,7 +4,7 @@ include LICENSE.txt
4
4
  include NOTICE
5
5
  include pyproject.toml
6
6
  include src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt
7
- recursive-include src/snowflake/connector py.typed *.py *.pyx
7
+ recursive-include src/snowflake/connector py.typed *.py *.pyx *.js
8
8
  recursive-include src/snowflake/connector/vendored LICENSE*
9
9
 
10
10
  recursive-include src/snowflake/connector/nanoarrow_cpp *.cpp *.hpp
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 3.17.2
3
+ Version: 3.17.4
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -66,7 +66,7 @@ Requires-Dist: pendulum!=2.1.1; extra == "development"
66
66
  Requires-Dist: pexpect; extra == "development"
67
67
  Requires-Dist: pytest<7.5.0; extra == "development"
68
68
  Requires-Dist: pytest-cov; extra == "development"
69
- Requires-Dist: pytest-rerunfailures; extra == "development"
69
+ Requires-Dist: pytest-rerunfailures<16.0; extra == "development"
70
70
  Requires-Dist: pytest-timeout; extra == "development"
71
71
  Requires-Dist: pytest-xdist; extra == "development"
72
72
  Requires-Dist: pytzdata; extra == "development"
@@ -86,6 +86,16 @@ https://docs.snowflake.com/
86
86
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
87
87
 
88
88
  # Release Notes
89
+ - v3.17.4(September 22,2025)
90
+ - Added support for intermediate certificates as roots when they are stored in the trust store
91
+ - Bumped up vendored `urllib3` to `2.5.0` and `requests` to `v2.32.5`
92
+
93
+ - v3.17.3(September 02,2025)
94
+ - Enhanced configuration file permission warning messages.
95
+ - Improved warning messages for readable permission issues to include clear instructions on how to skip warnings using the `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` environment variable.
96
+ - Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
97
+ - This addresses the issue with `create_dataframe` call on Snowpark
98
+
89
99
  - v3.17.2(August 23,2025)
90
100
  - Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
91
101
  - Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
@@ -88,7 +88,7 @@ development =
88
88
  pexpect
89
89
  pytest<7.5.0
90
90
  pytest-cov
91
- pytest-rerunfailures
91
+ pytest-rerunfailures<16.0
92
92
  pytest-timeout
93
93
  pytest-xdist
94
94
  pytzdata
@@ -29,6 +29,14 @@ LOGGER = logging.getLogger(__name__)
29
29
  READABLE_BY_OTHERS = stat.S_IRGRP | stat.S_IROTH
30
30
 
31
31
 
32
+ SKIP_WARNING_ENV_VAR = "SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE"
33
+
34
+
35
+ def _should_skip_warning_for_read_permissions_on_config_file() -> bool:
36
+ """Check if the warning should be skipped based on environment variable."""
37
+ return os.getenv(SKIP_WARNING_ENV_VAR, "false").lower() == "true"
38
+
39
+
32
40
  class ConfigSliceOptions(NamedTuple):
33
41
  """Class that defines settings individual configuration files."""
34
42
 
@@ -329,6 +337,7 @@ class ConfigManager:
329
337
  )
330
338
  continue
331
339
 
340
+ # Check for readable by others or wrong ownership - this should warn
332
341
  if (
333
342
  not IS_WINDOWS # Skip checking on Windows
334
343
  and sliceoptions.check_permissions # Skip checking if this file couldn't hold sensitive information
@@ -342,9 +351,10 @@ class ConfigManager:
342
351
  and filep.stat().st_uid != os.getuid()
343
352
  )
344
353
  ):
345
- chmod_message = f'.\n * To change owner, run `chown $USER "{str(filep)}"`.\n * To restrict permissions, run `chmod 0600 "{str(filep)}"`.\n'
354
+ chmod_message = f'.\n * To change owner, run `chown $USER "{str(filep)}"`.\n * To restrict permissions, run `chmod 0600 "{str(filep)}"`.\n * To skip this warning, set environment variable {SKIP_WARNING_ENV_VAR}=true.\n'
346
355
 
347
- warn(f"Bad owner or permissions on {str(filep)}{chmod_message}")
356
+ if not _should_skip_warning_for_read_permissions_on_config_file():
357
+ warn(f"Bad owner or permissions on {str(filep)}{chmod_message}")
348
358
  LOGGER.debug(f"reading configuration file from {str(filep)}")
349
359
  try:
350
360
  read_config_piece = tomlkit.parse(filep.read_text())
@@ -240,6 +240,10 @@ class ConnectionDiagnostic:
240
240
 
241
241
  context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
242
242
  context.load_verify_locations(certifi.where())
243
+ # Best-effort: enable partial-chain when supported
244
+ _partial_flag = getattr(ssl, "VERIFY_X509_PARTIAL_CHAIN", 0)
245
+ if _partial_flag and hasattr(context, "verify_flags"):
246
+ context.verify_flags |= _partial_flag
243
247
  sock = context.wrap_socket(conn, server_hostname=host)
244
248
  certificate = ssl.DER_cert_to_PEM_cert(sock.getpeercert(True))
245
249
  http_request = f"""GET / {host}:{port} HTTP/1.1\r\n
@@ -79,7 +79,10 @@ if TYPE_CHECKING: # pragma: no cover
79
79
  from pyarrow import Table
80
80
 
81
81
  from .connection import SnowflakeConnection
82
- from .file_transfer_agent import SnowflakeProgressPercentage
82
+ from .file_transfer_agent import (
83
+ SnowflakeFileTransferAgent,
84
+ SnowflakeProgressPercentage,
85
+ )
83
86
  from .result_batch import ResultBatch
84
87
 
85
88
  T = TypeVar("T", bound=collections.abc.Sequence)
@@ -1064,11 +1067,7 @@ class SnowflakeCursor:
1064
1067
  )
1065
1068
  logger.debug("PUT OR GET: %s", self.is_file_transfer)
1066
1069
  if self.is_file_transfer:
1067
- from .file_transfer_agent import SnowflakeFileTransferAgent
1068
-
1069
- # Decide whether to use the old, or new code path
1070
- sf_file_transfer_agent = SnowflakeFileTransferAgent(
1071
- self,
1070
+ sf_file_transfer_agent = self._create_file_transfer_agent(
1072
1071
  query,
1073
1072
  ret,
1074
1073
  put_callback=_put_callback,
@@ -1084,13 +1083,6 @@ class SnowflakeCursor:
1084
1083
  skip_upload_on_content_match=_skip_upload_on_content_match,
1085
1084
  source_from_stream=file_stream,
1086
1085
  multipart_threshold=data.get("threshold"),
1087
- use_s3_regional_url=self._connection.enable_stage_s3_privatelink_for_us_east_1,
1088
- iobound_tpe_limit=self._connection.iobound_tpe_limit,
1089
- unsafe_file_write=self._connection.unsafe_file_write,
1090
- snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
1091
- self._connection
1092
- ),
1093
- reraise_error_in_file_transfer_work_function=self.connection._reraise_error_in_file_transfer_work_function,
1094
1086
  )
1095
1087
  sf_file_transfer_agent.execute()
1096
1088
  data = sf_file_transfer_agent.result()
@@ -1786,8 +1778,6 @@ class SnowflakeCursor:
1786
1778
  _do_reset (bool, optional): Whether to reset the cursor before
1787
1779
  downloading, by default we will reset the cursor.
1788
1780
  """
1789
- from .file_transfer_agent import SnowflakeFileTransferAgent
1790
-
1791
1781
  if _do_reset:
1792
1782
  self.reset()
1793
1783
 
@@ -1801,14 +1791,9 @@ class SnowflakeCursor:
1801
1791
  )
1802
1792
 
1803
1793
  # Execute the file operation based on the interpretation above.
1804
- file_transfer_agent = SnowflakeFileTransferAgent(
1805
- self,
1794
+ file_transfer_agent = self._create_file_transfer_agent(
1806
1795
  "", # empty command because it is triggered by directly calling this util not by a SQL query
1807
1796
  ret,
1808
- snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
1809
- self._connection
1810
- ),
1811
- reraise_error_in_file_transfer_work_function=self.connection._reraise_error_in_file_transfer_work_function,
1812
1797
  )
1813
1798
  file_transfer_agent.execute()
1814
1799
  self._init_result_and_meta(file_transfer_agent.result())
@@ -1829,7 +1814,6 @@ class SnowflakeCursor:
1829
1814
  _do_reset (bool, optional): Whether to reset the cursor before
1830
1815
  uploading, by default we will reset the cursor.
1831
1816
  """
1832
- from .file_transfer_agent import SnowflakeFileTransferAgent
1833
1817
 
1834
1818
  if _do_reset:
1835
1819
  self.reset()
@@ -1844,15 +1828,10 @@ class SnowflakeCursor:
1844
1828
  )
1845
1829
 
1846
1830
  # Execute the file operation based on the interpretation above.
1847
- file_transfer_agent = SnowflakeFileTransferAgent(
1848
- self,
1831
+ file_transfer_agent = self._create_file_transfer_agent(
1849
1832
  "", # empty command because it is triggered by directly calling this util not by a SQL query
1850
1833
  ret,
1851
1834
  force_put_overwrite=False, # _upload should respect user decision on overwriting
1852
- snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
1853
- self._connection
1854
- ),
1855
- reraise_error_in_file_transfer_work_function=self.connection._reraise_error_in_file_transfer_work_function,
1856
1835
  )
1857
1836
  file_transfer_agent.execute()
1858
1837
  self._init_result_and_meta(file_transfer_agent.result())
@@ -1899,7 +1878,6 @@ class SnowflakeCursor:
1899
1878
  _do_reset (bool, optional): Whether to reset the cursor before
1900
1879
  uploading, by default we will reset the cursor.
1901
1880
  """
1902
- from .file_transfer_agent import SnowflakeFileTransferAgent
1903
1881
 
1904
1882
  if _do_reset:
1905
1883
  self.reset()
@@ -1915,19 +1893,37 @@ class SnowflakeCursor:
1915
1893
  )
1916
1894
 
1917
1895
  # Execute the file operation based on the interpretation above.
1918
- file_transfer_agent = SnowflakeFileTransferAgent(
1919
- self,
1896
+ file_transfer_agent = self._create_file_transfer_agent(
1920
1897
  "", # empty command because it is triggered by directly calling this util not by a SQL query
1921
1898
  ret,
1922
1899
  source_from_stream=input_stream,
1923
1900
  force_put_overwrite=False, # _upload_stream should respect user decision on overwriting
1901
+ )
1902
+ file_transfer_agent.execute()
1903
+ self._init_result_and_meta(file_transfer_agent.result())
1904
+
1905
+ def _create_file_transfer_agent(
1906
+ self,
1907
+ command: str,
1908
+ ret: dict[str, Any],
1909
+ /,
1910
+ **kwargs,
1911
+ ) -> SnowflakeFileTransferAgent:
1912
+ from .file_transfer_agent import SnowflakeFileTransferAgent
1913
+
1914
+ return SnowflakeFileTransferAgent(
1915
+ self,
1916
+ command,
1917
+ ret,
1918
+ use_s3_regional_url=self._connection.enable_stage_s3_privatelink_for_us_east_1,
1919
+ iobound_tpe_limit=self._connection.iobound_tpe_limit,
1920
+ unsafe_file_write=self._connection.unsafe_file_write,
1924
1921
  snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
1925
1922
  self._connection
1926
1923
  ),
1927
- reraise_error_in_file_transfer_work_function=self.connection._reraise_error_in_file_transfer_work_function,
1924
+ reraise_error_in_file_transfer_work_function=self._connection._reraise_error_in_file_transfer_work_function,
1925
+ **kwargs,
1928
1926
  )
1929
- file_transfer_agent.execute()
1930
- self._init_result_and_meta(file_transfer_agent.result())
1931
1927
 
1932
1928
 
1933
1929
  class DictCursor(SnowflakeCursor):
@@ -14,7 +14,7 @@ from .proxy import get_proxy_url
14
14
  from .vendored import requests
15
15
  from .vendored.requests import Response, Session
16
16
  from .vendored.requests.adapters import BaseAdapter, HTTPAdapter
17
- from .vendored.requests.exceptions import InvalidProxyURL
17
+ from .vendored.requests.exceptions import InvalidProxyURL, InvalidURL
18
18
  from .vendored.requests.utils import prepend_scheme_if_needed, select_proxy
19
19
  from .vendored.urllib3 import PoolManager, Retry
20
20
  from .vendored.urllib3.poolmanager import ProxyManager
@@ -23,7 +23,6 @@ from .vendored.urllib3.util.url import parse_url
23
23
  if TYPE_CHECKING:
24
24
  from .vendored.urllib3.connectionpool import HTTPConnectionPool, HTTPSConnectionPool
25
25
 
26
-
27
26
  logger = logging.getLogger(__name__)
28
27
  REQUESTS_RETRY = 1 # requests library builtin retry
29
28
 
@@ -60,19 +59,25 @@ def _propagate_session_manager_to_ocsp(generator_func):
60
59
  class ProxySupportAdapter(HTTPAdapter):
61
60
  """This Adapter creates proper headers for Proxy CONNECT messages."""
62
61
 
63
- def get_connection(
64
- self, url: str, proxies: dict | None = None
62
+ def get_connection_with_tls_context(
63
+ self, request, verify, proxies=None, cert=None
65
64
  ) -> HTTPConnectionPool | HTTPSConnectionPool:
66
- proxy = select_proxy(url, proxies)
67
- parsed_url = urlparse(url)
68
-
65
+ proxy = select_proxy(request.url, proxies)
66
+ try:
67
+ host_params, pool_kwargs = self.build_connection_pool_key_attributes(
68
+ request,
69
+ verify,
70
+ cert,
71
+ )
72
+ except ValueError as e:
73
+ raise InvalidURL(e, request=request)
69
74
  if proxy:
70
75
  proxy = prepend_scheme_if_needed(proxy, "http")
71
76
  proxy_url = parse_url(proxy)
72
77
  if not proxy_url.host:
73
78
  raise InvalidProxyURL(
74
- "Please check proxy URL. It is malformed"
75
- " and could be missing the host."
79
+ "Please check proxy URL. It is malformed "
80
+ "and could be missing the host."
76
81
  )
77
82
  proxy_manager = self.proxy_manager_for(proxy)
78
83
 
@@ -85,17 +90,22 @@ class ProxySupportAdapter(HTTPAdapter):
85
90
  # Note: netloc also keeps user-info (user:pass@host) if present in URL. The driver never sends
86
91
  # URLs with embedded credentials, so we leave them unhandled — for full support
87
92
  # we’d need to manually concatenate hostname with optional port and IPv6 brackets.
93
+ parsed_url = urlparse(request.url)
88
94
  proxy_manager.proxy_headers["Host"] = parsed_url.netloc
89
95
  else:
90
96
  logger.debug(
91
97
  f"Unable to set 'Host' to proxy manager of type {type(proxy_manager)} as"
92
98
  f" it does not have attribute 'proxy_headers'."
93
99
  )
94
- conn = proxy_manager.connection_from_url(url)
100
+
101
+ conn = proxy_manager.connection_from_host(
102
+ **host_params, pool_kwargs=pool_kwargs
103
+ )
95
104
  else:
96
105
  # Only scheme should be lower case
97
- url = parsed_url.geturl()
98
- conn = self.poolmanager.connection_from_url(url)
106
+ conn = self.poolmanager.connection_from_host(
107
+ **host_params, pool_kwargs=pool_kwargs
108
+ )
99
109
 
100
110
  return conn
101
111
 
@@ -8,11 +8,13 @@ from __future__ import annotations
8
8
  #
9
9
  # and added OCSP validator on the top.
10
10
  import logging
11
+ import os
12
+ import ssl
11
13
  import time
12
14
  import weakref
13
15
  from contextvars import ContextVar
14
16
  from functools import wraps
15
- from inspect import getfullargspec as get_args
17
+ from inspect import signature as _sig
16
18
  from socket import socket
17
19
  from typing import Any
18
20
 
@@ -38,9 +40,57 @@ FEATURE_OCSP_RESPONSE_CACHE_FILE_NAME: str | None = None
38
40
  log = logging.getLogger(__name__)
39
41
 
40
42
 
43
+ # Helper utilities (private)
44
+ def _resolve_cafile(kwargs: dict[str, Any]) -> str | None:
45
+ """Resolve CA bundle path from kwargs or standard environment variables.
46
+
47
+ Precedence:
48
+ 1) kwargs['ca_certs'] if provided by caller
49
+ 2) REQUESTS_CA_BUNDLE
50
+ 3) SSL_CERT_FILE
51
+ """
52
+ caf = kwargs.get("ca_certs")
53
+ if caf:
54
+ return caf
55
+ return os.environ.get("REQUESTS_CA_BUNDLE") or os.environ.get("SSL_CERT_FILE")
56
+
57
+
58
+ def _ensure_partial_chain_on_context(ctx: PyOpenSSLContext, cafile: str | None) -> None:
59
+ """Load CA bundle (when provided) and enable OpenSSL partial-chain support on ctx."""
60
+ if cafile:
61
+ try:
62
+ ctx.load_verify_locations(cafile=cafile, capath=None)
63
+ except (ssl.SSLError, OSError, ValueError):
64
+ # Leave context unchanged; handshake/validation surfaces failures
65
+ pass
66
+ try:
67
+ store = ctx._ctx.get_cert_store()
68
+ from OpenSSL import crypto as _crypto
69
+
70
+ if hasattr(_crypto, "X509StoreFlags") and hasattr(
71
+ _crypto.X509StoreFlags, "PARTIAL_CHAIN"
72
+ ):
73
+ store.set_flags(_crypto.X509StoreFlags.PARTIAL_CHAIN)
74
+ except (AttributeError, ImportError, OpenSSL.SSL.Error, OSError, ValueError):
75
+ # Best-effort; if not available, default chain building applies
76
+ pass
77
+
78
+
79
+ def _build_context_with_partial_chain(cafile: str | None) -> PyOpenSSLContext:
80
+ """Create PyOpenSSL context configured for CERT_REQUIRED and partial-chain trust."""
81
+ ctx = PyOpenSSLContext(ssl_.PROTOCOL_TLS_CLIENT)
82
+ try:
83
+ ctx.verify_mode = ssl.CERT_REQUIRED
84
+ except Exception:
85
+ pass
86
+ _ensure_partial_chain_on_context(ctx, cafile)
87
+ return ctx
88
+
89
+
41
90
  # Store a *weak* reference so that the context variable doesn’t prolong the
42
91
  # lifetime of the SessionManager. Once all owning connections are GC-ed the
43
- # weakref goes dead and OCSP will fall back to its local manager (but most likely won't be used ever again anyway).
92
+ # weakref goes dead and OCSP will fall back to its local manager (but most
93
+ # likely won't be used ever again anyway).
44
94
  _CURRENT_SESSION_MANAGER: ContextVar[weakref.ref[SessionManager] | None] = ContextVar(
45
95
  "_CURRENT_SESSION_MANAGER",
46
96
  default=None,
@@ -71,7 +121,10 @@ def set_current_session_manager(sm: SessionManager | None) -> Any:
71
121
  Called from SnowflakeConnection so that OCSP downloads
72
122
  use the same proxy / header configuration as the initiating connection.
73
123
 
74
- Alternative approach would be moving method inject_into_urllib3() inside connection initialization, but in case this delay (from module import time to connection initialization time) would cause some code to break we stayed with this approach, having in mind soon OCSP deprecation.
124
+ Alternative approach would be moving method inject_into_urllib3() inside
125
+ connection initialization, but in case this delay (from module import time
126
+ to connection initialization time) would cause some code to break we stayed
127
+ with this approach, having in mind soon OCSP deprecation.
75
128
  """
76
129
  return _CURRENT_SESSION_MANAGER.set(weakref.ref(sm) if sm is not None else None)
77
130
 
@@ -93,37 +146,29 @@ def inject_into_urllib3() -> None:
93
146
 
94
147
  @wraps(ssl_.ssl_wrap_socket)
95
148
  def ssl_wrap_socket_with_ocsp(*args: Any, **kwargs: Any) -> WrappedSocket:
96
- # Extract host_name
97
- hostname_index = get_args(ssl_.ssl_wrap_socket).args.index("server_hostname")
98
- server_hostname = (
99
- args[hostname_index]
100
- if len(args) > hostname_index
101
- else kwargs.get("server_hostname", None)
102
- )
103
- # Remove context if present
104
- ssl_context_index = get_args(ssl_.ssl_wrap_socket).args.index("ssl_context")
105
- context_in_args = len(args) > ssl_context_index
106
- ssl_context = (
107
- args[hostname_index] if context_in_args else kwargs.get("ssl_context", None)
108
- )
109
- if not isinstance(ssl_context, PyOpenSSLContext):
110
- # Create new default context
111
- if context_in_args:
112
- new_args = list(args)
113
- new_args[ssl_context_index] = None
114
- args = tuple(new_args)
115
- else:
116
- del kwargs["ssl_context"]
117
- # Fix ca certs location
118
- ca_certs_index = get_args(ssl_.ssl_wrap_socket).args.index("ca_certs")
119
- ca_certs_in_args = len(args) > ca_certs_index
120
- if not ca_certs_in_args and not kwargs.get("ca_certs"):
121
- kwargs["ca_certs"] = certifi.where()
122
-
123
- ret = ssl_.ssl_wrap_socket(*args, **kwargs)
149
+ # Bind passed args/kwargs to the underlying signature to support both positional and keyword calls
150
+ bound = _sig(ssl_.ssl_wrap_socket).bind_partial(*args, **kwargs)
151
+ params = bound.arguments
152
+
153
+ server_hostname = params.get("server_hostname")
154
+
155
+ # Ensure CA bundle default if not provided
156
+ if not params.get("ca_certs"):
157
+ params["ca_certs"] = certifi.where()
158
+
159
+ # Ensure PyOpenSSL context with partial-chain is used if none or wrong type provided
160
+ provided_ctx = params.get("ssl_context")
161
+ if not isinstance(provided_ctx, PyOpenSSLContext):
162
+ cafile_for_ctx = _resolve_cafile(params)
163
+ params["ssl_context"] = _build_context_with_partial_chain(cafile_for_ctx)
164
+ else:
165
+ # If a PyOpenSSLContext is provided, ensure it trusts the provided CA and partial-chain is enabled
166
+ _ensure_partial_chain_on_context(provided_ctx, _resolve_cafile(params))
167
+
168
+ ret = ssl_.ssl_wrap_socket(**params)
124
169
 
125
170
  log.debug(
126
- "OCSP Mode: %s, " "OCSP response cache file name: %s",
171
+ "OCSP Mode: %s, OCSP response cache file name: %s",
127
172
  FEATURE_OCSP_MODE.name,
128
173
  FEATURE_OCSP_RESPONSE_CACHE_FILE_NAME,
129
174
  )
@@ -137,10 +182,7 @@ def ssl_wrap_socket_with_ocsp(*args: Any, **kwargs: Any) -> WrappedSocket:
137
182
  ).validate(server_hostname, ret.connection)
138
183
  if not v:
139
184
  raise OperationalError(
140
- msg=(
141
- "The certificate is revoked or "
142
- "could not be validated: hostname={}".format(server_hostname)
143
- ),
185
+ msg=f"The certificate is revoked or could not be validated: hostname={server_hostname}",
144
186
  errno=ER_OCSP_RESPONSE_CERT_STATUS_REVOKED,
145
187
  )
146
188
  else:
@@ -41,6 +41,7 @@ is at <https://requests.readthedocs.io>.
41
41
  import warnings
42
42
 
43
43
  from .. import urllib3
44
+
44
45
  from .exceptions import RequestsDependencyWarning
45
46
 
46
47
  try:
@@ -82,7 +83,11 @@ def check_compatibility(urllib3_version, chardet_version, charset_normalizer_ver
82
83
  # charset_normalizer >= 2.0.0 < 4.0.0
83
84
  assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0)
84
85
  else:
85
- raise Exception("You need either charset_normalizer or chardet installed")
86
+ warnings.warn(
87
+ "Unable to find acceptable character detection dependency "
88
+ "(chardet or charset_normalizer).",
89
+ RequestsDependencyWarning,
90
+ )
86
91
 
87
92
 
88
93
  def _check_cryptography(cryptography_version):
@@ -113,14 +118,24 @@ except (AssertionError, ValueError):
113
118
  RequestsDependencyWarning,
114
119
  )
115
120
 
116
- # Attempt to enable urllib3's SNI support, if possible
121
+ # Attempt to enable urllib3's fallback for SNI support
122
+ # if the standard library doesn't support SNI or the
123
+ # 'ssl' library isn't available.
117
124
  try:
118
- from ..urllib3.contrib import pyopenssl
119
- pyopenssl.inject_into_urllib3()
125
+ try:
126
+ import ssl
127
+ except ImportError:
128
+ ssl = None
129
+
130
+ if not getattr(ssl, "HAS_SNI", False):
131
+ from ..urllib3.contrib import pyopenssl
132
+
133
+ pyopenssl.inject_into_urllib3()
134
+
135
+ # Check cryptography version
136
+ from cryptography import __version__ as cryptography_version
120
137
 
121
- # Check cryptography version
122
- from cryptography import __version__ as cryptography_version
123
- _check_cryptography(cryptography_version)
138
+ _check_cryptography(cryptography_version)
124
139
  except ImportError:
125
140
  pass
126
141
 
@@ -133,7 +148,7 @@ warnings.simplefilter("ignore", DependencyWarning)
133
148
  import logging
134
149
  from logging import NullHandler
135
150
 
136
- from . import utils
151
+ from . import packages, utils
137
152
  from .__version__ import (
138
153
  __author__,
139
154
  __author_email__,
@@ -5,10 +5,10 @@
5
5
  __title__ = "requests"
6
6
  __description__ = "Python HTTP for Humans."
7
7
  __url__ = "https://requests.readthedocs.io"
8
- __version__ = "2.31.0"
9
- __build__ = 0x023100
8
+ __version__ = "2.32.5"
9
+ __build__ = 0x023205
10
10
  __author__ = "Kenneth Reitz"
11
11
  __author_email__ = "me@kennethreitz.org"
12
- __license__ = "Apache 2.0"
12
+ __license__ = "Apache-2.0"
13
13
  __copyright__ = "Copyright Kenneth Reitz"
14
14
  __cake__ = "\u2728 \U0001f370 \u2728"