snowflake-connector-python 3.17.1__tar.gz → 3.18.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 (281) hide show
  1. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/DESCRIPTION.md +20 -0
  2. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/MANIFEST.in +1 -1
  3. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/PKG-INFO +22 -2
  4. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/setup.cfg +1 -1
  5. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/_auth.py +2 -2
  6. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/okta.py +3 -1
  7. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/webbrowser.py +8 -6
  8. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/workload_identity.py +3 -1
  9. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/config_manager.py +12 -2
  10. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/connection_diagnostic.py +4 -0
  11. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/cursor.py +30 -34
  12. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +89 -0
  13. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +8 -0
  14. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/platform_detection.py +31 -28
  15. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/session_manager.py +81 -48
  16. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/ssl_wrap_socket.py +78 -36
  17. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/__init__.py +23 -8
  18. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/__version__.py +3 -3
  19. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/adapters.py +162 -3
  20. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/api.py +1 -1
  21. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/auth.py +0 -1
  22. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/compat.py +31 -4
  23. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/cookies.py +8 -8
  24. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/exceptions.py +11 -0
  25. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/models.py +12 -6
  26. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/requests/packages.py +23 -0
  27. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/sessions.py +6 -8
  28. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/status_codes.py +5 -5
  29. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/utils.py +15 -22
  30. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +1 -1
  31. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/__init__.py +211 -0
  32. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/_base_connection.py +165 -0
  33. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/_collections.py +479 -0
  34. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/request.py → snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/_request_methods.py +137 -50
  35. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/_version.py +21 -0
  36. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/connection.py +1102 -0
  37. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +409 -368
  38. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +16 -0
  39. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +255 -0
  40. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +110 -0
  41. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +728 -0
  42. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +22 -0
  43. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +277 -0
  44. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +228 -173
  45. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +48 -36
  46. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +110 -98
  47. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/fields.py +341 -0
  48. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/filepost.py +28 -37
  49. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/http2/__init__.py +53 -0
  50. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/http2/connection.py +356 -0
  51. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/http2/probe.py +87 -0
  52. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +237 -124
  53. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/py.typed +2 -0
  54. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/response.py +1307 -0
  55. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +6 -13
  56. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +34 -53
  57. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +12 -26
  58. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/util/request.py +266 -0
  59. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/util/response.py +101 -0
  60. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +138 -225
  61. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/util/ssl_.py +524 -0
  62. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +48 -48
  63. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +106 -56
  64. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +61 -57
  65. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/url.py +214 -180
  66. snowflake_connector_python-3.18.0/src/snowflake/connector/vendored/urllib3/util/util.py +42 -0
  67. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +31 -59
  68. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/version.py +1 -1
  69. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/wif_util.py +3 -1
  70. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake_connector_python.egg-info/PKG-INFO +22 -2
  71. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +14 -14
  72. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
  73. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/__init__.py +0 -85
  74. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/_collections.py +0 -355
  75. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/_version.py +0 -2
  76. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/connection.py +0 -572
  77. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -36
  78. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  79. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -519
  80. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -397
  81. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -314
  82. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -130
  83. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -920
  84. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/fields.py +0 -274
  85. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  86. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  87. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -51
  88. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -155
  89. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -1076
  90. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/response.py +0 -885
  91. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -22
  92. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/util/request.py +0 -146
  93. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/util/response.py +0 -107
  94. snowflake_connector_python-3.17.1/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -495
  95. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/CONTRIBUTING.md +0 -0
  96. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/LICENSE.txt +0 -0
  97. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/NOTICE +0 -0
  98. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/README.md +0 -0
  99. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/SECURITY.md +0 -0
  100. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/pyproject.toml +0 -0
  101. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/setup.py +0 -0
  102. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/__init__.py +0 -0
  103. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  104. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/_sql_util.py +0 -0
  105. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/_utils.py +0 -0
  106. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/arrow_context.py +0 -0
  107. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/__init__.py +0 -0
  108. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  109. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
  110. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  111. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/default.py +0 -0
  112. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  113. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/keypair.py +0 -0
  114. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  115. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/oauth.py +0 -0
  116. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/oauth_code.py +0 -0
  117. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  118. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/pat.py +0 -0
  119. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  120. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  121. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/backoff_policies.py +0 -0
  122. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  123. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/cache.py +0 -0
  124. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/compat.py +0 -0
  125. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/connection.py +0 -0
  126. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/constants.py +0 -0
  127. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/converter.py +0 -0
  128. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  129. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/converter_null.py +0 -0
  130. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  131. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/dbapi.py +0 -0
  132. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/description.py +0 -0
  133. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  134. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/encryption_util.py +0 -0
  135. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/errorcode.py +0 -0
  136. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/errors.py +0 -0
  137. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  138. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  139. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/feature.py +0 -0
  140. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/file_compression_type.py +0 -0
  141. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/file_lock.py +0 -0
  142. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
  143. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/file_util.py +0 -0
  144. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  145. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  146. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/interval_util.py +0 -0
  147. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/local_storage_client.py +0 -0
  148. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/log_configuration.py +0 -0
  149. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  150. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  151. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  152. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  153. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  154. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  155. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  156. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  157. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  158. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  159. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  160. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  161. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  162. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  163. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  164. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  165. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  166. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  167. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  168. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  169. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  170. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  171. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  172. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  173. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  174. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  175. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  176. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  177. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  178. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  179. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  180. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  181. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  182. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  183. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  184. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  185. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  186. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  187. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  188. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  189. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  190. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  191. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  192. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  193. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  194. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  195. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  196. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  197. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  198. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  199. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  200. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  201. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  202. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  203. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  204. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  205. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  206. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  207. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  208. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  209. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  210. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  211. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  212. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  213. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  214. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  215. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  216. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  217. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  218. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  219. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  220. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  221. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  222. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  223. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  224. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  225. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  226. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  227. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  228. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  229. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  230. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  231. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  232. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  233. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  234. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  235. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  236. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  237. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  238. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  239. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  240. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/network.py +0 -0
  241. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  242. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  243. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/options.py +0 -0
  244. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/pandas_tools.py +0 -0
  245. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/proxy.py +0 -0
  246. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/py.typed +0 -0
  247. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/result_batch.py +0 -0
  248. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/result_set.py +0 -0
  249. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  250. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/secret_detector.py +0 -0
  251. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/sf_dirs.py +0 -0
  252. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  253. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/sfdatetime.py +0 -0
  254. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/snow_logging.py +0 -0
  255. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/sqlstate.py +0 -0
  256. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  257. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/storage_client.py +0 -0
  258. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/telemetry.py +0 -0
  259. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  260. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/test_util.py +0 -0
  261. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/time_util.py +0 -0
  262. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/token_cache.py +0 -0
  263. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/tool/__init__.py +0 -0
  264. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  265. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  266. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  267. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  268. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/url_util.py +0 -0
  269. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/util_text.py +0 -0
  270. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  271. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  272. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  273. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  274. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/help.py +1 -1
  275. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  276. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  277. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  278. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  279. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  280. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  281. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.18.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,6 +7,26 @@ 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.19.0(TBD)
