snowflake-connector-python 3.17.1__tar.gz → 3.17.3__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 (259) hide show
  1. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/DESCRIPTION.md +10 -0
  2. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/PKG-INFO +12 -2
  3. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/setup.cfg +1 -1
  4. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/_auth.py +2 -2
  5. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/okta.py +3 -1
  6. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/webbrowser.py +8 -6
  7. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/workload_identity.py +3 -1
  8. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/config_manager.py +12 -2
  9. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/cursor.py +30 -34
  10. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/platform_detection.py +31 -28
  11. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/session_manager.py +59 -36
  12. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/version.py +1 -1
  13. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/wif_util.py +3 -1
  14. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/PKG-INFO +12 -2
  15. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
  16. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/CONTRIBUTING.md +0 -0
  17. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/LICENSE.txt +0 -0
  18. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/MANIFEST.in +0 -0
  19. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/NOTICE +0 -0
  20. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/README.md +0 -0
  21. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/SECURITY.md +0 -0
  22. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/pyproject.toml +0 -0
  23. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/setup.py +0 -0
  24. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/__init__.py +0 -0
  25. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/_query_context_cache.py +0 -0
  26. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/_sql_util.py +0 -0
  27. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/_utils.py +0 -0
  28. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/arrow_context.py +0 -0
  29. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/__init__.py +0 -0
  30. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/_http_server.py +0 -0
  31. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/_oauth_base.py +0 -0
  32. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/by_plugin.py +0 -0
  33. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/default.py +0 -0
  34. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/idtoken.py +0 -0
  35. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/keypair.py +0 -0
  36. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/no_auth.py +0 -0
  37. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/oauth.py +0 -0
  38. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/oauth_code.py +0 -0
  39. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  40. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/pat.py +0 -0
  41. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  42. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/azure_storage_client.py +0 -0
  43. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/backoff_policies.py +0 -0
  44. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/bind_upload_agent.py +0 -0
  45. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/cache.py +0 -0
  46. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/compat.py +0 -0
  47. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/connection.py +0 -0
  48. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/connection_diagnostic.py +0 -0
  49. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/constants.py +0 -0
  50. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter.py +0 -0
  51. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter_issue23517.py +0 -0
  52. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter_null.py +0 -0
  53. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter_snowsql.py +0 -0
  54. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/dbapi.py +0 -0
  55. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/description.py +0 -0
  56. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  57. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/encryption_util.py +0 -0
  58. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/errorcode.py +0 -0
  59. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/errors.py +0 -0
  60. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  61. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  62. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/feature.py +0 -0
  63. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_compression_type.py +0 -0
  64. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_lock.py +0 -0
  65. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_transfer_agent.py +0 -0
  66. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_util.py +0 -0
  67. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/gcs_storage_client.py +0 -0
  68. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/gzip_decoder.py +0 -0
  69. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/interval_util.py +0 -0
  70. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/local_storage_client.py +0 -0
  71. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/log_configuration.py +0 -0
  72. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  73. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/logging_utils/filters.py +0 -0
  74. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  75. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  76. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  77. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  78. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  79. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  80. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  81. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  82. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  83. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  84. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  85. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  86. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  87. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  88. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  89. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  90. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  91. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  92. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  93. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  94. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  95. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  96. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  97. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  98. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  99. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  100. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  101. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  102. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  103. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  104. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  105. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  106. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  107. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  108. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  109. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  110. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  111. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  112. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  113. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  114. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  115. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  116. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  117. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  118. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  119. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  120. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  121. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  122. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  123. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  124. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  125. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  126. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  127. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  128. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  129. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  130. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  131. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  132. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  133. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  134. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  135. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  136. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  137. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  138. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  139. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  140. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  141. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  142. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  143. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  144. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  145. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  146. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  147. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  148. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  149. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  150. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  151. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  152. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  153. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  154. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  155. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  156. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  157. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  158. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  159. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  160. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  161. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  162. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  163. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  164. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  165. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/network.py +0 -0
  166. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  167. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  168. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/options.py +0 -0
  169. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/pandas_tools.py +0 -0
  170. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/proxy.py +0 -0
  171. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/py.typed +0 -0
  172. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/result_batch.py +0 -0
  173. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/result_set.py +0 -0
  174. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/s3_storage_client.py +0 -0
  175. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/secret_detector.py +0 -0
  176. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sf_dirs.py +0 -0
  177. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sfbinaryformat.py +0 -0
  178. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sfdatetime.py +0 -0
  179. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/snow_logging.py +0 -0
  180. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sqlstate.py +0 -0
  181. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  182. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  183. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/storage_client.py +0 -0
  184. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/telemetry.py +0 -0
  185. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/telemetry_oob.py +0 -0
  186. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/test_util.py +0 -0
  187. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/time_util.py +0 -0
  188. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/token_cache.py +0 -0
  189. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/__init__.py +0 -0
  190. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/dump_certs.py +0 -0
  191. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  192. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  193. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/probe_connection.py +0 -0
  194. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/url_util.py +0 -0
  195. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/util_text.py +0 -0
  196. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/__init__.py +0 -0
  197. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  198. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  199. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  200. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  201. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  202. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/api.py +0 -0
  203. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  204. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  205. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  206. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  207. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  208. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/help.py +0 -0
  209. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  210. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/models.py +0 -0
  211. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  212. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  213. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  214. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  215. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  216. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  217. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  218. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  219. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  220. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  221. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  222. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  223. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  224. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  225. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  226. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  227. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  228. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  229. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  230. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  231. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  232. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  233. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  234. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  235. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  236. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  237. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  238. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  239. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  240. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  241. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  242. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  243. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  244. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  245. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  246. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  247. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  248. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  249. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  250. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  251. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  252. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  253. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  254. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  255. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  256. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  257. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  258. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  259. {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,6 +7,16 @@ https://docs.snowflake.com/
7
7
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
8
8
 
9
9
  # Release Notes
10
+ - v3.17.3(September 02,2025)
11
+ - Enhanced configuration file permission warning messages.
12
+ - 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.
13
+ - Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
14
+ - This addresses the issue with `create_dataframe` call on Snowpark
15
+
16
+ - v3.17.2(August 23,2025)
17
+ - Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
18
+ - Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
19
+
10
20
  - v3.17.1(August 17,2025)
11
21
  - Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
12
22
  - Namespace `snowlake` reverted back to non-module.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 3.17.1
3
+ Version: 3.17.3
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -66,7 +66,7 @@ Requires-Dist: pendulum!=2.1.1; extra == "development"
66
66
  Requires-Dist: pexpect; extra == "development"
67
67
  Requires-Dist: pytest<7.5.0; extra == "development"
68
68
  Requires-Dist: pytest-cov; extra == "development"
69
- Requires-Dist: pytest-rerunfailures; extra == "development"
69
+ Requires-Dist: pytest-rerunfailures<16.0; extra == "development"
70
70
  Requires-Dist: pytest-timeout; extra == "development"
71
71
  Requires-Dist: pytest-xdist; extra == "development"
72
72
  Requires-Dist: pytzdata; extra == "development"
@@ -86,6 +86,16 @@ https://docs.snowflake.com/
86
86
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
87
87
 
88
88
  # Release Notes
89
+ - v3.17.3(September 02,2025)
90
+ - Enhanced configuration file permission warning messages.
91
+ - 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.
92
+ - Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
93
+ - This addresses the issue with `create_dataframe` call on Snowpark
94
+
95
+ - v3.17.2(August 23,2025)
96
+ - Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
97
+ - Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
98
+
89
99
  - v3.17.1(August 17,2025)
90
100
  - Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
91
101
  - 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())
