snowflake-connector-python 3.16.0__tar.gz → 3.17.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 (261) hide show
  1. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/DESCRIPTION.md +23 -0
  2. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/PKG-INFO +25 -2
  3. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/setup.cfg +1 -1
  4. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/_utils.py +28 -0
  5. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/arrow_context.py +4 -0
  6. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/_auth.py +15 -1
  7. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/_oauth_base.py +42 -5
  8. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/by_plugin.py +1 -1
  9. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/oauth_code.py +1 -0
  10. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/oauth_credentials.py +2 -5
  11. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/okta.py +3 -2
  12. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/pat.py +1 -0
  13. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/webbrowser.py +1 -0
  14. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/workload_identity.py +10 -2
  15. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/config_manager.py +5 -1
  16. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/connection.py +99 -44
  17. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/connection_diagnostic.py +35 -22
  18. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/constants.py +14 -3
  19. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/converter.py +23 -0
  20. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/cursor.py +17 -0
  21. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/errorcode.py +3 -0
  22. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/errors.py +48 -17
  23. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/file_transfer_agent.py +31 -2
  24. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/gcs_storage_client.py +2 -0
  25. snowflake_connector_python-3.17.0/src/snowflake/connector/interval_util.py +17 -0
  26. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/log_configuration.py +6 -4
  27. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +86 -46
  28. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +11 -7
  29. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +1 -1
  30. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/network.py +42 -143
  31. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/ocsp_snowflake.py +21 -6
  32. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/pandas_tools.py +7 -10
  33. snowflake_connector_python-3.17.0/src/snowflake/connector/platform_detection.py +451 -0
  34. snowflake_connector_python-3.17.0/src/snowflake/connector/proxy.py +28 -0
  35. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/result_batch.py +53 -5
  36. snowflake_connector_python-3.17.0/src/snowflake/connector/session_manager.py +539 -0
  37. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/ssl_wrap_socket.py +50 -0
  38. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/storage_client.py +13 -7
  39. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/telemetry.py +2 -0
  40. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/telemetry_oob.py +1 -0
  41. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/token_cache.py +43 -25
  42. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/version.py +1 -1
  43. snowflake_connector_python-3.17.0/src/snowflake/connector/wif_util.py +321 -0
  44. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake_connector_python.egg-info/PKG-INFO +25 -2
  45. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +3 -0
  46. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
  47. snowflake_connector_python-3.16.0/src/snowflake/connector/proxy.py +0 -43
  48. snowflake_connector_python-3.16.0/src/snowflake/connector/wif_util.py +0 -407
  49. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/CONTRIBUTING.md +0 -0
  50. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/LICENSE.txt +0 -0
  51. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/MANIFEST.in +0 -0
  52. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/NOTICE +0 -0
  53. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/README.md +0 -0
  54. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/SECURITY.md +0 -0
  55. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/pyproject.toml +0 -0
  56. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/setup.py +0 -0
  57. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/__init__.py +0 -0
  58. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  59. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/_sql_util.py +0 -0
  60. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/__init__.py +0 -0
  61. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  62. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/default.py +0 -0
  63. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  64. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/keypair.py +0 -0
  65. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  66. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/oauth.py +0 -0
  67. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  68. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  69. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/backoff_policies.py +0 -0
  70. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  71. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/cache.py +0 -0
  72. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/compat.py +0 -0
  73. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  74. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/converter_null.py +0 -0
  75. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  76. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/dbapi.py +0 -0
  77. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/description.py +0 -0
  78. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  79. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/encryption_util.py +0 -0
  80. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  81. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  82. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/feature.py +0 -0
  83. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/file_compression_type.py +0 -0
  84. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/file_lock.py +0 -0
  85. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/file_util.py +0 -0
  86. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  87. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/local_storage_client.py +0 -0
  88. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  89. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  90. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  91. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  92. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  93. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  94. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  95. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  96. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  97. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  98. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  99. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  100. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  101. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  102. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  103. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  104. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  105. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  106. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  107. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  108. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  109. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  110. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  111. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  112. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  113. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  114. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  115. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  116. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  117. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  118. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  119. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  120. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  121. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  122. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  123. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  124. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  125. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  126. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  127. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  128. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  129. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  130. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  131. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  132. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  133. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  134. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  135. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  136. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  137. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  138. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  139. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  140. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  141. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  142. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  143. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  144. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  145. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  146. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  147. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  148. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  149. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  150. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  151. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  152. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  153. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  154. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  155. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  156. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  157. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  158. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  159. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  160. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  161. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  162. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  163. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  164. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  165. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  166. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  167. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  168. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  169. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  170. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  171. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  172. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  173. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  174. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  175. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  176. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  177. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  178. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  179. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/options.py +0 -0
  180. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/py.typed +0 -0
  181. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/result_set.py +0 -0
  182. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  183. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/secret_detector.py +0 -0
  184. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/sf_dirs.py +0 -0
  185. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  186. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/sfdatetime.py +0 -0
  187. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/snow_logging.py +0 -0
  188. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/sqlstate.py +0 -0
  189. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  190. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/test_util.py +0 -0
  191. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/time_util.py +0 -0
  192. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/tool/__init__.py +0 -0
  193. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  194. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  195. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  196. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  197. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/url_util.py +0 -0
  198. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/util_text.py +0 -0
  199. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  200. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  201. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  202. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  203. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  204. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  205. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  206. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  207. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  208. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  209. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  210. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  211. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  212. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  213. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  214. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  215. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  216. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  217. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  218. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  219. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  220. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  221. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  222. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  223. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  224. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  225. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  226. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  227. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  228. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  229. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  230. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  231. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  232. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  233. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  234. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  235. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  236. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  237. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  238. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  239. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  240. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  241. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  242. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  243. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  244. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  245. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  246. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  247. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  248. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  249. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  250. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  251. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  252. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  253. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  254. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  255. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  256. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  257. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  258. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  259. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  260. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  261. {snowflake_connector_python-3.16.0 → snowflake_connector_python-3.17.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,6 +7,29 @@ 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.0(August 16,2025)
11
+ - Added in-band HTTP exception telemetry.
12
+ - Added an `unsafe_skip_file_permissions_check` flag to skip file permission checks on the cache and configuration.
13
+ - Added `APPLICATION_PATH` within `CLIENT_ENVIRONMENT` to distinguish between multiple scripts using the Python Connector in the same environment.
14
+ - Added basic JSON support for Interval types.
15
+ - Added in-band OCSP exception telemetry.
16
+ - Added support for new authentication methods with Workload Identity Federation (WIF).
17
+ - Added the `WORKLOAD_IDENTITY` value for the authenticator type.
18
+ - Added the `workload_identity_provider` and `workload_identity_entra_resource` parameters.
19
+ - Added support for the `use_vectorized_scanner` parameter in the write_pandas function.
20
+ - Added support of proxy setup using connection parameters without emitting environment variables.
21
+ - Added populating of `type_code` in `ResultMetadata` for interval types.
22
+ - Introduced the `snowflake_version` property to the connection.
23
+ - Moved `OAUTH_TYPE` to `CLIENT_ENVIROMENT`.
24
+ - Relaxed the `pyarrow` version constrain; versions >= 19 can now be used.
25
+ - Disabled token caching for OAuth Client Credentials authentication.
26
+ - Fixed OAuth authenticator values.
27
+ - Fixed a bug where a PAT with an external session authenticator was used while `external_session_id` was not provided in `SnowflakeRestful.fetch`.
28
+ - Fixed the case-sensitivity of `Oauth` and `programmatic_access_token` authenticator values.
29
+ - Fixed unclear error messages for incorrect `authenticator` values.
30
+ - Fixed GCS staging by ensuring the endpoint has a scheme.
31
+ - Fixed a bug where time-zoned timestamps fetched as a `pandas.DataFrame` or `pyarrow.Table` would overflow due to unnecessary precision. A clear error will now be raised if an overflow cannot be prevented.
32
+
10
33
  - v3.16.0(July 04,2025)
11
34
  - Bumped numpy dependency from <2.1.0 to <=2.2.4.
12
35
  - Added Windows support for Python 3.13.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 3.16.0
3
+ Version: 3.17.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -72,7 +72,7 @@ Requires-Dist: pytest-xdist; extra == "development"
72
72
  Requires-Dist: pytzdata; extra == "development"
73
73
  Provides-Extra: pandas
74
74
  Requires-Dist: pandas<3.0.0,>=2.1.2; extra == "pandas"
75
- Requires-Dist: pyarrow<19.0.0; extra == "pandas"
75
+ Requires-Dist: pyarrow; extra == "pandas"
76
76
  Provides-Extra: secure-local-storage
77
77
  Requires-Dist: keyring<26.0.0,>=23.1.0; extra == "secure-local-storage"
78
78
  Dynamic: license-file
@@ -86,6 +86,29 @@ 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.0(August 16,2025)
90
+ - Added in-band HTTP exception telemetry.
91
+ - Added an `unsafe_skip_file_permissions_check` flag to skip file permission checks on the cache and configuration.
92
+ - Added `APPLICATION_PATH` within `CLIENT_ENVIRONMENT` to distinguish between multiple scripts using the Python Connector in the same environment.
93
+ - Added basic JSON support for Interval types.
94
+ - Added in-band OCSP exception telemetry.
95
+ - Added support for new authentication methods with Workload Identity Federation (WIF).
96
+ - Added the `WORKLOAD_IDENTITY` value for the authenticator type.
97
+ - Added the `workload_identity_provider` and `workload_identity_entra_resource` parameters.
98
+ - Added support for the `use_vectorized_scanner` parameter in the write_pandas function.
99
+ - Added support of proxy setup using connection parameters without emitting environment variables.
100
+ - Added populating of `type_code` in `ResultMetadata` for interval types.
101
+ - Introduced the `snowflake_version` property to the connection.
102
+ - Moved `OAUTH_TYPE` to `CLIENT_ENVIROMENT`.
103
+ - Relaxed the `pyarrow` version constrain; versions >= 19 can now be used.
104
+ - Disabled token caching for OAuth Client Credentials authentication.
105
+ - Fixed OAuth authenticator values.
106
+ - Fixed a bug where a PAT with an external session authenticator was used while `external_session_id` was not provided in `SnowflakeRestful.fetch`.
107
+ - Fixed the case-sensitivity of `Oauth` and `programmatic_access_token` authenticator values.
108
+ - Fixed unclear error messages for incorrect `authenticator` values.
109
+ - Fixed GCS staging by ensuring the endpoint has a scheme.
110
+ - Fixed a bug where time-zoned timestamps fetched as a `pandas.DataFrame` or `pyarrow.Table` would overflow due to unnecessary precision. A clear error will now be raised if an overflow cannot be prevented.
111
+
89
112
  - v3.16.0(July 04,2025)
90
113
  - Bumped numpy dependency from <2.1.0 to <=2.2.4.
91
114
  - Added Windows support for Python 3.13.
@@ -94,7 +94,7 @@ development =
94
94
  pytzdata
95
95
  pandas =
96
96
  pandas>=2.1.2,<3.0.0
97
- pyarrow<19.0.0
97
+ pyarrow
98
98
  secure-local-storage =
99
99
  keyring>=23.1.0,<26.0.0
100
100
 
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import string
4
4
  from enum import Enum
5
+ from inspect import stack
5
6
  from random import choice
6
7
  from threading import Timer
7
8
  from uuid import UUID
@@ -32,6 +33,15 @@ _PYTHON_SNOWPARK_USE_SCOPED_TEMP_OBJECTS_STRING = (
32
33
 
33
34
  REQUEST_ID_STATEMENT_PARAM_NAME = "requestId"
34
35
 
36
+ # Default server side cap on Degree of Parallelism for file transfer
37
+ # This default value is set to 2^30 (~ 10^9), such that it will not
38
+ # throttle regular sessions.
39
+ _DEFAULT_VALUE_SERVER_DOP_CAP_FOR_FILE_TRANSFER = 1 << 30
40
+ # Variable name of server DoP cap for file transfer
41
+ _VARIABLE_NAME_SERVER_DOP_CAP_FOR_FILE_TRANSFER = (
42
+ "snowflake_server_dop_cap_for_file_transfer"
43
+ )
44
+
35
45
 
36
46
  def generate_random_alphanumeric(length: int = 10) -> str:
37
47
  return "".join(choice(ALPHANUMERIC) for _ in range(length))
@@ -60,6 +70,15 @@ def is_uuid4(str_or_uuid: str | UUID) -> bool:
60
70
  return uuid_str == str_or_uuid
61
71
 
62
72
 
73
+ def _snowflake_max_parallelism_for_file_transfer(connection):
74
+ """Returns the server side cap on max parallelism for file transfer for the given connection."""
75
+ return getattr(
76
+ connection,
77
+ f"_{_VARIABLE_NAME_SERVER_DOP_CAP_FOR_FILE_TRANSFER}",
78
+ _DEFAULT_VALUE_SERVER_DOP_CAP_FOR_FILE_TRANSFER,
79
+ )
80
+
81
+
63
82
  class _TrackedQueryCancellationTimer(Timer):
64
83
  def __init__(self, interval, function, args=None, kwargs=None):
65
84
  super().__init__(interval, function, args, kwargs)
@@ -68,3 +87,12 @@ class _TrackedQueryCancellationTimer(Timer):
68
87
  def run(self):
69
88
  super().run()
70
89
  self.executed = True
90
+
91
+
92
+ def get_application_path() -> str:
93
+ """Get the path of the application script using the connector."""
94
+ try:
95
+ outermost_frame = stack()[-1]
96
+ return outermost_frame.filename
97
+ except Exception:
98
+ return "unknown"
@@ -13,6 +13,7 @@ from pytz import UTC
13
13
 
14
14
  from .constants import PARAMETER_TIMEZONE
15
15
  from .converter import _generate_tzinfo_from_tzoffset
16
+ from .interval_util import interval_year_month_to_string
16
17
 
17
18
  if TYPE_CHECKING:
18
19
  from numpy import datetime64, float64, int64, timedelta64
@@ -164,6 +165,9 @@ class ArrowConverterContext:
164
165
  def DECFLOAT_to_numpy_float64(self, exponent: int, significand: bytes) -> float64:
165
166
  return numpy.float64(self.DECFLOAT_to_decimal(exponent, significand))
166
167
 
168
+ def INTERVAL_YEAR_MONTH_to_str(self, months: int) -> str:
169
+ return interval_year_month_to_string(months)
170
+
167
171
  def INTERVAL_YEAR_MONTH_to_numpy_timedelta(self, months: int) -> timedelta64:
168
172
  return numpy.timedelta64(months, "M")
169
173
 
@@ -17,6 +17,7 @@ from cryptography.hazmat.primitives.serialization import (
17
17
  load_pem_private_key,
18
18
  )
19
19
 
20
+ from .._utils import get_application_path
20
21
  from ..compat import urlencode
21
22
  from ..constants import (
22
23
  DAY_IN_SECONDS,
@@ -51,6 +52,8 @@ from ..network import (
51
52
  PYTHON_CONNECTOR_USER_AGENT,
52
53
  ReauthenticationRequest,
53
54
  )
55
+ from ..platform_detection import detect_platforms
56
+ from ..session_manager import SessionManager
54
57
  from ..sqlstate import SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED
55
58
  from ..token_cache import TokenCache, TokenKey, TokenType
56
59
  from ..version import VERSION
@@ -100,6 +103,8 @@ class Auth:
100
103
  login_timeout: int | None = None,
101
104
  network_timeout: int | None = None,
102
105
  socket_timeout: int | None = None,
106
+ platform_detection_timeout_seconds: float | None = None,
107
+ session_manager: SessionManager | None = None,
103
108
  ):
104
109
  return {
105
110
  "data": {
@@ -110,6 +115,7 @@ class Auth:
110
115
  "LOGIN_NAME": user,
111
116
  "CLIENT_ENVIRONMENT": {
112
117
  "APPLICATION": application,
118
+ "APPLICATION_PATH": get_application_path(),
113
119
  "OS": OPERATING_SYSTEM,
114
120
  "OS_VERSION": PLATFORM,
115
121
  "PYTHON_VERSION": PYTHON_VERSION,
@@ -120,6 +126,10 @@ class Auth:
120
126
  "LOGIN_TIMEOUT": login_timeout,
121
127
  "NETWORK_TIMEOUT": network_timeout,
122
128
  "SOCKET_TIMEOUT": socket_timeout,
129
+ "PLATFORM": detect_platforms(
130
+ platform_detection_timeout_seconds=platform_detection_timeout_seconds,
131
+ session_manager=session_manager,
132
+ ),
123
133
  },
124
134
  },
125
135
  }
@@ -175,6 +185,8 @@ class Auth:
175
185
  self._rest._connection.login_timeout,
176
186
  self._rest._connection._network_timeout,
177
187
  self._rest._connection._socket_timeout,
188
+ self._rest._connection._platform_detection_timeout_seconds,
189
+ session_manager=self._rest.session_manager.clone(use_pooling=False),
178
190
  )
179
191
 
180
192
  body = copy.deepcopy(body_template)
@@ -540,7 +552,9 @@ class Auth:
540
552
 
541
553
  def get_token_cache(self) -> TokenCache:
542
554
  if self._token_cache is None:
543
- self._token_cache = TokenCache.make()
555
+ self._token_cache = TokenCache.make(
556
+ skip_file_permissions_check=self._rest._connection._unsafe_skip_file_permissions_check
557
+ )
544
558
  return self._token_cache
545
559
 
546
560
 
@@ -20,9 +20,12 @@ from ..errorcode import (
20
20
  )
21
21
  from ..errors import Error, ProgrammingError
22
22
  from ..network import OAUTH_AUTHENTICATOR
23
+ from ..proxy import get_proxy_url
23
24
  from ..secret_detector import SecretDetector
24
25
  from ..token_cache import TokenCache, TokenKey, TokenType
25
26
  from ..vendored import urllib3
27
+ from ..vendored.requests.utils import get_environ_proxies, select_proxy
28
+ from ..vendored.urllib3.poolmanager import ProxyManager
26
29
  from .by_plugin import AuthByPlugin, AuthType
27
30
 
28
31
  if TYPE_CHECKING:
@@ -270,7 +273,9 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
270
273
  """
271
274
  body["data"]["AUTHENTICATOR"] = OAUTH_AUTHENTICATOR
272
275
  body["data"]["TOKEN"] = self._access_token
273
- body["data"]["OAUTH_TYPE"] = self._get_oauth_type_id()
276
+ if "CLIENT_ENVIRONMENT" not in body["data"]:
277
+ body["data"]["CLIENT_ENVIRONMENT"] = {}
278
+ body["data"]["CLIENT_ENVIRONMENT"]["OAUTH_TYPE"] = self._get_oauth_type_id()
274
279
 
275
280
  def _do_refresh_token(self, conn: SnowflakeConnection) -> None:
276
281
  """If a refresh token is available exchanges it with a new access token.
@@ -316,8 +321,14 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
316
321
  if self._scope:
317
322
  fields["scope"] = self._scope
318
323
  try:
319
- return urllib3.PoolManager().request_encode_body(
320
- # TODO: use network pool to gain use of proxy settings and so on
324
+ # TODO(SNOW-2229411) Session manager should be used here. It may require additional security validation (since we would transition from PoolManager to requests.Session) and some parameters would be passed implicitly. OAuth token exchange must NOT reuse pooled HTTP sessions. We should create a fresh SessionManager with use_pooling=False for each call.
325
+ proxy_url = self._resolve_proxy_url(conn, self._token_request_url)
326
+ http_client = (
327
+ ProxyManager(proxy_url=proxy_url)
328
+ if proxy_url
329
+ else urllib3.PoolManager()
330
+ )
331
+ return http_client.request_encode_body(
321
332
  "POST",
322
333
  self._token_request_url,
323
334
  encode_multipart=False,
@@ -356,8 +367,12 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
356
367
  connection: SnowflakeConnection,
357
368
  fields: dict[str, str],
358
369
  ) -> (str | None, str | None):
359
- resp = urllib3.PoolManager().request_encode_body(
360
- # TODO: use network pool to gain use of proxy settings and so on
370
+ # TODO(SNOW-2229411) Session manager should be used here. It may require additional security validation (since we would transition from PoolManager to requests.Session) and some parameters would be passed implicitly. Token request must bypass HTTP connection pools.
371
+ proxy_url = self._resolve_proxy_url(connection, self._token_request_url)
372
+ http_client = (
373
+ ProxyManager(proxy_url=proxy_url) if proxy_url else urllib3.PoolManager()
374
+ )
375
+ resp = http_client.request_encode_body(
361
376
  "POST",
362
377
  self._token_request_url,
363
378
  headers=self._create_token_request_headers(),
@@ -398,3 +413,25 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
398
413
  "Accept": "application/json",
399
414
  "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
400
415
  }
416
+
417
+ @staticmethod
418
+ def _resolve_proxy_url(
419
+ connection: SnowflakeConnection, request_url: str
420
+ ) -> str | None:
421
+ # TODO(SNOW-2229411) Session manager should be used instead. It may require additional security validation.
422
+ """Resolve proxy URL from explicit config first, then environment variables."""
423
+ # First try explicit proxy configuration from connection parameters
424
+ proxy_url = get_proxy_url(
425
+ connection.proxy_host,
426
+ connection.proxy_port,
427
+ connection.proxy_user,
428
+ connection.proxy_password,
429
+ )
430
+
431
+ if proxy_url:
432
+ return proxy_url
433
+
434
+ # Fall back to environment variables (HTTP_PROXY, HTTPS_PROXY)
435
+ # Use proper proxy selection that considers the URL scheme
436
+ proxies = get_environ_proxies(request_url)
437
+ return select_proxy(request_url, proxies)
@@ -50,7 +50,7 @@ class AuthType(Enum):
50
50
  ID_TOKEN = "ID_TOKEN"
51
51
  USR_PWD_MFA = "USERNAME_PASSWORD_MFA"
52
52
  OKTA = "OKTA"
53
- PAT = "PROGRAMMATIC_ACCESS_TOKEN'"
53
+ PAT = "PROGRAMMATIC_ACCESS_TOKEN"
54
54
  NO_AUTH = "NO_AUTH"
55
55
  WORKLOAD_IDENTITY = "WORKLOAD_IDENTITY"
56
56
  PAT_WITH_EXTERNAL_SESSION = "PAT_WITH_EXTERNAL_SESSION"
@@ -269,6 +269,7 @@ You can close this window now and go back where you started from.
269
269
  "login. If you can't see it, check existing browser windows, "
270
270
  "or your OS settings. Press CTRL+C to abort and try again..."
271
271
  )
272
+ # TODO(SNOW-2229411) Investigate if Session manager / Http Config should be used here.
272
273
  code, state = (
273
274
  self._receive_authorization_callback(callback_server, connection)
274
275
  if webbrowser.open(authorization_request)
@@ -8,7 +8,6 @@ import logging
8
8
  from typing import TYPE_CHECKING, Any
9
9
 
10
10
  from ..constants import OAUTH_TYPE_CLIENT_CREDENTIALS
11
- from ..token_cache import TokenCache
12
11
  from ._oauth_base import AuthByOAuthBase
13
12
 
14
13
  if TYPE_CHECKING:
@@ -27,8 +26,6 @@ class AuthByOauthCredentials(AuthByOAuthBase):
27
26
  client_secret: str,
28
27
  token_request_url: str,
29
28
  scope: str,
30
- token_cache: TokenCache | None = None,
31
- refresh_token_enabled: bool = False,
32
29
  connection: SnowflakeConnection | None = None,
33
30
  **kwargs,
34
31
  ) -> None:
@@ -38,8 +35,8 @@ class AuthByOauthCredentials(AuthByOAuthBase):
38
35
  client_secret=client_secret,
39
36
  token_request_url=token_request_url,
40
37
  scope=scope,
41
- token_cache=token_cache,
42
- refresh_token_enabled=refresh_token_enabled,
38
+ token_cache=None,
39
+ refresh_token_enabled=False,
43
40
  **kwargs,
44
41
  )
45
42
  self._application = application
@@ -168,6 +168,7 @@ class AuthByOkta(AuthByPlugin):
168
168
  conn._ocsp_mode(),
169
169
  conn.login_timeout,
170
170
  conn._network_timeout,
171
+ session_manager=conn._session_manager.clone(use_pooling=False),
171
172
  )