11
+ - N/A
12
+
13
+ - v3.18.0(October 03,2025)
14
+ - Added support for pandas conversion for Day-time and Year-Month Interval types
15
+
16
+ - v3.17.4(September 22,2025)
17
+ - Added support for intermediate certificates as roots when they are stored in the trust store
18
+ - Bumped up vendored `urllib3` to `2.5.0` and `requests` to `v2.32.5`
19
+
20
+ - v3.17.3(September 02,2025)
21
+ - Enhanced configuration file permission warning messages.
22
+ - 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.
23
+ - Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
24
+ - This addresses the issue with `create_dataframe` call on Snowpark
25
+
26
+ - v3.17.2(August 23,2025)
27
+ - Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
28
+ - Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
29
+
10
30
  - v3.17.1(August 17,2025)
11
31
  - Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
12
32
  - Namespace `snowlake` reverted back to non-module.
@@ -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.1
3
+ Version: 3.18.0
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,26 @@ 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.19.0(TBD)
90
+ - N/A
91
+
92
+ - v3.18.0(October 03,2025)
93
+ - Added support for pandas conversion for Day-time and Year-Month Interval types
94
+
95
+ - v3.17.4(September 22,2025)
96
+ - Added support for intermediate certificates as roots when they are stored in the trust store
97
+ - Bumped up vendored `urllib3` to `2.5.0` and `requests` to `v2.32.5`
98
+
99
+ - v3.17.3(September 02,2025)
100
+ - Enhanced configuration file permission warning messages.
101
+ - 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.
102
+ - Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
103
+ - This addresses the issue with `create_dataframe` call on Snowpark
104
+
105
+ - v3.17.2(August 23,2025)
106
+ - Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
107
+ - Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
108
+
89
109
  - v3.17.1(August 17,2025)