@@ -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):
@@ -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():
@@ -16,7 +16,7 @@ from .vendored.requests import Response, Session
16
16
  from .vendored.requests.adapters import BaseAdapter, HTTPAdapter
17
17
  from .vendored.requests.exceptions import InvalidProxyURL
18
18
  from .vendored.requests.utils import prepend_scheme_if_needed, select_proxy
19
- from .vendored.urllib3 import PoolManager
19
+ from .vendored.urllib3 import PoolManager, Retry
20
20
  from .vendored.urllib3.poolmanager import ProxyManager
21
21
  from .vendored.urllib3.util.url import parse_url
22
22
 
@@ -119,7 +119,7 @@ class HttpConfig:
119
119
  default_factory=ProxySupportAdapterFactory
120
120
  )
121
121
  use_pooling: bool = True
122
- max_retries: int | None = REQUESTS_RETRY
122
+ max_retries: int | Retry | None = REQUESTS_RETRY
123
123
  proxy_host: str | None = None
124
124
  proxy_port: str | None = None
125
125
  proxy_user: str | None = None
@@ -129,6 +129,22 @@ class HttpConfig:
129
129
  """Return a new HttpConfig with overrides applied."""
130
130
  return replace(self, **overrides)
131
131
 
132
+ def get_adapter(self, **override_adapter_factory_kwargs) -> HTTPAdapter:
133
+ # We pass here only chosen attributes as kwargs to make the arguments received by the factory as compliant with the HttpAdapter constructor interface as possible.
134
+ # We could consider passing the whole HttpConfig as kwarg to the factory if necessary in the future.
135
+ attributes_for_adapter_factory = frozenset(
136
+ {
137
+ "max_retries",
138
+ }
139
+ )
140
+
141
+ self_kwargs_for_adapter_factory = {
142
+ attr_name: getattr(self, attr_name)
143
+ for attr_name in attributes_for_adapter_factory
144
+ }
145
+ self_kwargs_for_adapter_factory.update(override_adapter_factory_kwargs)
146
+ return self.adapter_factory(**self_kwargs_for_adapter_factory)
147
+
132
148
 