172
173
 
173
174
  body["data"]["AUTHENTICATOR"] = authenticator
@@ -235,7 +236,7 @@ class AuthByOkta(AuthByPlugin):
235
236
  "username": user,
236
237
  "password": password,
237
238
  }
238
- ret = conn._rest.fetch(
239
+ ret = conn.rest.fetch(
239
240
  "post",
240
241
  token_url,
241
242
  headers,
@@ -285,7 +286,7 @@ class AuthByOkta(AuthByPlugin):
285
286
  HTTP_HEADER_ACCEPT: "*/*",
286
287
  }
287
288
  remaining_timeout = timeout_time - time.time() if timeout_time else None
288
- response_html = conn._rest.fetch(
289
+ response_html = conn.rest.fetch(
289
290
  "get",
290
291
  sso_url,
291
292
  headers,
@@ -13,6 +13,7 @@ class AuthByPAT(AuthByPlugin):
13
13
  super().__init__(**kwargs)
14
14
  self._pat_token: str | None = pat_token
15
15
 
16
+ @property
16
17
  def type_(self) -> AuthType:
17
18
  return AuthType.PAT
18
19
 
@@ -462,6 +462,7 @@ You can close this window now and go back where you started from.
462
462
  conn._rest._connection._ocsp_mode(),
463
463
  conn._rest._connection.login_timeout,
464
464
  conn._rest._connection._network_timeout,
465
+ session_manager=conn.rest.session_manager.clone(use_pooling=False),
465
466
  )
466
467
 
467
468
  body["data"]["AUTHENTICATOR"] = authenticator
@@ -4,6 +4,9 @@ import json
4
4
  import typing
5
5
  from enum import Enum, unique
6
6
 
7
+ if typing.TYPE_CHECKING:
8
+ from snowflake.connector.connection import SnowflakeConnection
9
+
7
10
  from ..network import WORKLOAD_IDENTITY_AUTHENTICATOR
8
11
  from ..wif_util import (
9
12
  AttestationProvider,
@@ -74,10 +77,15 @@ class AuthByWorkloadIdentity(AuthByPlugin):
74
77
  ).value
75
78
  body["data"]["TOKEN"] = self.attestation.credential
76
79
 
77
- def prepare(self, **kwargs: typing.Any) -> None:
80
+ def prepare(
81
+ self, *, conn: SnowflakeConnection | None, **kwargs: typing.Any
82
+ ) -> None:
78
83
  """Fetch the token."""
79
84
  self.attestation = create_attestation(
80
- self.provider, self.entra_resource, self.token
85
+ self.provider,
86
+ self.entra_resource,
87
+ self.token,
88
+ session_manager=conn._session_manager.clone() if conn else None,
81
89
  )
82
90
 
83
91
  def reauthenticate(self, **kwargs: typing.Any) -> dict[str, bool]:
@@ -295,6 +295,7 @@ class ConfigManager:
295
295
 
296
296
  def read_config(
297
297
  self,
298
+ skip_file_permissions_check: bool = False,
298
299
  ) -> None:
299
300
  """Read and cache config file contents.
300
301
 
@@ -310,8 +311,11 @@ class ConfigManager:
310
311
  read_config_file = tomlkit.TOMLDocument()
311
312
 
312
313
  # Read in all of the config slices
314
+ config_slice_options = ConfigSliceOptions(
315
+ check_permissions=not skip_file_permissions_check
316
+ )
313
317
  for filep, sliceoptions, section in itertools.chain(
314
- ((self.file_path, ConfigSliceOptions(), None),),
318
+ ((self.file_path, config_slice_options, None),),
315
319
  self._slices,
316
320
  ):
317
321
  if sliceoptions.only_in_slice: