snowflake-connector-python 3.10.0__tar.gz → 3.11.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 (236) hide show
  1. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/DESCRIPTION.md +14 -0
  2. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/PKG-INFO +15 -1
  3. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/_query_context_cache.py +5 -3
  4. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/_auth.py +20 -12
  5. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/okta.py +3 -1
  6. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/config_manager.py +8 -1
  7. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/connection.py +36 -17
  8. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/connection_diagnostic.py +3 -1
  9. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/cursor.py +19 -21
  10. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/errors.py +3 -3
  11. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/file_transfer_agent.py +18 -14
  12. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/gcs_storage_client.py +10 -6
  13. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -2
  14. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/network.py +3 -3
  15. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ocsp_asn1crypto.py +2 -2
  16. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ocsp_snowflake.py +6 -2
  17. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/result_batch.py +15 -5
  18. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/result_set.py +2 -4
  19. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sf_dirs.py +1 -2
  20. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/storage_client.py +2 -2
  21. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/telemetry.py +3 -3
  22. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/telemetry_oob.py +18 -18
  23. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/url_util.py +1 -1
  24. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/version.py +1 -1
  25. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/PKG-INFO +15 -1
  26. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/CONTRIBUTING.md +0 -0
  27. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/LICENSE.txt +0 -0
  28. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/MANIFEST.in +0 -0
  29. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/NOTICE +0 -0
  30. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/README.md +0 -0
  31. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/SECURITY.md +0 -0
  32. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/pyproject.toml +0 -0
  33. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/setup.cfg +0 -0
  34. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/setup.py +0 -0
  35. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/__init__.py +0 -0
  36. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/_sql_util.py +0 -0
  37. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/arrow_context.py +0 -0
  38. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/__init__.py +0 -0
  39. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  40. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/default.py +0 -0
  41. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  42. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/keypair.py +0 -0
  43. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/oauth.py +0 -0
  44. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  45. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
  46. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/azure_storage_client.py +0 -0
  47. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/backoff_policies.py +0 -0
  48. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  49. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/cache.py +0 -0
  50. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/compat.py +0 -0
  51. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/constants.py +0 -0
  52. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter.py +0 -0
  53. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  54. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter_null.py +0 -0
  55. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  56. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/dbapi.py +0 -0
  57. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/description.py +0 -0
  58. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/encryption_util.py +0 -0
  59. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/errorcode.py +0 -0
  60. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/feature.py +0 -0
  61. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/file_compression_type.py +0 -0
  62. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/file_util.py +0 -0
  63. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  64. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/local_storage_client.py +0 -0
  65. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/log_configuration.py +0 -0
  66. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  67. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  68. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  69. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  70. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  71. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  72. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  73. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  74. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  75. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  76. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  77. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  78. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  79. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  80. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  81. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  82. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  83. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  84. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  85. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  86. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  87. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  88. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  89. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  90. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  91. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  92. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  93. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  94. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  95. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  96. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  97. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  98. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  99. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  100. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  101. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  102. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  103. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  104. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  105. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  106. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  107. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  108. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  109. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  110. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  111. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  112. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  113. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  114. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  115. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  116. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  117. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  118. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  119. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  120. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  121. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  122. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  123. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  124. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  125. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  126. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  127. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  128. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  129. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  130. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  131. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  132. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  133. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  134. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  135. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  136. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  137. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  138. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  139. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  140. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  141. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  142. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  143. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  144. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  145. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  146. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  147. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  148. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  149. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  150. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  151. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  152. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/options.py +0 -0
  153. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/pandas_tools.py +0 -0
  154. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/proxy.py +0 -0
  155. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/py.typed +0 -0
  156. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  157. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/secret_detector.py +0 -0
  158. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  159. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sfdatetime.py +0 -0
  160. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/snow_logging.py +0 -0
  161. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sqlstate.py +0 -0
  162. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  163. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  164. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/test_util.py +0 -0
  165. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/time_util.py +0 -0
  166. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/__init__.py +0 -0
  167. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  168. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  169. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  170. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  171. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/util_text.py +0 -0
  172. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  173. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  174. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  175. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  176. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  177. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  178. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  179. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  180. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  181. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  182. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  183. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  184. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  185. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  186. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  187. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  188. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  189. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  190. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  191. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  192. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  193. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  194. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  195. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  196. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  197. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  198. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  199. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  200. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  201. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  202. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  203. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  204. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  205. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  206. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  207. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  208. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  209. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  210. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  211. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  212. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  213. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  214. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  215. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  216. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  217. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  218. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  219. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  220. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  221. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  222. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  223. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  224. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  225. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  226. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  227. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  228. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  229. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  230. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  231. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  232. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  233. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  234. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  235. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/requires.txt +0 -0
  236. {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -8,6 +8,20 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
8
8
 
9
9
  # Release Notes
10
10
 
11
+ - v3.11.0(June 17,2024)
12
+ - Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
13
+ - Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
14
+ - Added support for `disable_saml_url_check` connection parameter to disable SAML URL check in OKTA authentication.
15
+ - Fixed a bug that OCSP certificate signed using SHA384 algorithm cannot be verified.
16
+ - Fixed a bug that status code shown as uploaded when PUT command failed with 400 error.
17
+ - Fixed a bug that a PermissionError was raised when the current user does not have the right permission on parent directory of config file path.
18
+ - Fixed a bug that OCSP GET url is not encoded correctly when it contains a slash.
19
+ - Fixed a bug that an SSO URL didn't accept `:` in a query parameter, for instance, `https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/`.
20
+
21
+ - v3.10.1(May 21, 2024)
22
+
23
+ - Removed an incorrect error log message that could occur during arrow data conversion.
24
+
11
25
  - v3.10.0(April 29,2024)
12
26
 
13
27
  - Added support for structured types to fetch_pandas_all.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snowflake-connector-python
3
- Version: 3.10.0
3
+ Version: 3.11.0
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -85,6 +85,20 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
85
85
 
86
86
  # Release Notes
87
87
 
88
+ - v3.11.0(June 17,2024)
89
+ - Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
90
+ - Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
91
+ - Added support for `disable_saml_url_check` connection parameter to disable SAML URL check in OKTA authentication.
92
+ - Fixed a bug that OCSP certificate signed using SHA384 algorithm cannot be verified.
93
+ - Fixed a bug that status code shown as uploaded when PUT command failed with 400 error.
94
+ - Fixed a bug that a PermissionError was raised when the current user does not have the right permission on parent directory of config file path.
95
+ - Fixed a bug that OCSP GET url is not encoded correctly when it contains a slash.
96
+ - Fixed a bug that an SSO URL didn't accept `:` in a query parameter, for instance, `https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/`.
97
+
98
+ - v3.10.1(May 21, 2024)
99
+
100
+ - Removed an incorrect error log message that could occur during arrow data conversion.
101
+
88
102
  - v3.10.0(April 29,2024)
89
103
 
90
104
  - Added support for structured types to fetch_pandas_all.
@@ -165,9 +165,11 @@ class QueryContextCache:
165
165
  "id": qce.id,
166
166
  "timestamp": qce.read_timestamp,
167
167
  "priority": qce.priority,
168
- "context": {"base64Data": qce.context}
169
- if qce.context is not None
170
- else {},
168
+ "context": (
169
+ {"base64Data": qce.context}
170
+ if qce.context is not None
171
+ else {}
172
+ ),
171
173
  }