133
149
  class SessionPool:
134
150
  """
@@ -185,6 +201,40 @@ class SessionPool:
185
201
  self._idle_sessions.clear()
186
202
 
187
203
 
204
+ class _ConfigDirectAccessMixin(abc.ABC):
205
+ @property
206
+ @abc.abstractmethod
207
+ def config(self) -> HttpConfig: ...
208
+
209
+ @config.setter
210
+ @abc.abstractmethod
211
+ def config(self, value) -> HttpConfig: ...
212
+
213
+ @property
214
+ def use_pooling(self) -> bool:
215
+ return self.config.use_pooling
216
+
217
+ @use_pooling.setter
218
+ def use_pooling(self, value: bool) -> None:
219
+ self.config = self.config.copy_with(use_pooling=value)
220
+
221
+ @property
222
+ def adapter_factory(self) -> Callable[..., HTTPAdapter]:
223
+ return self.config.adapter_factory
224
+
225
+ @adapter_factory.setter
226
+ def adapter_factory(self, value: Callable[..., HTTPAdapter]) -> None:
227
+ self.config = self.config.copy_with(adapter_factory=value)
228
+
229
+ @property
230
+ def max_retries(self) -> Retry | int:
231
+ return self.config.max_retries
232
+
233
+ @max_retries.setter
234
+ def max_retries(self, value: Retry | int) -> None:
235
+ self.config = self.config.copy_with(max_retries=value)
236
+
237
+
188
238
  class _RequestVerbsUsingSessionMixin(abc.ABC):
189
239
  """
190
240
  Mixin that provides HTTP methods (get, post, put, etc.) mirroring requests.Session, maintaining their default argument behavior (e.g., HEAD uses allow_redirects=False).
@@ -295,7 +345,7 @@ class _RequestVerbsUsingSessionMixin(abc.ABC):
295
345
  return session.delete(url, headers=headers, timeout=timeout, **kwargs)
296
346
 
297
347
 
298
- class SessionManager(_RequestVerbsUsingSessionMixin):
348
+ class SessionManager(_RequestVerbsUsingSessionMixin, _ConfigDirectAccessMixin):
299
349
  """
300
350
  Central HTTP session manager that handles all external requests from the Snowflake driver.
301
351
 
@@ -362,22 +412,6 @@ class SessionManager(_RequestVerbsUsingSessionMixin):
362
412
  self._cfg.proxy_password,
363
413
  )
364
414
 
365
- @property
366
- def use_pooling(self) -> bool:
367
- return self._cfg.use_pooling
368
-
369
- @use_pooling.setter
370
- def use_pooling(self, value: bool) -> None:
371
- self._cfg = self._cfg.copy_with(use_pooling=value)
372
-
373
- @property
374
- def adapter_factory(self) -> Callable[..., HTTPAdapter]:
375
- return self._cfg.adapter_factory
376
-
377
- @adapter_factory.setter
378
- def adapter_factory(self, value: Callable[..., HTTPAdapter]) -> None:
379
- self._cfg = self._cfg.copy_with(adapter_factory=value)
380
-
381
415
  @property
382
416
  def sessions_map(self) -> dict[str, SessionPool]:
383
417
  return self._sessions_map
@@ -403,9 +437,7 @@ class SessionManager(_RequestVerbsUsingSessionMixin):
403
437
  def _mount_adapters(self, session: requests.Session) -> None:
404
438
  try:
405
439
  # Its important that each separate session manager creates its own adapters - because they are storing internally PoolManagers - which shouldn't be reused if not in scope of the same adapter.
406
- adapter = self._cfg.adapter_factory(
407
- max_retries=self._cfg.max_retries or REQUESTS_RETRY
408
- )
440
+ adapter = self._cfg.get_adapter()
409
441
  if adapter is not None:
410
442
  session.mount("http://", adapter)
411
443
  session.mount("https://", adapter)
@@ -473,27 +505,18 @@ class SessionManager(_RequestVerbsUsingSessionMixin):
473
505
 
474
506
  def clone(
475
507
  self,
476
- *,
477
- use_pooling: bool | None = None,
478
- adapter_factory: AdapterFactory | None = None,
508
+ **http_config_overrides,
479
509
  ) -> SessionManager:
480
510
  """Return a new *stateless* SessionManager sharing this instance’s config.