90
110
  - Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
91
111
  - Namespace `snowlake` reverted back to non-module.
@@ -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
@@ -128,7 +128,7 @@ class Auth:
128
128
  "SOCKET_TIMEOUT": socket_timeout,
129
129
  "PLATFORM": detect_platforms(
130
130
  platform_detection_timeout_seconds=platform_detection_timeout_seconds,
131
- session_manager=session_manager,
131
+ session_manager=session_manager.clone(max_retries=0),
132
132
  ),
133
133
  },
134
134
  },
@@ -185,7 +185,7 @@ class Auth:
185
185
  self._rest._connection.login_timeout,
186
186
  self._rest._connection._network_timeout,
187
187
  self._rest._connection._socket_timeout,
188
- self._rest._connection._platform_detection_timeout_seconds,
188
+ self._rest._connection.platform_detection_timeout_seconds,
189
189
  session_manager=self._rest.session_manager.clone(use_pooling=False),
190
190
  )
191
191
 
@@ -167,7 +167,9 @@ class AuthByOkta(AuthByPlugin):
167
167
  conn._internal_application_version,
168
168
  conn._ocsp_mode(),
169
169
  conn.login_timeout,
170
- conn._network_timeout,
170
+ conn.network_timeout,
171
+ conn.socket_timeout,
172
+ conn.platform_detection_timeout_seconds,
171
173
  session_manager=conn._session_manager.clone(use_pooling=False),
172
174
  )
173
175
 
@@ -456,12 +456,14 @@ You can close this window now and go back where you started from.
456
456
  body = Auth.base_auth_data(
457
457
  user,
458
458
  account,
459
- conn._rest._connection.application,
460
- conn._rest._connection._internal_application_name,
461
- conn._rest._connection._internal_application_version,
462
- conn._rest._connection._ocsp_mode(),
463
- conn._rest._connection.login_timeout,
464
- conn._rest._connection._network_timeout,
459
+ conn.application,
460
+ conn._internal_application_name,
461
+ conn._internal_application_version,
462
+ conn._ocsp_mode(),
463
+ conn.login_timeout,
464
+ conn.network_timeout,
465
+ conn.socket_timeout,
466
+ conn.platform_detection_timeout_seconds,
465
467
  session_manager=conn.rest.session_manager.clone(use_pooling=False),
466
468
  )
467
469
 
@@ -85,7 +85,9 @@ class AuthByWorkloadIdentity(AuthByPlugin):
85
85
  self.provider,
86
86
  self.entra_resource,
87
87
  self.token,
88
- session_manager=conn._session_manager.clone() if conn else None,
88
+ session_manager=(
89
+ conn._session_manager.clone(max_retries=0) if conn else None
90
+ ),
89
91
  )
90
92
 
91
93
  def reauthenticate(self, **kwargs: typing.Any) -> dict[str, bool]:
@@ -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):
@@ -68,6 +68,7 @@ void CArrowTableIterator::convertIfNeeded(ArrowSchema* columnSchema,
68
68
  case SnowflakeType::Type::DATE:
69
69
  case SnowflakeType::Type::REAL:
70
70
  case SnowflakeType::Type::TEXT:
71
+ case SnowflakeType::Type::INTERVAL_YEAR_MONTH:
71
72
  case SnowflakeType::Type::VARIANT:
72
73
  case SnowflakeType::Type::VECTOR: {
73
74
  // Do not need to convert
@@ -174,6 +175,24 @@ void CArrowTableIterator::convertIfNeeded(ArrowSchema* columnSchema,
174
175
  break;
175
176
  }
176
177
 
178
+ case SnowflakeType::Type::INTERVAL_DAY_TIME: {
179
+ int scale = 9;
180
+ if (metadata != nullptr) {
181
+ struct ArrowStringView scaleString = ArrowCharView(nullptr);
182
+ returnCode = ArrowMetadataGetValue(metadata, ArrowCharView("scale"),
183
+ &scaleString);
184
+ SF_CHECK_ARROW_RC(returnCode,
185
+ "[Snowflake Exception] error getting 'scale' "
186
+ "from Arrow metadata, error code: %d",
187
+ returnCode);
188
+ scale =
189
+ std::stoi(std::string(scaleString.data, scaleString.size_bytes));
190
+ }
191
+ convertIntervalDayTimeColumn_nanoarrow(&columnSchemaView, columnArray,
192
+ scale);
193
+ break;
194
+ }
195
+
177
196
  case SnowflakeType::Type::TIME: {
178
197
  int scale = 9;
179
198
  if (metadata != nullptr) {
@@ -503,6 +522,76 @@ void CArrowTableIterator::
503
522
  ArrowArrayMove(newArray, columnArray->array);
504
523
  }
505
524
 
525
+ void CArrowTableIterator::convertIntervalDayTimeColumn_nanoarrow(
526
+ ArrowSchemaView* field, ArrowArrayView* columnArray, const int scale) {
527
+ int returnCode = 0;
528
+ nanoarrow::UniqueSchema newUniqueField;
529
+ nanoarrow::UniqueArray newUniqueArray;
530
+ ArrowSchema* newSchema = newUniqueField.get();
531
+ ArrowArray* newArray = newUniqueArray.get();
532
+ ArrowError error;
533
+
534
+ // create new schema
535
+ ArrowSchemaInit(newSchema);
536
+ newSchema->flags &=
537
+ (field->schema->flags & ARROW_FLAG_NULLABLE); // map to nullable()
538
+
539
+ returnCode = ArrowSchemaSetTypeDateTime(newSchema, NANOARROW_TYPE_DURATION,
540
+ NANOARROW_TIME_UNIT_NANO, NULL);
541
+ SF_CHECK_ARROW_RC(returnCode,
542
+ "[Snowflake Exception] error setting arrow schema type "
543
+ "DateTime, error code: %d",
544
+ returnCode);
545
+
546
+ returnCode = ArrowSchemaSetName(newSchema, field->schema->name);
547
+ SF_CHECK_ARROW_RC(
548
+ returnCode,
549
+ "[Snowflake Exception] error setting schema name, error code: %d",
550
+ returnCode);
551
+
552
+ returnCode = ArrowArrayInitFromSchema(newArray, newSchema, &error);
553
+ SF_CHECK_ARROW_RC(returnCode,
554
+ "[Snowflake Exception] error initializing ArrowArrayView "
555
+ "from schema : %s, error code: %d",
556
+ ArrowErrorMessage(&error), returnCode);
557
+
558
+ returnCode = ArrowArrayStartAppending(newArray);
559
+ SF_CHECK_ARROW_RC(
560
+ returnCode,
561
+ "[Snowflake Exception] error appending arrow array, error code: %d",
562
+ returnCode);
563
+
564
+ for (int64_t rowIdx = 0; rowIdx < columnArray->array->length; rowIdx++) {
565
+ if (ArrowArrayViewIsNull(columnArray, rowIdx)) {
566
+ returnCode = ArrowArrayAppendNull(newArray, 1);
567
+ SF_CHECK_ARROW_RC(returnCode,
568
+ "[Snowflake Exception] error appending null to arrow "
569
+ "array, error code: %d",
570
+ returnCode);
571
+ } else {
572
+ ArrowDecimal arrowDecimal;
573
+ ArrowDecimalInit(&arrowDecimal, 128, 38, 0);
574
+ ArrowArrayViewGetDecimalUnsafe(columnArray, rowIdx, &arrowDecimal);
575
+ auto originalVal = ArrowDecimalGetIntUnsafe(&arrowDecimal);
576
+ returnCode = ArrowArrayAppendInt(newArray, originalVal);
577
+ SF_CHECK_ARROW_RC(returnCode,
578
+ "[Snowflake Exception] error appending int to arrow "
579
+ "array, error code: %d",
580
+ returnCode);
581
+ }
582
+ }
583
+
584
+ returnCode = ArrowArrayFinishBuildingDefault(newArray, &error);
585
+ SF_CHECK_ARROW_RC(returnCode,
586
+ "[Snowflake Exception] error finishing building arrow "
587
+ "array: %s, error code: %d",
588
+ ArrowErrorMessage(&error), returnCode);
589
+ field->schema->release(field->schema);
590
+ ArrowSchemaMove(newSchema, field->schema);
591
+ columnArray->array->release(columnArray->array);
592
+ ArrowArrayMove(newArray, columnArray->array);
593
+ }
594
+
506
595
  void CArrowTableIterator::convertTimeColumn_nanoarrow(
507
596
  ArrowSchemaView* field, ArrowArrayView* columnArray, const int scale) {
508
597
  int returnCode = 0;
@@ -94,6 +94,14 @@ class CArrowTableIterator : public CArrowIterator {
94
94
  ArrowArrayView* columnArray,
95
95
  const int scale);
96
96
 
97
+ /**
98
+ * convert Snowflake Interval Day-Time column (Arrow int64/decimal128) to
99
+ * Arrow Duration column
100
+ */
101
+ void convertIntervalDayTimeColumn_nanoarrow(ArrowSchemaView* field,
102
+ ArrowArrayView* columnArray,
103
+ const int scale);
104
+
97
105
  /**
98
106
  * convert Snowflake TimestampNTZ/TimestampLTZ column to Arrow Timestamp
99
107
  * column
@@ -399,7 +399,7 @@ def detect_platforms(
399
399
 
400
400
  if session_manager is None:
401
401
  # This should never happen - we expect session manager to be passed from the outer scope
402
- session_manager = SessionManager(use_pooling=False)
402
+ session_manager = SessionManager(use_pooling=False, max_retries=0)
403
403
 
404
404
  # Run environment-only checks synchronously (no network calls, no threading overhead)
405
405
  platforms = {
@@ -411,33 +411,36 @@ def detect_platforms(
411
411
  }
412
412
 
413
413
  # Run network-calling functions in parallel
414
- with ThreadPoolExecutor(max_workers=6) as executor:
415
- futures = {
416
- "is_ec2_instance": executor.submit(
417
- is_ec2_instance, platform_detection_timeout_seconds
418
- ),
419
- "has_aws_identity": executor.submit(
420
- has_aws_identity, platform_detection_timeout_seconds
421
- ),
422
- "is_azure_vm": executor.submit(
423
- is_azure_vm, platform_detection_timeout_seconds, session_manager
424
- ),
425
- "has_azure_managed_identity": executor.submit(
426
- has_azure_managed_identity,
427
- platform_detection_timeout_seconds,
428
- session_manager,
429
- ),
430
- "is_gce_vm": executor.submit(
431
- is_gce_vm, platform_detection_timeout_seconds, session_manager
432
- ),
433
- "has_gcp_identity": executor.submit(
434
- has_gcp_identity,
435
- platform_detection_timeout_seconds,
436
- session_manager,
437
- ),
438
- }
439
-
440
- platforms.update({key: future.result() for key, future in futures.items()})
414
+ if platform_detection_timeout_seconds != 0.0:
415
+ with ThreadPoolExecutor(max_workers=6) as executor:
416
+ futures = {
417
+ "is_ec2_instance": executor.submit(
418
+ is_ec2_instance, platform_detection_timeout_seconds
419
+ ),
420
+ "has_aws_identity": executor.submit(
421
+ has_aws_identity, platform_detection_timeout_seconds
422
+ ),
423
+ "is_azure_vm": executor.submit(
424
+ is_azure_vm, platform_detection_timeout_seconds, session_manager
425
+ ),
426
+ "has_azure_managed_identity": executor.submit(
427
+ has_azure_managed_identity,
428
+ platform_detection_timeout_seconds,
429
+ session_manager,
430
+ ),
431
+ "is_gce_vm": executor.submit(
432
+ is_gce_vm, platform_detection_timeout_seconds, session_manager
433
+ ),
434
+ "has_gcp_identity": executor.submit(
435
+ has_gcp_identity,
436
+ platform_detection_timeout_seconds,
437
+ session_manager,
438
+ ),
439
+ }
440
+
441
+ platforms.update(
442
+ {key: future.result() for key, future in futures.items()}
443
+ )
441
444
 
442
445
  detected_platforms = []
443
446
  for platform_name, detection_state in platforms.items():