172
174
  for qce in self._tree_set
173
175
  ]
@@ -417,27 +417,35 @@ class Auth:
417
417
  else:
418
418
  logger.debug(
419
419
  "token = %s",
420
- "******"
421
- if ret["data"] and ret["data"].get("token") is not None
422
- else "NULL",
420
+ (
421
+ "******"
422
+ if ret["data"] and ret["data"].get("token") is not None
423
+ else "NULL"
424
+ ),
423
425
  )
424
426
  logger.debug(
425
427
  "master_token = %s",
426
- "******"
427
- if ret["data"] and ret["data"].get("masterToken") is not None
428
- else "NULL",
428
+ (
429
+ "******"
430
+ if ret["data"] and ret["data"].get("masterToken") is not None
431
+ else "NULL"
432
+ ),
429
433
  )
430
434
  logger.debug(
431
435
  "id_token = %s",
432
- "******"
433
- if ret["data"] and ret["data"].get("idToken") is not None
434
- else "NULL",
436
+ (
437
+ "******"
438
+ if ret["data"] and ret["data"].get("idToken") is not None
439
+ else "NULL"
440
+ ),
435
441
  )
436
442
  logger.debug(
437
443
  "mfa_token = %s",
438
- "******"
439
- if ret["data"] and ret["data"].get("mfaToken") is not None
440
- else "NULL",
444
+ (
445
+ "******"
446
+ if ret["data"] and ret["data"].get("mfaToken") is not None
447
+ else "NULL"
448
+ ),
441
449
  )
442
450
  if not ret["data"]:
443
451
  Error.errorhandler_wrapper(
@@ -315,7 +315,9 @@ class AuthByOkta(AuthByPlugin):
315
315
  host=conn._rest._host,
316
316
  port=conn._rest._port,
317
317
  )
318
- if not _is_prefix_equal(post_back_url, full_url):
318
+ if not getattr(conn, "_disable_saml_url_check", False) and not _is_prefix_equal(
319
+ post_back_url, full_url
320
+ ):
319
321
  Error.errorhandler_wrapper(
320
322
  conn._rest._connection,
321
323
  None,
@@ -320,8 +320,15 @@ class ConfigManager:
320
320
  ):
321
321
  if sliceoptions.only_in_slice:
322
322
  del read_config_file[section]
323
- if not filep.exists():
323
+ try:
324
+ if not filep.exists():
325
+ continue
326
+ except PermissionError:
327
+ LOGGER.debug(
328
+ f"Fail to read configuration file from {str(filep)} due to no permission on its parent directory"
329
+ )
324
330
  continue
331
+
325
332
  if (
326
333
  sliceoptions.check_permissions # Skip checking if this file couldn't hold sensitive information
327
334
  # Same check as openssh does for permissions
@@ -281,6 +281,14 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
281
281
  True,
282
282
  bool,
283
283
  ), # Disable console login and fall back to getting SSO URL from GS
284
+ "debug_arrow_chunk": (
285
+ False,
286
+ bool,
287
+ ), # log raw arrow chunk for debugging purpuse in case there is malformed arrow data
288
+ "disable_saml_url_check": (
289
+ False,
290
+ bool,
291
+ ), # disable saml url check in okta authentication
284
292
  }
285
293
 
286
294
  APPLICATION_RE = re.compile(r"[\w\d_]+")
@@ -359,6 +367,7 @@ class SnowflakeConnection:
359
367
  This parameter is only effective when the result format is JSON.
360
368
  server_session_keep_alive: When true, the connector does not destroy the session on the Snowflake server side
361
369
  before the connector shuts down. Default value is false.
370
+ token_file_path: The file path of the token file. If both token and token_file_path are provided, the token in token_file_path will be used.
362
371
  """
363
372
 
364
373
  OCSP_ENV_LOCK = Lock()
@@ -713,9 +722,11 @@ class SnowflakeConnection:
713
722
  account=self.account,
714
723
  host=self.host,
715
724
  connection_diag_log_path=self.connection_diag_log_path,
716
- connection_diag_allowlist_path=self.connection_diag_allowlist_path
717
- if self.connection_diag_allowlist_path is not None
718
- else self.connection_diag_whitelist_path,
725
+ connection_diag_allowlist_path=(
726
+ self.connection_diag_allowlist_path
727
+ if self.connection_diag_allowlist_path is not None
728
+ else self.connection_diag_whitelist_path
729
+ ),
719
730
  proxy_host=self.proxy_host,
720
731
  proxy_port=self.proxy_port,
721
732
  proxy_user=self.proxy_user,
@@ -936,14 +947,14 @@ class SnowflakeConnection:
936
947
 
937
948
  if self._validate_default_parameters:
938
949
  # Snowflake will validate the requested database, schema, and warehouse
939
- self._session_parameters[
940
- PARAMETER_CLIENT_VALIDATE_DEFAULT_PARAMETERS
941
- ] = True
950
+ self._session_parameters[PARAMETER_CLIENT_VALIDATE_DEFAULT_PARAMETERS] = (
951
+ True
952
+ )
942
953
 
943
954
  if self.client_session_keep_alive is not None:
944
- self._session_parameters[
945
- PARAMETER_CLIENT_SESSION_KEEP_ALIVE
946
- ] = self._client_session_keep_alive
955
+ self._session_parameters[PARAMETER_CLIENT_SESSION_KEEP_ALIVE] = (
956
+ self._client_session_keep_alive
957
+ )
947
958
 
948
959
  if self.client_session_keep_alive_heartbeat_frequency is not None:
949
960
  self._session_parameters[
@@ -951,9 +962,9 @@ class SnowflakeConnection:
951
962
  ] = self._validate_client_session_keep_alive_heartbeat_frequency()
952
963
 
953
964
  if self.client_prefetch_threads:
954
- self._session_parameters[
955
- PARAMETER_CLIENT_PREFETCH_THREADS
956
- ] = self._validate_client_prefetch_threads()
965
+ self._session_parameters[PARAMETER_CLIENT_PREFETCH_THREADS] = (
966
+ self._validate_client_prefetch_threads()
967
+ )
957
968
 
958
969
  # Setup authenticator
959
970
  auth = Auth(self.rest)
@@ -1119,11 +1130,13 @@ class SnowflakeConnection:
1119
1130
  warnings.warn(
1120
1131
  "'{}' connection parameter should be of type '{}', but is a '{}'".format(
1121
1132
  name,
1122
- str(tuple(e.__name__ for e in accepted_types)).replace(
1123
- "'", ""
1124
- )
1125
- if isinstance(accepted_types, tuple)
1126
- else accepted_types.__name__,
1133
+ (
1134
+ str(tuple(e.__name__ for e in accepted_types)).replace(
1135
+ "'", ""
1136
+ )
1137
+ if isinstance(accepted_types, tuple)
1138
+ else accepted_types.__name__
1139
+ ),
1127
1140
  type(value).__name__,
1128
1141
  ),
1129
1142
  # Raise warning from where class was initiated
@@ -1182,6 +1195,12 @@ class SnowflakeConnection:
1182
1195
  ]:
1183
1196
  self._authenticator = auth_tmp
1184
1197
 
1198
+ # read OAuth token from
1199
+ token_file_path = kwargs.get("token_file_path")
1200
+ if token_file_path:
1201
+ with open(token_file_path) as f:
1202
+ self._token = f.read()
1203
+
1185
1204
  if not (self._master_token and self._session_token):
1186
1205
  if not self.user and self._authenticator != OAUTH_AUTHENTICATOR:
1187
1206
  # OAuth Authentication does not require a username
@@ -175,7 +175,9 @@ class ConnectionDiagnostic:
175
175
  )
176
176
  self.full_connection_diag_allowlist_path = None
177
177
 
178
- self.allowlist_sql: str = "select /* snowflake-connector-python:connection_diagnostics */ system$allowlist();"
178
+ self.allowlist_sql: str = (
179
+ "select /* snowflake-connector-python:connection_diagnostics */ system$allowlist();"
180
+ )
179
181
 
180
182
  if self.__is_privatelink():
181
183
  self.ocsp_urls.append(f"ocsp.{self.host}")
@@ -149,9 +149,11 @@ class ResultMetadata(NamedTuple):
149
149
  def from_column(cls, col: dict[str, Any]):
150
150
  """Initializes a ResultMetadata object from the column description in the query response."""
151
151
  type_code = FIELD_NAME_TO_ID[
152
- col["extTypeName"].upper()
153
- if col.get("extTypeName")
154
- else col["type"].upper()
152
+ (
153
+ col["extTypeName"].upper()
154
+ if col.get("extTypeName")
155
+ else col["type"].upper()
156
+ )
155
157
  ]
156
158
 
157
159
  return cls(
@@ -546,12 +548,10 @@ class SnowflakeCursor:
546
548
  return None
547
549
 
548
550
  @overload
549
- def callproc(self, procname: str) -> tuple:
550
- ...
551
+ def callproc(self, procname: str) -> tuple: ...
551
552
 
552
553
  @overload
553
- def callproc(self, procname: str, args: T) -> T:
554
- ...
554
+ def callproc(self, procname: str, args: T) -> T: ...
555
555
 
556
556
  def callproc(self, procname: str, args=tuple()):
557
557
  """Call a stored procedure.
@@ -630,9 +630,9 @@ class SnowflakeCursor:
630
630
  if str(result_format_val).upper() == "ARROW":
631
631
  self.check_can_use_arrow_resultset()
632
632
  elif result_format_val is None:
633
- statement_params[
634
- PARAMETER_PYTHON_CONNECTOR_QUERY_RESULT_FORMAT
635
- ] = "JSON"
633
+ statement_params[PARAMETER_PYTHON_CONNECTOR_QUERY_RESULT_FORMAT] = (
634
+ "JSON"
635
+ )
636
636
 
637
637
  self._sequence_counter = self._connection._next_sequence_counter()
638
638
  self._request_id = uuid.uuid4()
@@ -758,9 +758,11 @@ class SnowflakeCursor:
758
758
  if params is not None and len(params) == 0:
759
759
  self._log_telemetry_job_data(
760
760
  TelemetryField.EMPTY_SEQ_INTERPOLATION,
761
- TelemetryData.TRUE
762
- if self.connection._interpolate_empty_sequences
763
- else TelemetryData.FALSE,
761
+ (
762
+ TelemetryData.TRUE
763
+ if self.connection._interpolate_empty_sequences
764
+ else TelemetryData.FALSE
765
+ ),
764
766
  )
765
767
  if logger.getEffectiveLevel() <= logging.DEBUG:
766
768
  logger.debug(
@@ -807,8 +809,7 @@ class SnowflakeCursor:
807
809
  _skip_upload_on_content_match: bool = False,
808
810
  file_stream: IO[bytes] | None = None,
809
811
  num_statements: int | None = None,
810
- ) -> Self | None:
811
- ...
812
+ ) -> Self | None: ...
812
813
 
813
814
  @overload
814
815
  def execute(
@@ -837,8 +838,7 @@ class SnowflakeCursor:
837
838
  _skip_upload_on_content_match: bool = False,
838
839
  file_stream: IO[bytes] | None = None,
839
840
  num_statements: int | None = None,
840
- ) -> dict[str, Any] | None:
841
- ...
841
+ ) -> dict[str, Any] | None: ...
842
842
 
843
843
  def execute(
844
844
  self,
@@ -1278,12 +1278,10 @@ class SnowflakeCursor:
1278
1278
  return self._result_set._fetch_arrow_batches()
1279
1279
 
1280
1280
  @overload
1281
- def fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None:
1282
- ...
1281
+ def fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None: ...
1283
1282
 
1284
1283
  @overload
1285
- def fetch_arrow_all(self, force_return_table: Literal[True]) -> Table:
1286
- ...
1284
+ def fetch_arrow_all(self, force_return_table: Literal[True]) -> Table: ...
1287
1285
 
1288
1286
  def fetch_arrow_all(self, force_return_table: bool = False) -> Table | None:
1289
1287
  """
@@ -153,9 +153,9 @@ class Error(BASE_EXCEPTION_CLASS):
153
153
  and not connection._telemetry.is_closed
154
154
  ):
155
155
  # Send with in-band telemetry
156
- telemetry_data[
157
- TelemetryField.KEY_TYPE.value
158
- ] = TelemetryField.SQL_EXCEPTION.value
156
+ telemetry_data[TelemetryField.KEY_TYPE.value] = (
157
+ TelemetryField.SQL_EXCEPTION.value
158
+ )
159
159
  telemetry_data[TelemetryField.KEY_SOURCE.value] = connection.application
160
160
  telemetry_data[TelemetryField.KEY_EXCEPTION.value] = self.__class__.__name__
161
161
  ts = get_time_millis()
@@ -941,9 +941,9 @@ class SnowflakeFileTransferAgent:
941
941
  if len(response["src_locations"]) == len(self._encryption_material):
942
942
  for idx, src_file in enumerate(self._src_files):
943
943
  logger.debug(src_file)
944
- self._src_file_to_encryption_material[
945
- src_file
946
- ] = self._encryption_material[idx]
944
+ self._src_file_to_encryption_material[src_file] = (
945
+ self._encryption_material[idx]
946
+ )
947
947
  elif len(self._encryption_material) != 0:
948
948
  # some encryption material exists. Zero means no encryption
949
949
  Error.errorhandler_wrapper(
@@ -1000,9 +1000,11 @@ class SnowflakeFileTransferAgent:
1000
1000
  intermediate_stream=self._source_from_stream,
1001
1001
  src_file_size=self._source_from_stream.seek(0, os.SEEK_END),
1002
1002
  stage_location_type=self._stage_location_type,
1003
- encryption_material=self._encryption_material[0]
1004
- if len(self._encryption_material) > 0
1005
- else None,
1003
+ encryption_material=(
1004
+ self._encryption_material[0]
1005
+ if len(self._encryption_material) > 0
1006
+ else None
1007
+ ),
1006
1008
  )
1007
1009
  )
1008
1010
  self._source_from_stream.seek(0)
@@ -1035,9 +1037,11 @@ class SnowflakeFileTransferAgent:
1035
1037
  src_file_name=file_name,
1036
1038
  src_file_size=statinfo.st_size,
1037
1039
  stage_location_type=self._stage_location_type,
1038
- encryption_material=self._encryption_material[0]
1039
- if len(self._encryption_material) > 0
1040
- else None,
1040
+ encryption_material=(
1041
+ self._encryption_material[0]
1042
+ if len(self._encryption_material) > 0
1043
+ else None
1044
+ ),
1041
1045
  )
1042
1046
  )
1043
1047
  elif self._command_type == CMD_TYPE_DOWNLOAD:
@@ -1066,11 +1070,11 @@ class SnowflakeFileTransferAgent:
1066
1070
  stage_location_type=self._stage_location_type,
1067
1071
  local_location=self._local_location,
1068
1072
  presigned_url=url,
1069
- encryption_material=self._src_file_to_encryption_material[
1070
- file_name
1071
- ]
1072
- if file_name in self._src_file_to_encryption_material
1073
- else None,
1073
+ encryption_material=(
1074
+ self._src_file_to_encryption_material[file_name]
1075
+ if file_name in self._src_file_to_encryption_material
1076
+ else None
1077
+ ),
1074
1078
  )
1075
1079
  )
1076
1080
 
@@ -203,9 +203,11 @@ class SnowflakeGCSRestClient(SnowflakeStorageClient):
203
203
  encryption_metadata = EncryptionMetadata(
204
204
  key=encryptiondata["WrappedContentKey"]["EncryptedKey"],
205
205
  iv=encryptiondata["ContentEncryptionIV"],
206
- matdesc=response.headers[GCS_METADATA_MATDESC_KEY]
207
- if GCS_METADATA_MATDESC_KEY in response.headers
208
- else None,
206
+ matdesc=(
207
+ response.headers[GCS_METADATA_MATDESC_KEY]
208
+ if GCS_METADATA_MATDESC_KEY in response.headers
209
+ else None
210
+ ),
209
211
  )
210
212
 
211
213
  meta.gcs_file_header_digest = response.headers.get(GCS_METADATA_SFC_DIGEST)
@@ -359,9 +361,11 @@ class SnowflakeGCSRestClient(SnowflakeStorageClient):
359
361
  encryption_metadata = EncryptionMetadata(
360
362
  key=encryption_data["WrappedContentKey"]["EncryptedKey"],
361
363
  iv=encryption_data["ContentEncryptionIV"],
362
- matdesc=response.headers[GCS_METADATA_MATDESC_KEY]
363
- if GCS_METADATA_MATDESC_KEY in response.headers
364
- else None,
364
+ matdesc=(
365
+ response.headers[GCS_METADATA_MATDESC_KEY]
366
+ if GCS_METADATA_MATDESC_KEY in response.headers
367
+ else None
368
+ ),
365
369
  )
366
370
  meta.result_status = ResultStatus.UPLOADED
367
371
  return FileHeader(
@@ -226,8 +226,6 @@ void CArrowTableIterator::convertIfNeeded(ArrowSchema* columnSchema,
226
226
  scale =
227
227
  std::stoi(std::string(scaleString.data, scaleString.size_bytes));
228
228
  }
229
-
230
- logger->error(__FILE__, __func__, __LINE__, "scale: %d", scale);
231
229
  convertTimestampColumn_nanoarrow(&columnSchemaView, columnArray, scale,
232
230
  m_timezone);
233
231
  break;
@@ -832,9 +832,9 @@ class SnowflakeRestful:
832
832
  retry_ctx = RetryCtx(
833
833
  _include_retry_params=include_retry_params,
834
834
  _include_retry_reason=include_retry_reason,
835
- timeout=timeout
836
- if timeout is not None
837
- else self._connection.network_timeout,
835
+ timeout=(
836
+ timeout if timeout is not None else self._connection.network_timeout
837
+ ),
838
838
  backoff_generator=self._connection._backoff_generator,
839
839
  )
840
840
 
@@ -50,8 +50,8 @@ class SnowflakeOCSPAsn1Crypto(SnowflakeOCSP):
50
50
  # map signature algorithm name to digest class
51
51
  SIGNATURE_ALGORITHM_TO_DIGEST_CLASS = {
52
52
  "sha256": hashes.SHA256,
53
- "sha384": hashes.SHA3_384,
54
- "sha512": hashes.SHA3_512,
53
+ "sha384": hashes.SHA384,
54
+ "sha512": hashes.SHA512,
55
55
  }
56
56
 
57
57
  def encode_cert_id_key(self, hkey):
@@ -62,6 +62,7 @@ from . import constants
62
62
  from .backoff_policies import exponential_backoff
63
63
  from .cache import SFDictCache, SFDictFileCache
64
64
  from .telemetry import TelemetryField, generate_telemetry_data_dict
65
+ from .url_util import url_encode_str
65
66
 
66
67
 
67
68
  class OCSPResponseValidationResult(NamedTuple):
@@ -436,8 +437,9 @@ class OCSPServer:
436
437
 
437
438
  def generate_get_url(self, ocsp_url, b64data):
438
439
  parsed_url = urlsplit(ocsp_url)
440
+ url_encoded_b64data = url_encode_str(b64data)
439
441
  if self.OCSP_RETRY_URL is None:
440
- target_url = f"{ocsp_url}/{b64data}"
442
+ target_url = f"{ocsp_url}/{url_encoded_b64data}"
441
443
  else:
442
444
  # values of parsed_url.netloc and parsed_url.path based on oscp_url are as follows:
443
445
  # URL NETLOC PATH
@@ -447,7 +449,9 @@ class OCSPServer:
447
449
  # "http://oneocsp.microsoft.com/ocsp" "oneocsp.microsoft.com" "/ocsp"
448
450
  # The check below is to treat first two urls same
449
451
  path = parsed_url.path if parsed_url.path != "/" else ""
450
- target_url = self.OCSP_RETRY_URL.format(parsed_url.netloc + path, b64data)
452
+ target_url = self.OCSP_RETRY_URL.format(
453
+ parsed_url.netloc + path, url_encoded_b64data
454
+ )
451
455
 
452
456
  logger.debug("OCSP Retry URL is - %s", target_url)
453
457
  return target_url
@@ -366,9 +366,9 @@ class ResultBatch(abc.ABC):
366
366
  )
367
367
  time.sleep(sleep_timer)
368
368
 
369
- self._metrics[
370
- DownloadMetrics.download.value
371
- ] = download_metric.get_timing_millis()
369
+ self._metrics[DownloadMetrics.download.value] = (
370
+ download_metric.get_timing_millis()
371
+ )
372
372
  return response
373
373
 
374
374
  @abc.abstractmethod
@@ -664,11 +664,21 @@ class ArrowResultBatch(ResultBatch):
664
664
  ) -> Iterator[dict | Exception] | Iterator[tuple | Exception] | Iterator[Table]:
665
665
  """Create an iterator for the ResultBatch. Used by get_arrow_iter."""
666
666
  if self._local:
667
- return self._from_data(self._data, iter_unit)
667
+ try:
668
+ return self._from_data(self._data, iter_unit)
669
+ except Exception:
670
+ if connection and getattr(connection, "_debug_arrow_chunk", False):
671
+ logger.debug(f"arrow data can not be parsed: {self._data}")
672
+ raise
668
673
  response = self._download(connection=connection)
669
674
  logger.debug(f"started loading result batch id: {self.id}")
670
675
  with TimerContextManager() as load_metric:
671
- loaded_data = self._load(response, iter_unit)
676
+ try:
677
+ loaded_data = self._load(response, iter_unit)
678
+ except Exception:
679
+ if connection and getattr(connection, "_debug_arrow_chunk", False):
680
+ logger.debug(f"arrow data can not be parsed: {response}")
681
+ raise
672
682
  logger.debug(f"finished loading result batch id: {self.id}")
673
683
  self._metrics[DownloadMetrics.load.value] = load_metric.get_timing_millis()
674
684
  return loaded_data
@@ -174,12 +174,10 @@ class ResultSet(Iterable[list]):
174
174
  return self._create_iter(iter_unit=IterUnit.TABLE_UNIT, structure="arrow")
175
175
 
176
176
  @overload
177
- def _fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None:
178
- ...
177
+ def _fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None: ...
179
178
 
180
179
  @overload
181
- def _fetch_arrow_all(self, force_return_table: Literal[True]) -> Table:
182
- ...
180
+ def _fetch_arrow_all(self, force_return_table: Literal[True]) -> Table: ...
183
181
 
184
182
  def _fetch_arrow_all(self, force_return_table: bool = False) -> Table | None:
185
183
  """Fetches a single Arrow Table from all of the ``ResultBatch``."""
@@ -14,8 +14,7 @@ from platformdirs import PlatformDirs
14
14
 
15
15
  class PlatformDirsProto(Protocol):
16
16
  @property
17
- def user_config_path(self) -> pathlib.Path:
18
- ...
17
+ def user_config_path(self) -> pathlib.Path: ...
19
18
 
20
19
 
21
20
  def _resolve_platform_dirs() -> PlatformDirsProto:
@@ -74,7 +74,7 @@ class SnowflakeStorageClient(ABC):
74
74
  ) -> None:
75
75
  self.meta = meta
76
76
  self.stage_info = stage_info
77
- self.retry_count: dict[int | str, int] = defaultdict(lambda: 0)
77
+ self.retry_count: dict[int | str, int] = defaultdict(int)
78
78
  self.tmp_dir = tempfile.mkdtemp()
79
79
  self.data_file: str | None = None
80
80
  self.encryption_metadata: EncryptionMetadata | None = None
@@ -247,7 +247,7 @@ class SnowflakeStorageClient(ABC):
247
247
 
248
248
  def finish_upload(self) -> None:
249
249
  meta = self.meta
250
- if self.successful_transfers == self.num_of_chunks:
250
+ if self.successful_transfers == self.num_of_chunks and self.num_of_chunks != 0:
251
251
  if self.num_of_chunks > 1:
252
252
  self._complete_multipart_upload()
253
253
  meta.result_status = ResultStatus.UPLOADED
@@ -239,9 +239,9 @@ def generate_telemetry_data_dict(
239
239
  {
240
240
  TelemetryField.KEY_DRIVER_TYPE.value: CLIENT_NAME,
241
241
  TelemetryField.KEY_DRIVER_VERSION.value: SNOWFLAKE_CONNECTOR_VERSION,
242
- TelemetryField.KEY_SOURCE.value: connection.application
243
- if connection
244
- else CLIENT_NAME,
242
+ TelemetryField.KEY_SOURCE.value: (
243
+ connection.application if connection else CLIENT_NAME
244
+ ),
245
245
  **from_dict,
246
246
  }
247
247
  if not is_oob_telemetry