481
511
 
482
- "Shallow" means the configuration object (HttpConfig) is reused as-is,
512
+ "Shallow clone" - the configuration object (HttpConfig) is reused as-is,
483
513
  while *stateful* aspects such as the per-host SessionPool mapping are
484
514
  reset, so the two managers do not share live `requests.Session`
485
515
  objects.
486
- Optional *use_pooling* / *adapter_factory* overrides create a modified
487
- copy of the config before instantiation.
516
+ Optional kwargs (e.g. *use_pooling* / *adapter_factory* / max_retries etc.) - overrides to create a modified
517
+ copy of the HttpConfig before instantiation.
488
518
  """
489
-
490
- overrides: dict[str, Any] = {}
491
- if use_pooling is not None:
492
- overrides["use_pooling"] = use_pooling
493
- if adapter_factory is not None:
494
- overrides["adapter_factory"] = adapter_factory
495
-
496
- return SessionManager.from_config(self._cfg, **overrides)
519
+ return SessionManager.from_config(self._cfg, **http_config_overrides)
497
520
 
498
521
  def __getstate__(self):
499
522
  state = self.__dict__.copy()
@@ -1,3 +1,3 @@
1
1
  # Update this for the versions
2
2
  # Don't change the forth version number from None
3
- VERSION = (3, 17, 1, None)
3
+ VERSION = (3, 17, 3, None)
@@ -303,7 +303,9 @@ def create_attestation(
303
303
  """
304
304
  entra_resource = entra_resource or DEFAULT_ENTRA_SNOWFLAKE_RESOURCE
305
305
  session_manager = (
306
- session_manager.clone() if session_manager else SessionManager(use_pooling=True)
306
+ session_manager.clone()
307
+ if session_manager
308
+ else SessionManager(use_pooling=True, max_retries=0)
307
309
  )
308
310
 
309
311
  if provider == AttestationProvider.AWS:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 3.17.1
3
+ Version: 3.17.3
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -66,7 +66,7 @@ Requires-Dist: pendulum!=2.1.1; extra == "development"
66
66
  Requires-Dist: pexpect; extra == "development"
67
67
  Requires-Dist: pytest<7.5.0; extra == "development"
68
68
  Requires-Dist: pytest-cov; extra == "development"
69
- Requires-Dist: pytest-rerunfailures; extra == "development"
69
+ Requires-Dist: pytest-rerunfailures<16.0; extra == "development"
70
70
  Requires-Dist: pytest-timeout; extra == "development"
71
71
  Requires-Dist: pytest-xdist; extra == "development"
72
72
  Requires-Dist: pytzdata; extra == "development"
@@ -86,6 +86,16 @@ https://docs.snowflake.com/
86
86
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
87
87
 
88
88
  # Release Notes
89
+ - v3.17.3(September 02,2025)
90
+ - Enhanced configuration file permission warning messages.
91
+ - 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.
92
+ - Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
93
+ - This addresses the issue with `create_dataframe` call on Snowpark
94
+
95
+ - v3.17.2(August 23,2025)
96
+ - Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
97
+ - Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
98
+
89
99
  - v3.17.1(August 17,2025)
90
100
  - Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
91
101
  - Namespace `snowlake` reverted back to non-module.
@@ -29,7 +29,7 @@ pendulum!=2.1.1
29
29
  pexpect
30
30
  pytest<7.5.0
31
31
  pytest-cov
32
- pytest-rerunfailures
32
+ pytest-rerunfailures<16.0
33
33
  pytest-timeout
34
34
  pytest-xdist
35
35
  pytzdata