snowflake-connector-python 3.12.1__tar.gz → 3.12.2__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.12.1 → snowflake_connector_python-3.12.2}/DESCRIPTION.md +6 -0
  2. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/PKG-INFO +7 -1
  3. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/connection.py +34 -24
  4. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/cursor.py +8 -5
  5. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/network.py +15 -1
  6. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ocsp_snowflake.py +1 -1
  7. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/util_text.py +12 -7
  8. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/version.py +1 -1
  9. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/PKG-INFO +7 -1
  10. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/CONTRIBUTING.md +0 -0
  11. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/LICENSE.txt +0 -0
  12. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/MANIFEST.in +0 -0
  13. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/NOTICE +0 -0
  14. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/README.md +0 -0
  15. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/SECURITY.md +0 -0
  16. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/pyproject.toml +0 -0
  17. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/setup.cfg +0 -0
  18. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/setup.py +0 -0
  19. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/__init__.py +0 -0
  20. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/_query_context_cache.py +0 -0
  21. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/_sql_util.py +0 -0
  22. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/arrow_context.py +0 -0
  23. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/__init__.py +0 -0
  24. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/_auth.py +0 -0
  25. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/by_plugin.py +0 -0
  26. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/default.py +0 -0
  27. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/idtoken.py +0 -0
  28. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/keypair.py +0 -0
  29. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/oauth.py +0 -0
  30. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/okta.py +0 -0
  31. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  32. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/webbrowser.py +0 -0
  33. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/azure_storage_client.py +0 -0
  34. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/backoff_policies.py +0 -0
  35. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/bind_upload_agent.py +0 -0
  36. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/cache.py +0 -0
  37. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/compat.py +0 -0
  38. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/config_manager.py +0 -0
  39. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/connection_diagnostic.py +0 -0
  40. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/constants.py +0 -0
  41. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter.py +0 -0
  42. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_issue23517.py +0 -0
  43. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_null.py +0 -0
  44. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_snowsql.py +0 -0
  45. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/dbapi.py +0 -0
  46. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/description.py +0 -0
  47. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/encryption_util.py +0 -0
  48. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/errorcode.py +0 -0
  49. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/errors.py +0 -0
  50. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/feature.py +0 -0
  51. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_compression_type.py +0 -0
  52. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_transfer_agent.py +0 -0
  53. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_util.py +0 -0
  54. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/gcs_storage_client.py +0 -0
  55. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/gzip_decoder.py +0 -0
  56. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/local_storage_client.py +0 -0
  57. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/log_configuration.py +0 -0
  58. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  59. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  60. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  61. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  62. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  63. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  64. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  65. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  66. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  67. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  68. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  69. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  70. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  71. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  72. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  73. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  74. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  75. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  76. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  77. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  78. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  79. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  80. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  81. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  82. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  83. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  84. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  85. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  86. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  87. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  88. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  89. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  90. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  91. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  92. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  93. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  94. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  95. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  96. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  97. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  98. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  99. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  100. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  101. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  102. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  103. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  104. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  105. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  106. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  107. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  108. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  109. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  110. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  111. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  112. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  113. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  114. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  115. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  116. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  117. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  118. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  119. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  120. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  121. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  122. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  123. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  124. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  125. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  126. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  127. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  128. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  129. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  130. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  131. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  132. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  133. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  134. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  135. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  136. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  137. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  138. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  139. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  140. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  141. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  142. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  143. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  144. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  145. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  146. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/options.py +0 -0
  147. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/pandas_tools.py +0 -0
  148. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/proxy.py +0 -0
  149. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/py.typed +0 -0
  150. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/result_batch.py +0 -0
  151. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/result_set.py +0 -0
  152. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/s3_storage_client.py +0 -0
  153. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/secret_detector.py +0 -0
  154. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sf_dirs.py +0 -0
  155. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sfbinaryformat.py +0 -0
  156. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sfdatetime.py +0 -0
  157. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/snow_logging.py +0 -0
  158. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sqlstate.py +0 -0
  159. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  160. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  161. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/storage_client.py +0 -0
  162. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/telemetry.py +0 -0
  163. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/telemetry_oob.py +0 -0
  164. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/test_util.py +0 -0
  165. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/time_util.py +0 -0
  166. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/__init__.py +0 -0
  167. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_certs.py +0 -0
  168. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  169. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  170. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/probe_connection.py +0 -0
  171. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/url_util.py +0 -0
  172. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/__init__.py +0 -0
  173. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  174. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  175. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  176. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  177. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  178. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/api.py +0 -0
  179. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  180. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  181. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  182. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  183. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  184. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/help.py +0 -0
  185. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  186. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/models.py +0 -0
  187. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  188. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  189. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  190. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  191. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  192. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  193. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  194. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  195. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  196. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  197. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  198. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  199. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  200. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  201. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  202. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  203. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  204. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  205. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  206. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  207. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  208. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  209. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  210. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  211. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  212. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  213. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  214. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  215. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  216. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  217. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  218. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  219. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  220. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  221. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  222. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  223. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  224. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  225. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  226. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  227. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  228. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  229. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  230. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  231. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  232. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  233. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  234. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  235. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/requires.txt +0 -0
  236. {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -8,6 +8,12 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
8
8
 
9
9
  # Release Notes
10
10
 
11
+ - v3.12.2(September 11,2024)
12
+ - Improved error handling for asynchronous queries, providing more detailed and informative error messages when an async query fails.
13
+ - Improved inference of top-level domains for accounts specifying a region in China, now defaulting to snowflakecomputing.cn.
14
+ - Improved implementation of the `snowflake.connector.util_text.random_string` to reduce the likelihood of collisions.
15
+ - Updated the log level for OCSP fail-open warning messages from ERROR to WARNING.
16
+
11
17
  - v3.12.1(August 20,2024)
12
18
  - Fixed a bug that logged the session token when renewing a session.
13
19
  - Fixed a bug where disabling client telemetry did not work.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snowflake-connector-python
3
- Version: 3.12.1
3
+ Version: 3.12.2
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -85,6 +85,12 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
85
85
 
86
86
  # Release Notes
87
87
 
88
+ - v3.12.2(September 11,2024)
89
+ - Improved error handling for asynchronous queries, providing more detailed and informative error messages when an async query fails.
90
+ - Improved inference of top-level domains for accounts specifying a region in China, now defaulting to snowflakecomputing.cn.
91
+ - Improved implementation of the `snowflake.connector.util_text.random_string` to reduce the likelihood of collisions.
92
+ - Updated the log level for OCSP fail-open warning messages from ERROR to WARNING.
93
+
88
94
  - v3.12.1(August 20,2024)
89
95
  - Fixed a bug that logged the session token when renewing a session.
90
96
  - Fixed a bug where disabling client telemetry did not work.
@@ -1817,6 +1817,39 @@ class SnowflakeConnection:
1817
1817
  with suppress(Exception):
1818
1818
  self.close(retry=False)
1819
1819
 
1820
+ def _process_error_query_status(
1821
+ self,
1822
+ sf_qid: str,
1823
+ status_resp: dict,
1824
+ error_message: str = "",
1825
+ error_cls: type[Exception] = ProgrammingError,
1826
+ ) -> None:
1827
+ status_resp = status_resp or {}
1828
+ data = status_resp.get("data", {})
1829
+ queries = data.get("queries")
1830
+
1831
+ if sf_qid in self._async_sfqids:
1832
+ self._async_sfqids.pop(sf_qid, None)
1833
+ message = status_resp.get("message")
1834
+ if message is None:
1835
+ message = ""
1836
+ code = queries[0].get("errorCode", -1) if queries else -1
1837
+ sql_state = None
1838
+ if "data" in status_resp:
1839
+ message += queries[0].get("errorMessage", "") if queries else ""
1840
+ sql_state = data.get("sqlState")
1841
+ Error.errorhandler_wrapper(
1842
+ self,
1843
+ None,
1844
+ error_cls,
1845
+ {
1846
+ "msg": message or error_message,
1847
+ "errno": int(code),
1848
+ "sqlstate": sql_state,
1849
+ "sfqid": sf_qid,
1850
+ },
1851
+ )
1852
+
1820
1853
  def get_query_status(self, sf_qid: str) -> QueryStatus:
1821
1854
  """Retrieves the status of query with sf_qid.
1822
1855
 
@@ -1845,31 +1878,8 @@ class SnowflakeConnection:
1845
1878
  """
1846
1879
  status, status_resp = self._get_query_status(sf_qid)
1847
1880
  self._cache_query_status(sf_qid, status)
1848
- queries = status_resp["data"]["queries"]
1849
1881
  if self.is_an_error(status):
1850
- if sf_qid in self._async_sfqids:
1851
- self._async_sfqids.pop(sf_qid, None)
1852
- message = status_resp.get("message")
1853
- if message is None:
1854
- message = ""
1855
- code = queries[0].get("errorCode", -1)
1856
- sql_state = None
1857
- if "data" in status_resp:
1858
- message += (
1859
- queries[0].get("errorMessage", "") if len(queries) > 0 else ""
1860
- )
1861
- sql_state = status_resp["data"].get("sqlState")
1862
- Error.errorhandler_wrapper(
1863
- self,
1864
- None,
1865
- ProgrammingError,
1866
- {
1867
- "msg": message,
1868
- "errno": int(code),
1869
- "sqlstate": sql_state,
1870
- "sfqid": sf_qid,
1871
- },
1872
- )
1882
+ self._process_error_query_status(sf_qid, status_resp)
1873
1883
  return status
1874
1884
 
1875
1885
  def initialize_query_context_cache(self) -> None:
@@ -1638,7 +1638,8 @@ class SnowflakeCursor:
1638
1638
  no_data_counter = 0
1639
1639
  retry_pattern_pos = 0
1640
1640
  while True:
1641
- status = self.connection.get_query_status(sfqid)
1641
+ status, status_resp = self.connection._get_query_status(sfqid)
1642
+ self.connection._cache_query_status(sfqid, status)
1642
1643
  if not self.connection.is_still_running(status):
1643
1644
  break
1644
1645
  if status == QueryStatus.NO_DATA: # pragma: no cover
@@ -1655,10 +1656,12 @@ class SnowflakeCursor:
1655
1656
  if retry_pattern_pos < (len(ASYNC_RETRY_PATTERN) - 1):
1656
1657
  retry_pattern_pos += 1
1657
1658
  if status != QueryStatus.SUCCESS:
1658
- raise DatabaseError(
1659
- "Status of query '{}' is {}, results are unavailable".format(
1660
- sfqid, status.name
1661
- )
1659
+ logger.info(f"Status of query '{sfqid}' is {status.name}")
1660
+ self.connection._process_error_query_status(
1661
+ sfqid,
1662
+ status_resp,
1663
+ error_message=f"Status of query '{sfqid}' is {status.name}, results are unavailable",
1664
+ error_cls=DatabaseError,
1662
1665
  )
1663
1666
  self._inner_cursor.execute(f"select * from table(result_scan('{sfqid}'))")
1664
1667
  self._result = self._inner_cursor._result
@@ -892,6 +892,14 @@ class SnowflakeRestful:
892
892
  full_url = retry_ctx.add_retry_params(full_url)
893
893
  full_url = SnowflakeRestful.add_request_guid(full_url)
894
894
  is_fetch_query_status = kwargs.pop("is_fetch_query_status", False)
895
+ # raise_raw_http_failure is not a public parameter and may change in the future
896
+ # it enables raising raw http errors that are not handled by
897
+ # connector, connector handles the following http error:
898
+ # 1. FORBIDDEN error when trying to login
899
+ # 2. retryable http code defined in method is_retryable_http_code
900
+ # 3. UNAUTHORIZED error when using okta authentication
901
+ # raise_raw_http_failure doesn't work for the 3 mentioned cases.
902
+ raise_raw_http_failure = kwargs.pop("raise_raw_http_failure", False)
895
903
  try:
896
904
  return_object = self._request_exec(
897
905
  session=session,
@@ -900,6 +908,7 @@ class SnowflakeRestful:
900
908
  headers=headers,
901
909
  data=data,
902
910
  token=token,
911
+ raise_raw_http_failure=raise_raw_http_failure,
903
912
  **kwargs,
904
913
  )
905
914
  if return_object is not None:
@@ -967,7 +976,9 @@ class SnowflakeRestful:
967
976
  )
968
977
  return None # retry
969
978
  except Exception as e:
970
- if not no_retry:
979
+ if (
980
+ raise_raw_http_failure and isinstance(e, requests.exceptions.HTTPError)
981
+ ) or not no_retry:
971
982
  raise e
972
983
  logger.debug("Ignored error", exc_info=True)
973
984
  return {}
@@ -1036,6 +1047,7 @@ class SnowflakeRestful:
1036
1047
  binary_data_handler=None,
1037
1048
  socket_timeout: int | None = None,
1038
1049
  is_okta_authentication: bool = False,
1050
+ raise_raw_http_failure: bool = False,
1039
1051
  ):
1040
1052
  if socket_timeout is None:
1041
1053
  if self._connection.socket_timeout is not None:
@@ -1113,6 +1125,8 @@ class SnowflakeRestful:
1113
1125
  raise_okta_unauthorized_error(self._connection, raw_ret)
1114
1126
  return None # required for tests
1115
1127
  else:
1128
+ if raise_raw_http_failure:
1129
+ raw_ret.raise_for_status()
1116
1130
  raise_failed_request_error(
1117
1131
  self._connection, full_url, method, raw_ret
1118
1132
  )
@@ -1076,7 +1076,7 @@ class SnowflakeOCSP:
1076
1076
  "responder. Details:"
1077
1077
  )
1078
1078
  ocsp_warning = f"{static_warning} \n {ocsp_log}"
1079
- logger.error(ocsp_warning)
1079
+ logger.warning(ocsp_warning)
1080
1080
 
1081
1081
  def validate_by_direct_connection(
1082
1082
  self,
@@ -235,19 +235,24 @@ def _concatenate_statements(
235
235
 
236
236
  def construct_hostname(region: str | None, account: str) -> str:
237
237
  """Constructs hostname from region and account."""
238
+
239
+ def _is_china_region(r: str) -> bool:
240
+ # This is consistent with the Go driver:
241
+ # https://github.com/snowflakedb/gosnowflake/blob/f20a46475dce322f3f6b97b4a72f2807571e750b/dsn.go#L535
242
+ return r.lower().startswith("cn-")
243
+
238
244
  if region == "us-west-2":
239
245
  region = ""
240
246
  if region:
241
247
  if account.find(".") > 0:
242
248
  account = account[0 : account.find(".")]
243
- top_level_domain = (
244
- "com"
245
- if not any(substring in region for substring in ["cn-", "CN-"])
246
- else "cn"
247
- )
249
+ top_level_domain = "cn" if _is_china_region(region) else "com"
248
250
  host = f"{account}.{region}.snowflakecomputing.{top_level_domain}"
249
251
  else:
250
- host = f"{account}.snowflakecomputing.com"
252
+ top_level_domain = "com"
253
+ if account.find(".") > 0 and _is_china_region(account.split(".")[1]):
254
+ top_level_domain = "cn"
255
+ host = f"{account}.snowflakecomputing.{top_level_domain}"
251
256
  return host
252
257
 
253
258
 
@@ -282,5 +287,5 @@ def random_string(
282
287
  suffix: Suffix to add to random string generated.
283
288
  choices: A generator of things to choose from.
284
289
  """
285
- random_part = "".join([random.choice(choices) for _ in range(length)])
290
+ random_part = "".join([random.Random().choice(choices) for _ in range(length)])
286
291
  return "".join([prefix, random_part, suffix])
@@ -1,3 +1,3 @@
1
1
  # Update this for the versions
2
2
  # Don't change the forth version number from None
3
- VERSION = (3, 12, 1, None)
3
+ VERSION = (3, 12, 2, None)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snowflake-connector-python
3
- Version: 3.12.1
3
+ Version: 3.12.2
4
4
  Summary: Snowflake Connector for Python
5
5
  Home-page: https://www.snowflake.com/
6
6
  Author: Snowflake, Inc
@@ -85,6 +85,12 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
85
85
 
86
86
  # Release Notes
87
87
 
88
+ - v3.12.2(September 11,2024)
89
+ - Improved error handling for asynchronous queries, providing more detailed and informative error messages when an async query fails.
90
+ - Improved inference of top-level domains for accounts specifying a region in China, now defaulting to snowflakecomputing.cn.
91
+ - Improved implementation of the `snowflake.connector.util_text.random_string` to reduce the likelihood of collisions.
92
+ - Updated the log level for OCSP fail-open warning messages from ERROR to WARNING.
93
+
88
94
  - v3.12.1(August 20,2024)
89
95
  - Fixed a bug that logged the session token when renewing a session.
90
96
  - Fixed a bug where disabling client telemetry did not work.