snowflake-connector-python 3.14.1__tar.gz → 3.15.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 (254) hide show
  1. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/DESCRIPTION.md +11 -2
  2. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/PKG-INFO +14 -5
  3. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/setup.cfg +2 -2
  4. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/oauth_code.py +4 -0
  5. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/connection.py +47 -30
  6. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/connection_diagnostic.py +1 -1
  7. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/errorcode.py +1 -0
  8. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/ocsp_asn1crypto.py +10 -3
  9. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/tool/dump_ocsp_response.py +38 -21
  10. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/version.py +1 -1
  11. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake_connector_python.egg-info/PKG-INFO +14 -5
  12. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake_connector_python.egg-info/requires.txt +2 -2
  13. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/CONTRIBUTING.md +0 -0
  14. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/LICENSE.txt +0 -0
  15. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/MANIFEST.in +0 -0
  16. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/NOTICE +0 -0
  17. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/README.md +0 -0
  18. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/SECURITY.md +0 -0
  19. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/pyproject.toml +0 -0
  20. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/setup.py +0 -0
  21. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/__init__.py +0 -0
  22. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  23. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/_sql_util.py +0 -0
  24. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/_utils.py +0 -0
  25. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/arrow_context.py +0 -0
  26. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/__init__.py +0 -0
  27. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/_auth.py +0 -0
  28. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  29. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
  30. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  31. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/default.py +0 -0
  32. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  33. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/keypair.py +0 -0
  34. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  35. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/oauth.py +0 -0
  36. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  37. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/okta.py +0 -0
  38. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/pat.py +0 -0
  39. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  40. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
  41. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
  42. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  43. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/backoff_policies.py +0 -0
  44. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  45. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/cache.py +0 -0
  46. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/compat.py +0 -0
  47. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/config_manager.py +0 -0
  48. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/constants.py +0 -0
  49. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/converter.py +0 -0
  50. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  51. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/converter_null.py +0 -0
  52. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  53. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/cursor.py +0 -0
  54. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/dbapi.py +0 -0
  55. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/description.py +0 -0
  56. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  57. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/encryption_util.py +0 -0
  58. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/errors.py +0 -0
  59. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  60. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  61. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/feature.py +0 -0
  62. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/file_compression_type.py +0 -0
  63. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/file_lock.py +0 -0
  64. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
  65. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/file_util.py +0 -0
  66. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  67. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  68. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/local_storage_client.py +0 -0
  69. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/log_configuration.py +0 -0
  70. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  71. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  72. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  73. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  74. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  75. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  76. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  77. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  78. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  79. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  80. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  81. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  82. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  83. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  84. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  85. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  86. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  87. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  88. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  89. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  90. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  91. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  92. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  93. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  94. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  95. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  96. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  97. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  98. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  99. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  100. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  101. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  102. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  103. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  104. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  105. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  106. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  107. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  108. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  109. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  110. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  111. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  112. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  113. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  114. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  115. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  116. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  117. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  118. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  119. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  120. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  121. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  122. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  123. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  124. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  125. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  126. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  127. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  128. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  129. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  130. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  131. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  132. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  133. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  134. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  135. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  136. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  137. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  138. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  139. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  140. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  141. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  142. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  143. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  144. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  145. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  146. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  147. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  148. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  149. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  150. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  151. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  152. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  153. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  154. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  155. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  156. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  157. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  158. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  159. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  160. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  161. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/network.py +0 -0
  162. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  163. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/options.py +0 -0
  164. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/pandas_tools.py +0 -0
  165. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/proxy.py +0 -0
  166. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/py.typed +0 -0
  167. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/result_batch.py +0 -0
  168. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/result_set.py +0 -0
  169. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  170. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/secret_detector.py +0 -0
  171. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/sf_dirs.py +0 -0
  172. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  173. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/sfdatetime.py +0 -0
  174. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/snow_logging.py +0 -0
  175. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/sqlstate.py +0 -0
  176. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  177. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  178. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/storage_client.py +0 -0
  179. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/telemetry.py +0 -0
  180. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  181. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/test_util.py +0 -0
  182. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/time_util.py +0 -0
  183. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/token_cache.py +0 -0
  184. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/tool/__init__.py +0 -0
  185. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  186. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  187. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  188. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/url_util.py +0 -0
  189. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/util_text.py +0 -0
  190. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  191. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  192. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  193. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  194. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  195. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  196. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  197. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  198. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  199. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  200. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  201. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  202. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  203. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  204. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  205. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  206. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  207. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  208. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  209. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  210. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  211. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  212. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  213. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  214. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  215. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  216. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  217. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  218. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  219. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  220. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  221. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  222. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  223. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  224. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  225. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  226. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  227. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  228. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  229. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  230. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  231. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  232. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  233. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  234. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  235. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  236. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  237. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  238. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  239. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  240. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  241. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  242. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  243. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  244. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  245. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  246. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  247. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  248. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  249. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake/connector/wif_util.py +0 -0
  250. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  251. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  252. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  253. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  254. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.15.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,8 +7,17 @@ https://docs.snowflake.com/
