snowflake-connector-python 3.14.1__tar.gz → 3.16.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 (256) hide show
  1. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/DESCRIPTION.md +22 -2
  2. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/MANIFEST.in +1 -0
  3. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/PKG-INFO +26 -6
  4. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/setup.cfg +3 -3
  5. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/setup.py +1 -0
  6. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/arrow_context.py +39 -1
  7. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/_oauth_base.py +34 -1
  8. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/by_plugin.py +1 -0
  9. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/oauth_code.py +96 -0
  10. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/oauth_credentials.py +2 -0
  11. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/webbrowser.py +4 -3
  12. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/bind_upload_agent.py +6 -2
  13. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/connection.py +61 -56
  14. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/connection_diagnostic.py +1 -1
  15. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/cursor.py +6 -2
  16. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/direct_file_operation_utils.py +31 -3
  17. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/errorcode.py +1 -0
  18. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_transfer_agent.py +20 -8
  19. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/gcs_storage_client.py +1 -1
  20. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +31 -0
  21. snowflake_connector_python-3.16.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +71 -0
  22. snowflake_connector_python-3.16.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +56 -0
  23. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +2 -0
  24. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +2 -0
  25. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/network.py +62 -4
  26. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ocsp_asn1crypto.py +10 -3
  27. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/pandas_tools.py +57 -44
  28. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/result_batch.py +40 -7
  29. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/result_set.py +40 -8
  30. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/dump_ocsp_response.py +38 -21
  31. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/version.py +1 -1
  32. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/wif_util.py +84 -4
  33. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/PKG-INFO +26 -6
  34. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +2 -0
  35. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/requires.txt +3 -3
  36. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/CONTRIBUTING.md +0 -0
  37. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/LICENSE.txt +0 -0
  38. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/NOTICE +0 -0
  39. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/README.md +0 -0
  40. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/SECURITY.md +0 -0
  41. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/pyproject.toml +0 -0
  42. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/__init__.py +0 -0
  43. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  44. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/_sql_util.py +0 -0
  45. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/_utils.py +0 -0
  46. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/__init__.py +0 -0
  47. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/_auth.py +0 -0
  48. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  49. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/default.py +0 -0
  50. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  51. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/keypair.py +0 -0
  52. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  53. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/oauth.py +0 -0
  54. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/okta.py +0 -0
  55. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/pat.py +0 -0
  56. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  57. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
  58. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  59. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/backoff_policies.py +0 -0
  60. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/cache.py +0 -0
  61. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/compat.py +0 -0
  62. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/config_manager.py +0 -0
  63. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/constants.py +0 -0
  64. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter.py +0 -0
  65. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  66. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter_null.py +0 -0
  67. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  68. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/dbapi.py +0 -0
  69. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/description.py +0 -0
  70. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/encryption_util.py +0 -0
  71. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/errors.py +0 -0
  72. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  73. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  74. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/feature.py +0 -0
  75. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_compression_type.py +0 -0
  76. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_lock.py +0 -0
  77. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_util.py +0 -0
  78. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  79. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/local_storage_client.py +0 -0
  80. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/log_configuration.py +0 -0
  81. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  82. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  83. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  84. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  85. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  86. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  87. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  88. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  89. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  90. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  91. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  92. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  93. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  94. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  95. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  96. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  97. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  98. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  99. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  100. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  101. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  102. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  103. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  104. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  105. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  106. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  107. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  108. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  109. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  110. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  111. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  112. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  113. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  114. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  115. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  116. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  117. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  118. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  119. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  120. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  121. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  122. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  123. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  124. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  125. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  126. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  127. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  128. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  129. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  130. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  131. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  132. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  133. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  134. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  135. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  136. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  137. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  138. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  139. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  140. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  141. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  142. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  143. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  144. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  145. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  146. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  147. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  148. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  149. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  150. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  151. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  152. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  153. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  154. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  155. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  156. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  157. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  158. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  159. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  160. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  161. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  162. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  163. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  164. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  165. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  166. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  167. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  168. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  169. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  170. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/options.py +0 -0
  171. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/proxy.py +0 -0
  172. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/py.typed +0 -0
  173. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  174. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/secret_detector.py +0 -0
  175. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sf_dirs.py +0 -0
  176. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  177. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sfdatetime.py +0 -0
  178. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/snow_logging.py +0 -0
  179. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sqlstate.py +0 -0
  180. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  181. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  182. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/storage_client.py +0 -0
  183. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/telemetry.py +0 -0
  184. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  185. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/test_util.py +0 -0
  186. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/time_util.py +0 -0
  187. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/token_cache.py +0 -0
  188. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/__init__.py +0 -0
  189. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  190. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  191. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  192. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/url_util.py +0 -0
  193. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/util_text.py +0 -0
  194. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  195. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  196. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  197. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  198. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  199. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  200. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  201. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  202. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  203. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  204. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  205. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  206. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  207. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  208. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  209. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  210. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  211. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  212. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  213. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  214. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  215. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  216. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  217. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  218. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  219. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  220. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  221. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  222. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  223. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  224. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  225. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  226. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  227. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  228. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  229. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  230. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  231. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  232. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  233. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  234. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  235. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  236. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  237. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  238. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  239. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  240. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  241. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  242. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  243. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  244. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  245. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  246. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  247. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  248. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  249. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  250. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  251. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  252. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  253. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  254. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  255. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  256. {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -7,8 +7,28 @@ 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.16.0(July 04,2025)
11
+ - Bumped numpy dependency from <2.1.0 to <=2.2.4.
12
+ - Added Windows support for Python 3.13.
13
+ - Added `bulk_upload_chunks` parameter to `write_pandas` function. Setting this parameter to True changes the behaviour of write_pandas function to first write all the data chunks to the local disk and then perform the wildcard upload of the chunks folder to the stage. In default behaviour the chunks are being saved, uploaded and deleted one by one.
14
+ - Added support for new authentication mechanism PAT with external session ID.
15
+ - Added `client_fetch_use_mp` parameter that enables multiprocessed fetching of result batches.
16
+ - Added basic arrow support for Interval types.
17
+ - Fixed `write_pandas` special characters usage in the location name.
18
+ - Fixed usage of `use_virtual_url` when building the location for gcs storage client.
19
+ - Added support for Snowflake OAuth for local applications.
20
+
21
+ - v3.15.0(Apr 29,2025)
22
+ - Bumped up min boto and botocore version to 1.24.
23
+ - OCSP: terminate certificates chain traversal if a trusted certificate already reached.
24
+ - 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.
25
+ - For OAuth 2.0 Authorization Code Flow:
26
+ - 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.
27
+ - Added the `OAUTH_AUTHORIZATION_CODE` value for the parameter authenticator.
28
+ - For OAuth 2.0 Client Credentials Flow:
29
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_token_request_url`, and `oauth_scope` parameters.
30
+ - Added the `OAUTH_CLIENT_CREDENTIALS` value for the parameter authenticator.
31
+ - 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
32
 
13
33
  - v3.14.1(April 21, 2025)
14
34
  - Added support for Python 3.13.
@@ -28,3 +28,4 @@ prune tested_requirements
28
28
  prune src/snowflake/connector/nanoarrow_cpp/scripts
29
29
  prune __pycache__
30
30
  prune samples
31
+ prune prober
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 3.14.1
3
+ Version: 3.16.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
@@ -61,7 +61,7 @@ Provides-Extra: development
61
61
  Requires-Dist: Cython; extra == "development"
62
62
  Requires-Dist: coverage; extra == "development"
63
63
  Requires-Dist: more-itertools; extra == "development"
64
- Requires-Dist: numpy<2.1.0; extra == "development"
64
+ Requires-Dist: numpy<=2.2.4; extra == "development"
65
65
  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"
@@ -86,8 +86,28 @@ 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.16.0(July 04,2025)
90
+ - Bumped numpy dependency from <2.1.0 to <=2.2.4.
91
+ - Added Windows support for Python 3.13.
92
+ - Added `bulk_upload_chunks` parameter to `write_pandas` function. Setting this parameter to True changes the behaviour of write_pandas function to first write all the data chunks to the local disk and then perform the wildcard upload of the chunks folder to the stage. In default behaviour the chunks are being saved, uploaded and deleted one by one.
93
+ - Added support for new authentication mechanism PAT with external session ID.
94
+ - Added `client_fetch_use_mp` parameter that enables multiprocessed fetching of result batches.
95
+ - Added basic arrow support for Interval types.
96
+ - Fixed `write_pandas` special characters usage in the location name.
97
+ - Fixed usage of `use_virtual_url` when building the location for gcs storage client.
98
+ - Added support for Snowflake OAuth for local applications.
99
+
100
+ - v3.15.0(Apr 29,2025)
101
+ - Bumped up min boto and botocore version to 1.24.
102
+ - OCSP: terminate certificates chain traversal if a trusted certificate already reached.
103
+ - 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.
104
+ - For OAuth 2.0 Authorization Code Flow:
105
+ - 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.
106
+ - Added the `OAUTH_AUTHORIZATION_CODE` value for the parameter authenticator.
107
+ - For OAuth 2.0 Client Credentials Flow:
108
+ - Added the `oauth_client_id`, `oauth_client_secret`, `oauth_token_request_url`, and `oauth_scope` parameters.
109
+ - Added the `OAUTH_CLIENT_CREDENTIALS` value for the parameter authenticator.
110
+ - 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
111
 
92
112
  - v3.14.1(April 21, 2025)
93
113
  - 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
@@ -83,7 +83,7 @@ development =
83
83
  Cython
84
84
  coverage
85
85
  more-itertools
86
- numpy<2.1.0
86
+ numpy<=2.2.4
87
87
  pendulum!=2.1.1
88
88
  pexpect
89
89
  pytest<7.5.0
@@ -103,6 +103,7 @@ if _ABLE_TO_COMPILE_EXTENSIONS and not SNOWFLAKE_DISABLE_COMPILE_ARROW_EXTENSION
103
103
  "FixedSizeListConverter.cpp",
104
104
  "FloatConverter.cpp",
105
105
  "IntConverter.cpp",
106
+ "IntervalConverter.cpp",
106
107
  "MapConverter.cpp",
107
108
  "ObjectConverter.cpp",
108
109
  "SnowflakeType.cpp",
@@ -15,7 +15,7 @@ from .constants import PARAMETER_TIMEZONE
15
15
  from .converter import _generate_tzinfo_from_tzoffset
16
16
 
17
17
  if TYPE_CHECKING:
18
- from numpy import datetime64, float64, int64
18
+ from numpy import datetime64, float64, int64, timedelta64
19
19
 
20
20
 
21
21
  try:
@@ -163,3 +163,41 @@ class ArrowConverterContext:
163
163
 
164
164
  def DECFLOAT_to_numpy_float64(self, exponent: int, significand: bytes) -> float64:
165
165
  return numpy.float64(self.DECFLOAT_to_decimal(exponent, significand))
166
+
167
+ def INTERVAL_YEAR_MONTH_to_numpy_timedelta(self, months: int) -> timedelta64:
168
+ return numpy.timedelta64(months, "M")
169
+
170
+ def INTERVAL_DAY_TIME_int_to_numpy_timedelta(self, nanos: int) -> timedelta64:
171
+ return numpy.timedelta64(nanos, "ns")
172
+
173
+ def INTERVAL_DAY_TIME_int_to_timedelta(self, nanos: int) -> timedelta:
174
+ # Python timedelta only supports microsecond precision. We receive value in
175
+ # nanoseconds.
176
+ return timedelta(microseconds=nanos // 1000)
177
+
178
+ def INTERVAL_DAY_TIME_decimal_to_numpy_timedelta(self, value: bytes) -> timedelta64:
179
+ # Snowflake supports up to 9 digits leading field precision for the day-time
180
+ # interval. That when represented in nanoseconds can not be stored in a 64-bit
181
+ # integer. So we send these as Decimal128 from server to client.
182
+ # Arrow uses little-endian by default.
183
+ # https://arrow.apache.org/docs/format/Columnar.html#byte-order-endianness
184
+ nanos = int.from_bytes(value, byteorder="little", signed=True)
185
+ # Numpy timedelta only supports up to 64-bit integers, so we need to change the
186
+ # unit to milliseconds to avoid overflow.
187
+ # Max value received from server
188
+ # = 10**9 * NANOS_PER_DAY - 1
189
+ # = 86399999999999999999999 nanoseconds
190
+ # = 86399999999999999 milliseconds
191
+ # math.log2(86399999999999999) = 56.3 < 64
192
+ return numpy.timedelta64(nanos // 1_000_000, "ms")
193
+
194
+ def INTERVAL_DAY_TIME_decimal_to_timedelta(self, value: bytes) -> timedelta:
195
+ # Snowflake supports up to 9 digits leading field precision for the day-time
196
+ # interval. That when represented in nanoseconds can not be stored in a 64-bit
197
+ # integer. So we send these as Decimal128 from server to client.
198
+ # Arrow uses little-endian by default.
199
+ # https://arrow.apache.org/docs/format/Columnar.html#byte-order-endianness
200
+ nanos = int.from_bytes(value, byteorder="little", signed=True)
201
+ # Python timedelta only supports microsecond precision. We receive value in
202
+ # nanoseconds.
203
+ return timedelta(microseconds=nanos // 1000)
@@ -12,7 +12,13 @@ from abc import ABC, abstractmethod
12
12
  from typing import TYPE_CHECKING, Any
13
13
  from urllib.error import HTTPError, URLError
14
14
 
15
- from ..errorcode import ER_FAILED_TO_REQUEST, ER_IDP_CONNECTION_ERROR
15
+ from ..errorcode import (
16
+ ER_FAILED_TO_REQUEST,
17
+ ER_IDP_CONNECTION_ERROR,
18
+ ER_NO_CLIENT_ID,
19
+ ER_NO_CLIENT_SECRET,
20
+ )
21
+ from ..errors import Error, ProgrammingError
16
22
  from ..network import OAUTH_AUTHENTICATOR
17
23
  from ..secret_detector import SecretDetector
18
24
  from ..token_cache import TokenCache, TokenKey, TokenType
@@ -185,6 +191,33 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
185
191
  """Returns the token."""
186
192
  return self._access_token or ""
187
193
 
194
+ @staticmethod
195
+ def _validate_client_credentials_present(
196
+ client_id: str, client_secret: str, connection: SnowflakeConnection
197
+ ) -> tuple[str, str]:
198
+ if client_id is None or client_id == "":
199
+ Error.errorhandler_wrapper(
200
+ connection,
201
+ None,
202
+ ProgrammingError,
203
+ {
204
+ "msg": "Oauth code flow requirement 'client_id' is empty",
205
+ "errno": ER_NO_CLIENT_ID,
206
+ },
207
+ )
208
+ if client_secret is None or client_secret == "":
209
+ Error.errorhandler_wrapper(
210
+ connection,
211
+ None,
212
+ ProgrammingError,
213
+ {
214
+ "msg": "Oauth code flow requirement 'client_secret' is empty",
215
+ "errno": ER_NO_CLIENT_SECRET,
216
+ },
217
+ )
218
+
219
+ return client_id, client_secret
220
+
188
221
  def reauthenticate(
189
222
  self,
190
223
  *,
@@ -53,6 +53,7 @@ class AuthType(Enum):
53
53
  PAT = "PROGRAMMATIC_ACCESS_TOKEN'"
54
54
  NO_AUTH = "NO_AUTH"
55
55
  WORKLOAD_IDENTITY = "WORKLOAD_IDENTITY"
56
+ PAT_WITH_EXTERNAL_SESSION = "PAT_WITH_EXTERNAL_SESSION"
56
57
 
57
58
 
58
59
  class AuthByPlugin(ABC):
@@ -18,11 +18,13 @@ from typing import TYPE_CHECKING, Any
18
18
  from ..compat import parse_qs, urlparse, urlsplit
19
19
  from ..constants import OAUTH_TYPE_AUTHORIZATION_CODE
20
20
  from ..errorcode import (
21
+ ER_INVALID_VALUE,
21
22
  ER_OAUTH_CALLBACK_ERROR,
22
23
  ER_OAUTH_SERVER_TIMEOUT,
23
24
  ER_OAUTH_STATE_CHANGED,
24
25
  ER_UNABLE_TO_OPEN_BROWSER,
25
26
  )
27
+ from ..errors import Error, ProgrammingError
26
28
  from ..token_cache import TokenCache
27
29
  from ._http_server import AuthHttpServer
28
30
  from ._oauth_base import AuthByOAuthBase
@@ -45,6 +47,8 @@ def _get_query_params(
45
47
  class AuthByOauthCode(AuthByOAuthBase):
46
48
  """Authenticates user by OAuth code flow."""
47
49
 
50
+ _LOCAL_APPLICATION_CLIENT_CREDENTIALS = "LOCAL_APPLICATION"
51
+
48
52
  def __init__(
49
53
  self,
50
54
  application: str,
@@ -54,12 +58,27 @@ class AuthByOauthCode(AuthByOAuthBase):
54
58
  token_request_url: str,
55
59
  redirect_uri: str,
56
60
  scope: str,
61
+ host: str,
57
62
  pkce_enabled: bool = True,
58
63
  token_cache: TokenCache | None = None,
59
64
  refresh_token_enabled: bool = False,
60
65
  external_browser_timeout: int | None = None,
66
+ enable_single_use_refresh_tokens: bool = False,
67
+ connection: SnowflakeConnection | None = None,
61
68
  **kwargs,
62
69
  ) -> None:
70
+ authentication_url, redirect_uri = self._validate_oauth_code_uris(
71
+ authentication_url, redirect_uri, connection
72
+ )
73
+ client_id, client_secret = self._validate_client_credentials_with_defaults(
74
+ client_id,
75
+ client_secret,
76
+ authentication_url,
77
+ token_request_url,
78
+ host,
79
+ connection,
80
+ )
81
+
63
82
  super().__init__(
64
83
  client_id=client_id,
65
84
  client_secret=client_secret,
@@ -81,6 +100,7 @@ class AuthByOauthCode(AuthByOAuthBase):
81
100
  logger.debug("oauth pkce is going to be used")
82
101
  self._verifier: str | None = None
83
102
  self._external_browser_timeout = external_browser_timeout
103
+ self._enable_single_use_refresh_tokens = enable_single_use_refresh_tokens
84
104
 
85
105
  def _get_oauth_type_id(self) -> str:
86
106
  return OAUTH_TYPE_AUTHORIZATION_CODE
@@ -296,6 +316,8 @@ You can close this window now and go back where you started from.
296
316
  "code": code,
297
317
  "redirect_uri": callback_server.url,
298
318
  }
319
+ if self._enable_single_use_refresh_tokens:
320
+ fields["enable_single_use_refresh_tokens"] = "true"
299
321
  if self._pkce_enabled:
300
322
  assert self._verifier is not None
301
323
  fields["code_verifier"] = self._verifier
@@ -381,3 +403,77 @@ You can close this window now and go back where you started from.
381
403
  },
382
404
  )
383
405
  return parsed.get("code", [None])[0], parsed.get("state", [None])[0]
406
+
407
+ @staticmethod
408
+ def _is_snowflake_as_idp(
409
+ authentication_url: str, token_request_url: str, host: str
410
+ ) -> bool:
411
+ return (authentication_url == "" or host in authentication_url) and (
412
+ token_request_url == "" or host in token_request_url
413
+ )
414
+
415
+ def _eligible_for_default_client_credentials(
416
+ self,
417
+ client_id: str,
418
+ client_secret: str,
419
+ authorization_url: str,
420
+ token_request_url: str,
421
+ host: str,
422
+ ) -> bool:
423
+ return (
424
+ (client_id == "" or client_secret is None)
425
+ and (client_secret == "" or client_secret is None)
426
+ and self.__class__._is_snowflake_as_idp(
427
+ authorization_url, token_request_url, host
428
+ )
429
+ )
430
+
431
+ def _validate_client_credentials_with_defaults(
432
+ self,
433
+ client_id: str,
434
+ client_secret: str,
435
+ authorization_url: str,
436
+ token_request_url: str,
437
+ host: str,
438
+ connection: SnowflakeConnection,
439
+ ) -> tuple[str, str] | None:
440
+ if self._eligible_for_default_client_credentials(
441
+ client_id, client_secret, authorization_url, token_request_url, host
442
+ ):
443
+ return (
444
+ self.__class__._LOCAL_APPLICATION_CLIENT_CREDENTIALS,
445
+ self.__class__._LOCAL_APPLICATION_CLIENT_CREDENTIALS,
446
+ )
447
+ else:
448
+ self._validate_client_credentials_present(
449
+ client_id, client_secret, connection
450
+ )
451
+ return client_id, client_secret
452
+
453
+ @staticmethod
454
+ def _validate_oauth_code_uris(
455
+ authorization_url: str, redirect_uri: str, connection: SnowflakeConnection
456
+ ) -> tuple[str, str]:
457
+ if authorization_url and not authorization_url.startswith("https://"):
458
+ Error.errorhandler_wrapper(
459
+ connection,
460
+ None,
461
+ ProgrammingError,
462
+ {
463
+ "msg": "OAuth supports only authorization urls that use 'https' scheme",
464
+ "errno": ER_INVALID_VALUE,
465
+ },
466
+ )
467
+ if redirect_uri and not (
468
+ redirect_uri.startswith("http://") or redirect_uri.startswith("https://")
469
+ ):
470
+ Error.errorhandler_wrapper(
471
+ connection,
472
+ None,
473
+ ProgrammingError,
474
+ {
475
+ "msg": "OAuth supports only authorization urls that use 'http(s)' scheme",
476
+ "errno": ER_INVALID_VALUE,
477
+ },
478
+ )
479
+ return authorization_url, redirect_uri
@@ -29,8 +29,10 @@ class AuthByOauthCredentials(AuthByOAuthBase):
29
29
  scope: str,
30
30
  token_cache: TokenCache | None = None,
31
31
  refresh_token_enabled: bool = False,
32
+ connection: SnowflakeConnection | None = None,
32
33
  **kwargs,
33
34
  ) -> None:
35
+ self._validate_client_credentials_present(client_id, client_secret, connection)
34
36
  super().__init__(
35
37
  client_id=client_id,
36
38
  client_secret=client_secret,
@@ -124,18 +124,19 @@ class AuthByWebBrowser(AuthByPlugin):
124
124
  socket_connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
125
125
 
126
126
  try:
127
+ hostname = os.getenv("SF_AUTH_SOCKET_ADDR", "localhost")
127
128
  try:
128
129
  socket_connection.bind(
129
130
  (
130
- os.getenv("SF_AUTH_SOCKET_ADDR", "localhost"),
131
+ hostname,
131
132
  int(os.getenv("SF_AUTH_SOCKET_PORT", 0)),
132
133
  )
133
134
  )
134
135
  except socket.gaierror as ex:
135
136
  if ex.args[0] == socket.EAI_NONAME:
136
137
  raise OperationalError(
137
- msg="localhost is not found. Ensure /etc/hosts has "
138
- "localhost entry.",
138
+ msg=f"{hostname} is not found. Ensure /etc/hosts has "
139
+ f"{hostname} entry.",
139
140
  errno=ER_NO_HOSTNAME_FOUND,
140
141
  )
141
142
  else:
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  from __future__ import annotations
3
3
 
4
+ import os
4
5
  import uuid
5
6
  from io import BytesIO
6
7
  from logging import getLogger
@@ -76,8 +77,11 @@ class BindUploadAgent:
76
77
  if row_idx >= len(self.rows) or size >= self._stream_buffer_size:
77
78
  break
78
79
  try:
79
- self.cursor.execute(
80
- f"PUT file://{row_idx}.csv {self.stage_path}", file_stream=f
80
+ f.seek(0)
81
+ self.cursor._upload_stream(
82
+ input_stream=f,
83
+ stage_location=os.path.join(self.stage_path, f"{row_idx}.csv"),
84
+ options={"source_compression": "auto_detect"},
81
85
  )
82
86
  except Error as err:
83
87
  logger.debug("Failed to upload the bindings file to stage.")