7
7
  Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
8
8
 
9
9
  # Release Notes
10
- - v3.15(TBD)
11
- -
10
+ - v3.15.0(Apr 29,2025)
11
+ - Bumped up min boto and botocore version to 1.24.
12
+ - OCSP: terminate certificates chain traversal if a trusted certificate already reached.
13
+ - Added new authentication methods support for programmatic access tokens (PATs), OAuth 2.0 Authorization Code Flow, OAuth 2.0 Client Credentials Flow, and OAuth Token caching.
14
+ - For OAuth 2.0 Authorization Code Flow:
15
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_authorization_url`, `oauth_token_request_url`, `oauth_redirect_uri`, `oauth_scope`, `oauth_disable_pkce`, `oauth_enable_refresh_tokens` and `oauth_enable_single_use_refresh_tokens` parameters.
16
+ - Added the `OAUTH_AUTHORIZATION_CODE` value for the parameter authenticator.
17
+ - For OAuth 2.0 Client Credentials Flow:
18
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_token_request_url`, and `oauth_scope` parameters.
19
+ - Added the `OAUTH_CLIENT_CREDENTIALS` value for the parameter authenticator.
20
+ - For OAuth Token caching: Passing a username to driver configuration is required, and the `client_store_temporary_credential property` is to be set to `true`.
12
21
 
13
22
  - v3.14.1(April 21, 2025)
14
23
  - Added support for Python 3.13.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 3.14.1
3
+ Version: 3.15.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -39,8 +39,8 @@ Description-Content-Type: text/markdown
39
39
  License-File: LICENSE.txt
40
40
  License-File: NOTICE
41
41
  Requires-Dist: asn1crypto<2.0.0,>0.24.0
42
- Requires-Dist: boto3>=1.0
43
- Requires-Dist: botocore>=1.0
42
+ Requires-Dist: boto3>=1.24
43
+ Requires-Dist: botocore>=1.24
44
44
  Requires-Dist: cffi<2.0.0,>=1.9
45
45
  Requires-Dist: cryptography>=3.1.0
46
46
  Requires-Dist: pyOpenSSL<26.0.0,>=22.0.0
@@ -86,8 +86,17 @@ 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.15(TBD)
90
- -
89
+ - v3.15.0(Apr 29,2025)
90
+ - Bumped up min boto and botocore version to 1.24.
91
+ - OCSP: terminate certificates chain traversal if a trusted certificate already reached.
92
+ - Added new authentication methods support for programmatic access tokens (PATs), OAuth 2.0 Authorization Code Flow, OAuth 2.0 Client Credentials Flow, and OAuth Token caching.
93
+ - For OAuth 2.0 Authorization Code Flow:
94
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_authorization_url`, `oauth_token_request_url`, `oauth_redirect_uri`, `oauth_scope`, `oauth_disable_pkce`, `oauth_enable_refresh_tokens` and `oauth_enable_single_use_refresh_tokens` parameters.
95
+ - Added the `OAUTH_AUTHORIZATION_CODE` value for the parameter authenticator.
96
+ - For OAuth 2.0 Client Credentials Flow:
97
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_token_request_url`, and `oauth_scope` parameters.
98
+ - Added the `OAUTH_CLIENT_CREDENTIALS` value for the parameter authenticator.
99
+ - For OAuth Token caching: Passing a username to driver configuration is required, and the `client_store_temporary_credential property` is to be set to `true`.
91
100
 
92
101
  - v3.14.1(April 21, 2025)
93
102
  - Added support for Python 3.13.
@@ -44,8 +44,8 @@ python_requires = >=3.9
44
44
  packages = find_namespace:
45
45
  install_requires =
46
46
  asn1crypto>0.24.0,<2.0.0
47
- boto3>=1.0
48
- botocore>=1.0
47
+ boto3>=1.24
48
+ botocore>=1.24
49
49
  cffi>=1.9,<2.0.0
50
50
  cryptography>=3.1.0
51
51
  pyOpenSSL>=22.0.0,<26.0.0
@@ -58,6 +58,7 @@ class AuthByOauthCode(AuthByOAuthBase):
58
58
  token_cache: TokenCache | None = None,
59
59
  refresh_token_enabled: bool = False,
60
60
  external_browser_timeout: int | None = None,
61
+ enable_single_use_refresh_tokens: bool = False,
61
62
  **kwargs,
62
63
  ) -> None:
63
64
  super().__init__(
@@ -81,6 +82,7 @@ class AuthByOauthCode(AuthByOAuthBase):
81
82
  logger.debug("oauth pkce is going to be used")
82
83
  self._verifier: str | None = None
83
84
  self._external_browser_timeout = external_browser_timeout
85
+ self._enable_single_use_refresh_tokens = enable_single_use_refresh_tokens
84
86
 
85
87
  def _get_oauth_type_id(self) -> str:
86
88
  return OAUTH_TYPE_AUTHORIZATION_CODE
@@ -296,6 +298,8 @@ You can close this window now and go back where you started from.
296
298
  "code": code,
297
299
  "redirect_uri": callback_server.url,
298
300
  }
301
+ if self._enable_single_use_refresh_tokens:
302
+ fields["enable_single_use_refresh_tokens"] = "true"
299
303
  if self._pkce_enabled:
300
304
  assert self._verifier is not None
301
305
  fields["code_verifier"] = self._verifier
@@ -2,7 +2,6 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  import atexit
5
- import collections.abc
6
5
  import logging
7
6
  import os
8
7
  import pathlib
@@ -94,6 +93,7 @@ from .errorcode import (
94
93
  ER_INVALID_WIF_SETTINGS,
95
94
  ER_NO_ACCOUNT_NAME,
96
95
  ER_NO_CLIENT_ID,
96
+ ER_NO_CLIENT_SECRET,
97
97
  ER_NO_NUMPY,
98
98
  ER_NO_PASSWORD,
99
99
  ER_NO_USER,
@@ -346,11 +346,20 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
346
346
  str,
347
347
  # SNOW-1825621: OAUTH implementation
348
348
  ),
349
- "oauth_security_features": (
350
- ("pkce",),
351
- collections.abc.Iterable, # of strings
349
+ "oauth_disable_pkce": (
350
+ False,
351
+ bool,
352
352
  # SNOW-1825621: OAUTH PKCE
353
353
  ),
354
+ "oauth_enable_refresh_tokens": (
355
+ False,
356
+ bool,
357
+ ),
358
+ "oauth_enable_single_use_refresh_tokens": (
359
+ False,
360
+ bool,
361
+ # Client-side opt-in to single-use refresh tokens.
362
+ ),
354
363
  "check_arrow_conversion_error_on_every_column": (
355
364
  True,
356
365
  bool,
@@ -838,21 +847,6 @@ class SnowflakeConnection:
838
847
  def unsafe_file_write(self, value: bool) -> None:
839
848
  self._unsafe_file_write = value
840
849
 
841
- class _OAuthSecurityFeatures(NamedTuple):
842
- pkce_enabled: bool
843
- refresh_token_enabled: bool
844
-
845
- @property
846
- def oauth_security_features(self) -> _OAuthSecurityFeatures:
847
- features = self._oauth_security_features
848
- if isinstance(features, str):
849
- features = features.split(" ")
850
- features = [feat.lower() for feat in features]
851
- return self._OAuthSecurityFeatures(
852
- pkce_enabled="pkce" in features,
853
- refresh_token_enabled="refresh_token" in features,
854
- )
855
-
856
850
  @property
857
851
  def check_arrow_conversion_error_on_every_column(self) -> bool:
858
852
  return self._check_arrow_conversion_error_on_every_column
@@ -1210,9 +1204,7 @@ class SnowflakeConnection:
1210
1204
  backoff_generator=self._backoff_generator,
1211
1205
  )
1212
1206
  elif self._authenticator == OAUTH_AUTHORIZATION_CODE:
1213
- self._check_experimental_authentication_flag()
1214
- self._check_oauth_required_parameters()
1215
- features = self.oauth_security_features
1207
+ self._check_oauth_parameters()
1216
1208
  if self._role and (self._oauth_scope == ""):
1217
1209
  # if role is known then let's inject it into scope
1218
1210
  self._oauth_scope = _OAUTH_DEFAULT_SCOPE.format(role=self._role)
@@ -1228,19 +1220,18 @@ class SnowflakeConnection:
1228
1220
  ),
1229
1221
  redirect_uri=self._oauth_redirect_uri,
1230
1222
  scope=self._oauth_scope,
1231
- pkce_enabled=features.pkce_enabled,
1223
+ pkce_enabled=not self._oauth_disable_pkce,
1232
1224
  token_cache=(
1233
1225
  auth.get_token_cache()
1234
1226
  if self._client_store_temporary_credential
1235
1227
  else None
1236
1228
  ),
1237
- refresh_token_enabled=features.refresh_token_enabled,
1229
+ refresh_token_enabled=self._oauth_enable_refresh_tokens,
1238
1230
  external_browser_timeout=self._external_browser_timeout,
1231
+ enable_single_use_refresh_tokens=self._oauth_enable_single_use_refresh_tokens,
1239
1232
  )
1240
1233
  elif self._authenticator == OAUTH_CLIENT_CREDENTIALS:
1241
- self._check_experimental_authentication_flag()
1242
- self._check_oauth_required_parameters()
1243
- features = self.oauth_security_features
1234
+ self._check_oauth_parameters()
1244
1235
  if self._role and (self._oauth_scope == ""):
1245
1236
  # if role is known then let's inject it into scope
1246
1237
  self._oauth_scope = _OAUTH_DEFAULT_SCOPE.format(role=self._role)
@@ -1257,7 +1248,7 @@ class SnowflakeConnection:
1257
1248
  if self._client_store_temporary_credential
1258
1249
  else None
1259
1250
  ),
1260
- refresh_token_enabled=features.refresh_token_enabled,
1251
+ refresh_token_enabled=self._oauth_enable_refresh_tokens,
1261
1252
  )
1262
1253
  elif self._authenticator == USR_PWD_MFA_AUTHENTICATOR:
1263
1254
  self._session_parameters[PARAMETER_CLIENT_REQUEST_MFA_TOKEN] = (
@@ -2245,7 +2236,7 @@ class SnowflakeConnection:
2245
2236
  },
2246
2237
  )
2247
2238
 
2248
- def _check_oauth_required_parameters(self) -> None:
2239
+ def _check_oauth_parameters(self) -> None:
2249
2240
  if self._oauth_client_id is None:
2250
2241
  Error.errorhandler_wrapper(
2251
2242
  self,
@@ -2263,6 +2254,32 @@ class SnowflakeConnection:
2263
2254
  ProgrammingError,
2264
2255
  {
2265
2256
  "msg": "Oauth code flow requirement 'client_secret' is empty",
2266
- "errno": ER_NO_CLIENT_ID,
2257
+ "errno": ER_NO_CLIENT_SECRET,
2258
+ },
2259
+ )
2260
+ if (
2261
+ self._oauth_authorization_url
2262
+ and not self._oauth_authorization_url.startswith("https://")
2263
+ ):
2264
+ Error.errorhandler_wrapper(
2265
+ self,
2266
+ None,
2267
+ ProgrammingError,
2268
+ {
2269
+ "msg": "OAuth supports only authorization urls that use 'https' scheme",
2270
+ "errno": ER_INVALID_VALUE,
2271
+ },
2272
+ )
2273
+ if self._oauth_redirect_uri and not (
2274
+ self._oauth_redirect_uri.startswith("http://")
2275
+ or self._oauth_redirect_uri.startswith("https://")
2276
+ ):
2277
+ Error.errorhandler_wrapper(
2278
+ self,
2279
+ None,
2280
+ ProgrammingError,
2281
+ {
2282
+ "msg": "OAuth supports only authorization urls that use 'http(s)' scheme",
2283
+ "errno": ER_INVALID_VALUE,
2267
2284
  },
2268
2285
  )
@@ -579,7 +579,7 @@ class ConnectionDiagnostic:
579
579
  cert_reqs=cert_reqs,
580
580
  )
581
581
  resp = http.request(
582
- "GET", "https://nonexistentdomain.invalidtld", timeout=10.0
582
+ "GET", "https://nonexistentdomain.invalid", timeout=10.0
583
583
  )
584
584
 
585
585
  # squid does not throw exception. Check HTML
@@ -34,6 +34,7 @@ ER_OAUTH_SERVER_TIMEOUT = 251016
34
34
  ER_INVALID_WIF_SETTINGS = 251017
35
35
  ER_WIF_CREDENTIALS_NOT_FOUND = 251018
36
36
  ER_EXPERIMENTAL_AUTHENTICATION_NOT_SUPPORTED = 251019
37
+ ER_NO_CLIENT_SECRET = 251020
37
38
 
38
39
  # cursor
39
40
  ER_FAILED_TO_REWRITE_MULTI_ROW_INSERT = 252001
@@ -394,15 +394,22 @@ class SnowflakeOCSPAsn1Crypto(SnowflakeOCSP):
394
394
  from OpenSSL.crypto import FILETYPE_ASN1, dump_certificate
395
395
 
396
396
  cert_map = OrderedDict()
397
- logger.debug("# of certificates: %s", len(connection.get_peer_cert_chain()))
398
-
399
- for cert_openssl in connection.get_peer_cert_chain():
397
+ cert_chain = connection.get_peer_cert_chain()
398
+ logger.debug("# of certificates: %s", len(cert_chain))
399
+ self._lazy_read_ca_bundle()
400
+ for cert_openssl in cert_chain:
400
401
  cert_der = dump_certificate(FILETYPE_ASN1, cert_openssl)
401
402
  cert = Certificate.load(cert_der)
402
403
  logger.debug(
403
404
  "subject: %s, issuer: %s", cert.subject.native, cert.issuer.native
404
405
  )
405
406
  cert_map[cert.subject.sha256] = cert
407
+ if cert.issuer.sha256 in SnowflakeOCSP.ROOT_CERTIFICATES_DICT:
408
+ logger.debug(
409
+ "A trusted root certificate found: %s, stopping chain traversal here",
410
+ cert.subject.native,
411
+ )
412
+ break
406
413
 
407
414
  return self.create_pair_issuer_subject(cert_map)
408
415
 
@@ -1,38 +1,55 @@
1
1
  #!/usr/bin/env python
2
2
  from __future__ import annotations
3
3
 
4
+ import logging
5
+ import sys
4
6
  import time
5
- from os import path
7
+ from argparse import ArgumentParser, Namespace
6
8
  from time import gmtime, strftime
7
9
 
8
10
  from asn1crypto import ocsp as asn1crypto_ocsp
9
11
 
10
12
  from snowflake.connector.compat import urlsplit
11
13
  from snowflake.connector.ocsp_asn1crypto import SnowflakeOCSPAsn1Crypto as SFOCSP
14
+ from snowflake.connector.ocsp_snowflake import OCSPTelemetryData
12
15
  from snowflake.connector.ssl_wrap_socket import _openssl_connect
13
16
 
14
17
 
18
+ def _parse_args() -> Namespace:
19
+ parser = ArgumentParser(
20
+ prog="dump_ocsp_response",
21
+ description="Dump OCSP Response for the URLs (an internal tool).",
22
+ )
23
+ parser.add_argument(
24
+ "-o",
25
+ "--output-file",
26
+ required=False,
27
+ help="Dump output file",
28
+ type=str,
29
+ default=None,
30
+ )
31
+ parser.add_argument(
32
+ "--log-level",
33
+ required=False,
34
+ help="Log level",
35
+ choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
36
+ )
37
+ parser.add_argument("--log-file", required=False, help="Log file", default=None)
38
+ parser.add_argument("urls", nargs="+", help="URLs to dump OCSP Response for")
39
+ return parser.parse_args()
40
+
41
+
15
42
  def main() -> None:
16
43
  """Internal Tool: OCSP response dumper."""
17
-
18
- def help() -> None:
19
- print("Dump OCSP Response for the URL. ")
20
- print(
21
- """
22
- Usage: {} <url> [<url> ...]
23
- """.format(
24
- path.basename(sys.argv[0])
44
+ args = _parse_args()
45
+ if args.log_level:
46
+ if args.log_file:
47
+ logging.basicConfig(
48
+ filename=args.log_file, level=getattr(logging, args.log_level.upper())
25
49
  )
26
- )
27
- sys.exit(2)
28
-
29
- import sys
30
-
31
- if len(sys.argv) < 2:
32
- help()
33
-
34
- urls = sys.argv[1:]
35
- dump_ocsp_response(urls, output_filename=None)
50
+ else:
51
+ logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
52
+ dump_ocsp_response(args.urls, output_filename=args.output_file)
36
53
 
37
54
 
38
55
  def dump_good_status(current_time, single_response) -> None:
@@ -87,7 +104,7 @@ def dump_ocsp_response(urls, output_filename):
87
104
  for issuer, subject in cert_data:
88
105
  _, _ = ocsp.create_ocsp_request(issuer, subject)
89
106
  _, _, _, cert_id, ocsp_response_der = ocsp.validate_by_direct_connection(
90
- issuer, subject
107
+ issuer, subject, OCSPTelemetryData()
91
108
  )
92
109
  ocsp_response = asn1crypto_ocsp.OCSPResponse.load(ocsp_response_der)
93
110
  print("------------------------------------------------------------")
@@ -115,7 +132,7 @@ def dump_ocsp_response(urls, output_filename):
115
132
 
116
133
  if output_filename:
117
134
  SFOCSP.OCSP_CACHE.write_ocsp_response_cache_file(ocsp, output_filename)
118
- return SFOCSP.OCSP_CACHE.CACHE
135
+ return SFOCSP.OCSP_CACHE
119
136
 
120
137
 
121
138
  if __name__ == "__main__":
@@ -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, 14, 1, None)
3
+ VERSION = (3, 15, 0, None)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 3.14.1
3
+ Version: 3.15.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -39,8 +39,8 @@ Description-Content-Type: text/markdown
39
39
  License-File: LICENSE.txt
40
40
  License-File: NOTICE
41
41
  Requires-Dist: asn1crypto<2.0.0,>0.24.0
42
- Requires-Dist: boto3>=1.0
43
- Requires-Dist: botocore>=1.0
42
+ Requires-Dist: boto3>=1.24
43
+ Requires-Dist: botocore>=1.24
44
44
  Requires-Dist: cffi<2.0.0,>=1.9
45
45
  Requires-Dist: cryptography>=3.1.0
46
46
  Requires-Dist: pyOpenSSL<26.0.0,>=22.0.0
@@ -86,8 +86,17 @@ 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.15(TBD)
90
- -
89
+ - v3.15.0(Apr 29,2025)
90
+ - Bumped up min boto and botocore version to 1.24.
91
+ - OCSP: terminate certificates chain traversal if a trusted certificate already reached.
92
+ - Added new authentication methods support for programmatic access tokens (PATs), OAuth 2.0 Authorization Code Flow, OAuth 2.0 Client Credentials Flow, and OAuth Token caching.
93
+ - For OAuth 2.0 Authorization Code Flow:
94
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_authorization_url`, `oauth_token_request_url`, `oauth_redirect_uri`, `oauth_scope`, `oauth_disable_pkce`, `oauth_enable_refresh_tokens` and `oauth_enable_single_use_refresh_tokens` parameters.
95
+ - Added the `OAUTH_AUTHORIZATION_CODE` value for the parameter authenticator.
96
+ - For OAuth 2.0 Client Credentials Flow:
97
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_token_request_url`, and `oauth_scope` parameters.
98
+ - Added the `OAUTH_CLIENT_CREDENTIALS` value for the parameter authenticator.
99
+ - For OAuth Token caching: Passing a username to driver configuration is required, and the `client_store_temporary_credential property` is to be set to `true`.
91
100
 
92
101
  - v3.14.1(April 21, 2025)
93
102
  - Added support for Python 3.13.
@@ -1,6 +1,6 @@
1
1
  asn1crypto<2.0.0,>0.24.0
2
- boto3>=1.0
3
- botocore>=1.0
2
+ boto3>=1.24
3
+ botocore>=1.24
4
4
  cffi<2.0.0,>=1.9
5
5
  cryptography>=3.1.0
6
6
  pyOpenSSL<26.0.0,>=22.0.0