snowflake-connector-python 3.12.0__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.0 → snowflake_connector_python-3.12.2}/DESCRIPTION.md +15 -0
  2. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/PKG-INFO +17 -2
  3. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/README.md +29 -0
  4. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/setup.cfg +1 -2
  5. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/_auth.py +1 -1
  6. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/okta.py +1 -1
  7. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/webbrowser.py +1 -1
  8. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/connection.py +58 -44
  9. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/cursor.py +8 -5
  10. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/errors.py +0 -6
  11. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/network.py +37 -69
  12. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ocsp_snowflake.py +1 -12
  13. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sf_dirs.py +4 -4
  14. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/util_text.py +12 -7
  15. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/version.py +1 -1
  16. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/PKG-INFO +17 -2
  17. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -1
  18. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
  19. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/CONTRIBUTING.md +0 -0
  20. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/LICENSE.txt +0 -0
  21. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/MANIFEST.in +0 -0
  22. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/NOTICE +0 -0
  23. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/SECURITY.md +0 -0
  24. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/pyproject.toml +0 -0
  25. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/setup.py +0 -0
  26. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/__init__.py +0 -0
  27. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/_query_context_cache.py +0 -0
  28. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/_sql_util.py +0 -0
  29. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/arrow_context.py +0 -0
  30. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/__init__.py +0 -0
  31. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/by_plugin.py +0 -0
  32. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/default.py +0 -0
  33. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/idtoken.py +0 -0
  34. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/keypair.py +0 -0
  35. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/oauth.py +0 -0
  36. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  37. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/azure_storage_client.py +0 -0
  38. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/backoff_policies.py +0 -0
  39. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/bind_upload_agent.py +0 -0
  40. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/cache.py +0 -0
  41. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/compat.py +0 -0
  42. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/config_manager.py +0 -0
  43. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/connection_diagnostic.py +0 -0
  44. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/constants.py +0 -0
  45. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter.py +0 -0
  46. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_issue23517.py +0 -0
  47. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_null.py +0 -0
  48. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_snowsql.py +0 -0
  49. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/dbapi.py +0 -0
  50. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/description.py +0 -0
  51. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/encryption_util.py +0 -0
  52. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/errorcode.py +0 -0
  53. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/feature.py +0 -0
  54. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_compression_type.py +0 -0
  55. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_transfer_agent.py +0 -0
  56. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_util.py +0 -0
  57. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/gcs_storage_client.py +0 -0
  58. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/gzip_decoder.py +0 -0
  59. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/local_storage_client.py +0 -0
  60. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/log_configuration.py +0 -0
  61. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  62. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  63. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  64. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  65. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  66. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  67. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  68. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  69. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  70. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  71. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  72. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  73. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  74. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  75. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  76. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  77. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  78. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  79. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  80. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  81. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  82. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  83. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  84. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  85. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  86. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  87. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  88. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  89. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  90. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  91. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  92. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  93. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  94. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  95. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  96. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  97. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  98. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  99. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  100. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  101. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  102. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  103. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  104. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  105. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  106. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  107. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  108. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  109. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  110. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  111. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  112. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  113. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  114. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  115. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  116. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  117. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  118. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  119. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  120. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  121. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  122. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  123. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  124. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  125. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  126. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  127. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  128. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  129. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  130. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  131. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  132. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  133. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  134. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  135. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  136. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  137. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  138. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  139. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  140. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  141. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  142. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  143. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  144. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  145. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  146. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  147. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  148. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  149. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/options.py +0 -0
  150. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/pandas_tools.py +0 -0
  151. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/proxy.py +0 -0
  152. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/py.typed +0 -0
  153. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/result_batch.py +0 -0
  154. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/result_set.py +0 -0
  155. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/s3_storage_client.py +0 -0
  156. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/secret_detector.py +0 -0
  157. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sfbinaryformat.py +0 -0
  158. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sfdatetime.py +0 -0
  159. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/snow_logging.py +0 -0
  160. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sqlstate.py +0 -0
  161. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  162. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  163. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/storage_client.py +0 -0
  164. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/telemetry.py +0 -0
  165. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/telemetry_oob.py +0 -0
  166. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/test_util.py +0 -0
  167. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/time_util.py +0 -0
  168. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/__init__.py +0 -0
  169. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_certs.py +0 -0
  170. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  171. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  172. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/probe_connection.py +0 -0
  173. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/url_util.py +0 -0
  174. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/__init__.py +0 -0
  175. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  176. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  177. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  178. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  179. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  180. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/api.py +0 -0
  181. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  182. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  183. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  184. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  185. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  186. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/help.py +0 -0
  187. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  188. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/models.py +0 -0
  189. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  190. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  191. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  192. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  193. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  194. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  195. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  196. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  197. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  198. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  199. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  200. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  201. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  202. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  203. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  204. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  205. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  206. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  207. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  208. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  209. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  210. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  211. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  212. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  213. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  214. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  215. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  216. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  217. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  218. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  219. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  220. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  221. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  222. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  223. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  224. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  225. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  226. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  227. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  228. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  229. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  230. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  231. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  232. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  233. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  234. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  235. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  236. {snowflake_connector_python-3.12.0 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -8,6 +8,21 @@ 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
+
17
+ - v3.12.1(August 20,2024)
18
+ - Fixed a bug that logged the session token when renewing a session.
19
+ - Fixed a bug where disabling client telemetry did not work.
20
+ - Fixed a bug where passing `login_timeout` as a string raised a `TypeError` during the login retry step.
21
+ - Use `pathlib` instead of `os` for default config file location resolution.
22
+ - Removed upper `cryptogaphy` version pin.
23
+ - Removed reference to script `snowflake-export-certs` (its backing module was already removed long ago)
24
+ - Enhanced retry mechanism for handling transient network failures during query result polling when no server response is received.
25
+
11
26
  - v3.12.0(July 24,2024)
12
27
  - Set default connection timeout of 10 seconds and socket read timeout of 10 minutes for HTTP calls in file transfer.
13
28
  - Optimized `to_pandas()` performance by fully parallel downloading logic.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snowflake-connector-python
3
- Version: 3.12.0
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
@@ -40,7 +40,7 @@ License-File: LICENSE.txt
40
40
  License-File: NOTICE
41
41
  Requires-Dist: asn1crypto<2.0.0,>0.24.0
42
42
  Requires-Dist: cffi<2.0.0,>=1.9
43
- Requires-Dist: cryptography<43.0.0,>=3.1.0
43
+ Requires-Dist: cryptography>=3.1.0
44
44
  Requires-Dist: pyOpenSSL<25.0.0,>=16.2.0
45
45
  Requires-Dist: pyjwt<3.0.0
46
46
  Requires-Dist: pytz
@@ -85,6 +85,21 @@ 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
+
94
+ - v3.12.1(August 20,2024)
95
+ - Fixed a bug that logged the session token when renewing a session.
96
+ - Fixed a bug where disabling client telemetry did not work.
97
+ - Fixed a bug where passing `login_timeout` as a string raised a `TypeError` during the login retry step.
98
+ - Use `pathlib` instead of `os` for default config file location resolution.
99
+ - Removed upper `cryptogaphy` version pin.
100
+ - Removed reference to script `snowflake-export-certs` (its backing module was already removed long ago)
101
+ - Enhanced retry mechanism for handling transient network failures during query result polling when no server response is received.
102
+
88
103
  - v3.12.0(July 24,2024)
89
104
  - Set default connection timeout of 10 seconds and socket read timeout of 10 minutes for HTTP calls in file transfer.
90
105
  - Optimized `to_pandas()` performance by fully parallel downloading logic.
@@ -52,3 +52,32 @@ These tools are integrated into `tox` to allow us to easily set them up universa
52
52
  * **coverage**: Runs `coverage.py` to combine generated coverage data files. Useful when multiple categories were run
53
53
  and we would like to have an overall coverage data file created for them.
54
54
  * **flake8**: (Deprecated) Similar to `fix_lint`, but only runs `flake8` checks.
55
+
56
+ ## Disable telemetry
57
+
58
+ By default, the Snowflake Connector for Python collects telemetry data to improve the product.
59
+ You can disable the telemetry data collection by setting the session parameter `CLIENT_TELEMETRY_ENABLED` to `False`
60
+ when connecting to Snowflake:
61
+ ```python
62
+ import snowflake.connector
63
+ conn = snowflake.connector.connect(
64
+ user='XXXX',
65
+ password='XXXX',
66
+ account='XXXX',
67
+ session_parameters={
68
+ "CLIENT_TELEMETRY_ENABLED": False,
69
+ }
70
+ )
71
+ ```
72
+
73
+ Alternatively, you can disable the telemetry data collection
74
+ by setting the `telemetry_enabled` property to `False` on the `SnowflakeConnection` object:
75
+ ```python
76
+ import snowflake.connector
77
+ conn = snowflake.connector.connect(
78
+ user='XXXX',
79
+ password='XXXX',
80
+ account='XXXX',
81
+ )
82
+ conn.telemetry_enabled = False
83
+ ```
@@ -45,7 +45,7 @@ packages = find_namespace:
45
45
  install_requires =
46
46
  asn1crypto>0.24.0,<2.0.0
47
47
  cffi>=1.9,<2.0.0
48
- cryptography>=3.1.0,<43.0.0
48
+ cryptography>=3.1.0
49
49
  pyOpenSSL>=16.2.0,<25.0.0
50
50
  pyjwt<3.0.0
51
51
  pytz
@@ -76,7 +76,6 @@ console_scripts =
76
76
  snowflake-dump-ocsp-response = snowflake.connector.tool.dump_ocsp_response:main
77
77
  snowflake-dump-ocsp-response-cache = snowflake.connector.tool.dump_ocsp_response_cache:main
78
78
  snowflake-dump-certs = snowflake.connector.tool.dump_certs:main
79
- snowflake-export-certs = snowflake.connector.tool.export_certs:main
80
79
 
81
80
  [options.extras_require]
82
81
  development =
@@ -198,7 +198,7 @@ class Auth:
198
198
  self._rest._connection._internal_application_name,
199
199
  self._rest._connection._internal_application_version,
200
200
  self._rest._connection._ocsp_mode(),
201
- self._rest._connection._login_timeout,
201
+ self._rest._connection.login_timeout,
202
202
  self._rest._connection._network_timeout,
203
203
  self._rest._connection._socket_timeout,
204
204
  )
@@ -170,7 +170,7 @@ class AuthByOkta(AuthByPlugin):
170
170
  conn._internal_application_name,
171
171
  conn._internal_application_version,
172
172
  conn._ocsp_mode(),
173
- conn._login_timeout,
173
+ conn.login_timeout,
174
174
  conn._network_timeout,
175
175
  )
176
176
 
@@ -462,7 +462,7 @@ You can close this window now and go back where you started from.
462
462
  conn._rest._connection._internal_application_name,
463
463
  conn._rest._connection._internal_application_version,
464
464
  conn._rest._connection._ocsp_mode(),
465
- conn._rest._connection._login_timeout,
465
+ conn._rest._connection.login_timeout,
466
466
  conn._rest._connection._network_timeout,
467
467
  )
468
468
 
@@ -61,7 +61,6 @@ from .constants import (
61
61
  PARAMETER_CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY,
62
62
  PARAMETER_CLIENT_STORE_TEMPORARY_CREDENTIAL,
63
63
  PARAMETER_CLIENT_TELEMETRY_ENABLED,
64
- PARAMETER_CLIENT_TELEMETRY_OOB_ENABLED,
65
64
  PARAMETER_CLIENT_VALIDATE_DEFAULT_PARAMETERS,
66
65
  PARAMETER_ENABLE_STAGE_S3_PRIVATELINK_FOR_US_EAST_1,
67
66
  PARAMETER_QUERY_CONTEXT_CACHE_SIZE,
@@ -106,7 +105,6 @@ from .network import (
106
105
  )
107
106
  from .sqlstate import SQLSTATE_CONNECTION_NOT_EXISTS, SQLSTATE_FEATURE_NOT_SUPPORTED
108
107
  from .telemetry import TelemetryClient, TelemetryData, TelemetryField
109
- from .telemetry_oob import TelemetryService
110
108
  from .time_util import HeartBeatTimer, get_time_millis
111
109
  from .url_util import extract_top_level_domain_from_hostname
112
110
  from .util_text import construct_hostname, parse_account, split_statements
@@ -409,7 +407,8 @@ class SnowflakeConnection:
409
407
  self.messages = []
410
408
  self._async_sfqids: dict[str, None] = {}
411
409
  self._done_async_sfqids: dict[str, None] = {}
412
- self.telemetry_enabled = False
410
+ self._client_param_telemetry_enabled = True
411
+ self._server_param_telemetry_enabled = False
413
412
  self._session_parameters: dict[str, str | int | bool] = {}
414
413
  logger.info(
415
414
  "Snowflake Connector for Python Version: %s, "
@@ -626,11 +625,22 @@ class SnowflakeConnection:
626
625
 
627
626
  @property
628
627
  def telemetry_enabled(self) -> bool:
629
- return self._telemetry_enabled
628
+ return bool(
629
+ self._client_param_telemetry_enabled
630
+ and self._server_param_telemetry_enabled
631
+ )
630
632
 
631
633
  @telemetry_enabled.setter
632
634
  def telemetry_enabled(self, value) -> None:
633
- self._telemetry_enabled = True if value else False
635
+ self._client_param_telemetry_enabled = True if value else False
636
+ if (
637
+ self._client_param_telemetry_enabled
638
+ and not self._server_param_telemetry_enabled
639
+ ):
640
+ logger.info(
641
+ "Telemetry has been disabled by the session parameter CLIENT_TELEMETRY_ENABLED."
642
+ " Set session parameter CLIENT_TELEMETRY_ENABLED to true to enable telemetry."
643
+ )
634
644
 
635
645
  @property
636
646
  def service_name(self) -> str | None:
@@ -720,7 +730,6 @@ class SnowflakeConnection:
720
730
  logger.debug("connect")
721
731
  if len(kwargs) > 0:
722
732
  self.__config(**kwargs)
723
- TelemetryService.get_instance().update_context(kwargs)
724
733
 
725
734
  if self.enable_connection_diag:
726
735
  exceptions_dict = {}
@@ -777,7 +786,7 @@ class SnowflakeConnection:
777
786
 
778
787
  # close telemetry first, since it needs rest to send remaining data
779
788
  logger.info("closed")
780
- self._telemetry.close(send_on_close=retry)
789
+ self._telemetry.close(send_on_close=bool(retry and self.telemetry_enabled))
781
790
  if (
782
791
  self._all_async_queries_finished()
783
792
  and not self._server_session_keep_alive
@@ -1009,7 +1018,7 @@ class SnowflakeConnection:
1009
1018
  elif self._authenticator == DEFAULT_AUTHENTICATOR:
1010
1019
  self.auth_class = AuthByDefault(
1011
1020
  password=self._password,
1012
- timeout=self._login_timeout,
1021
+ timeout=self.login_timeout,
1013
1022
  backoff_generator=self._backoff_generator,
1014
1023
  )
1015
1024
  elif self._authenticator == EXTERNAL_BROWSER_AUTHENTICATOR:
@@ -1029,7 +1038,7 @@ class SnowflakeConnection:
1029
1038
  protocol=self._protocol,
1030
1039
  host=self.host,
1031
1040
  port=self.port,
1032
- timeout=self._login_timeout,
1041
+ timeout=self.login_timeout,
1033
1042
  backoff_generator=self._backoff_generator,
1034
1043
  )
1035
1044
  else:
@@ -1039,7 +1048,7 @@ class SnowflakeConnection:
1039
1048
  protocol=self._protocol,
1040
1049
  host=self.host,
1041
1050
  port=self.port,
1042
- timeout=self._login_timeout,
1051
+ timeout=self.login_timeout,
1043
1052
  backoff_generator=self._backoff_generator,
1044
1053
  )
1045
1054
 
@@ -1054,13 +1063,13 @@ class SnowflakeConnection:
1054
1063
 
1055
1064
  self.auth_class = AuthByKeyPair(
1056
1065
  private_key=private_key,
1057
- timeout=self._login_timeout,
1066
+ timeout=self.login_timeout,
1058
1067
  backoff_generator=self._backoff_generator,
1059
1068
  )
1060
1069
  elif self._authenticator == OAUTH_AUTHENTICATOR:
1061
1070
  self.auth_class = AuthByOAuth(
1062
1071
  oauth_token=self._token,
1063
- timeout=self._login_timeout,
1072
+ timeout=self.login_timeout,
1064
1073
  backoff_generator=self._backoff_generator,
1065
1074
  )
1066
1075
  elif self._authenticator == USR_PWD_MFA_AUTHENTICATOR:
@@ -1076,14 +1085,14 @@ class SnowflakeConnection:
1076
1085
  self.auth_class = AuthByUsrPwdMfa(
1077
1086
  password=self._password,
1078
1087
  mfa_token=self.rest.mfa_token,
1079
- timeout=self._login_timeout,
1088
+ timeout=self.login_timeout,
1080
1089
  backoff_generator=self._backoff_generator,
1081
1090
  )
1082
1091
  else:
1083
1092
  # okta URL, e.g., https://<account>.okta.com/
1084
1093
  self.auth_class = AuthByOkta(
1085
1094
  application=self.application,
1086
- timeout=self._login_timeout,
1095
+ timeout=self.login_timeout,
1087
1096
  backoff_generator=self._backoff_generator,
1088
1097
  )
1089
1098
 
@@ -1717,12 +1726,7 @@ class SnowflakeConnection:
1717
1726
  for name, value in parameters.items():
1718
1727
  self._session_parameters[name] = value
1719
1728
  if PARAMETER_CLIENT_TELEMETRY_ENABLED == name:
1720
- self.telemetry_enabled = value
1721
- elif PARAMETER_CLIENT_TELEMETRY_OOB_ENABLED == name:
1722
- if value:
1723
- TelemetryService.get_instance().enable()
1724
- else:
1725
- TelemetryService.get_instance().disable()
1729
+ self._server_param_telemetry_enabled = value
1726
1730
  elif PARAMETER_CLIENT_SESSION_KEEP_ALIVE == name:
1727
1731
  # Only set if the local config is None.
1728
1732
  # Always give preference to user config.
@@ -1813,6 +1817,39 @@ class SnowflakeConnection:
1813
1817
  with suppress(Exception):
1814
1818
  self.close(retry=False)
1815
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
+
1816
1853
  def get_query_status(self, sf_qid: str) -> QueryStatus:
1817
1854
  """Retrieves the status of query with sf_qid.
1818
1855
 
@@ -1841,31 +1878,8 @@ class SnowflakeConnection:
1841
1878
  """
1842
1879
  status, status_resp = self._get_query_status(sf_qid)
1843
1880
  self._cache_query_status(sf_qid, status)
1844
- queries = status_resp["data"]["queries"]
1845
1881
  if self.is_an_error(status):
1846
- if sf_qid in self._async_sfqids:
1847
- self._async_sfqids.pop(sf_qid, None)
1848
- message = status_resp.get("message")
1849
- if message is None:
1850
- message = ""
1851
- code = queries[0].get("errorCode", -1)
1852
- sql_state = None
1853
- if "data" in status_resp:
1854
- message += (
1855
- queries[0].get("errorMessage", "") if len(queries) > 0 else ""
1856
- )
1857
- sql_state = status_resp["data"].get("sqlState")
1858
- Error.errorhandler_wrapper(
1859
- self,
1860
- None,
1861
- ProgrammingError,
1862
- {
1863
- "msg": message,
1864
- "errno": int(code),
1865
- "sqlstate": sql_state,
1866
- "sfqid": sf_qid,
1867
- },
1868
- )
1882
+ self._process_error_query_status(sf_qid, status_resp)
1869
1883
  return status
1870
1884
 
1871
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
@@ -15,7 +15,6 @@ from typing import TYPE_CHECKING, Any
15
15
  from .compat import BASE_EXCEPTION_CLASS
16
16
  from .secret_detector import SecretDetector
17
17
  from .telemetry import TelemetryData, TelemetryField
18
- from .telemetry_oob import TelemetryService
19
18
  from .time_util import get_time_millis
20
19
 
21
20
  if TYPE_CHECKING: # pragma: no cover
@@ -167,11 +166,6 @@ class Error(BASE_EXCEPTION_CLASS):
167
166
  )
168
167
  except AttributeError:
169
168
  logger.debug("Cursor failed to log to telemetry.", exc_info=True)
170
- elif connection is None:
171
- # Send with out-of-band telemetry
172
-
173
- telemetry_oob = TelemetryService.get_instance()
174
- telemetry_oob.log_general_exception(self.__class__.__name__, telemetry_data)
175
169
 
176
170
  def exception_telemetry(
177
171
  self,
@@ -13,7 +13,6 @@ import json
13
13
  import logging
14
14
  import re
15
15
  import time
16
- import traceback
17
16
  import uuid
18
17
  from collections import OrderedDict
19
18
  from threading import Lock
@@ -92,9 +91,7 @@ from .sqlstate import (
92
91
  SQLSTATE_CONNECTION_NOT_EXISTS,
93
92
  SQLSTATE_CONNECTION_REJECTED,
94
93
  SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED,
95
- SQLSTATE_IO_ERROR,
96
94
  )
97
- from .telemetry_oob import TelemetryService
98
95
  from .time_util import (
99
96
  DEFAULT_MASTER_VALIDITY_IN_SECONDS,
100
97
  TimeoutBackoffCtx,
@@ -230,14 +227,6 @@ def raise_failed_request_error(
230
227
  method: str,
231
228
  response: Response,
232
229
  ) -> None:
233
- TelemetryService.get_instance().log_http_request_error(
234
- f"HttpError{response.status_code}",
235
- url,
236
- method,
237
- SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED,
238
- ER_FAILED_TO_REQUEST,
239
- response=response,
240
- )
241
230
  Error.errorhandler_wrapper(
242
231
  connection,
243
232
  None,
@@ -568,7 +557,7 @@ class SnowflakeRestful:
568
557
  token=header_token,
569
558
  )
570
559
  if ret.get("success") and ret.get("data", {}).get("sessionToken"):
571
- logger.debug("success: %s", ret)
560
+ logger.debug("success: %s", SecretDetector.mask_secrets(str(ret)))
572
561
  self.update_tokens(
573
562
  ret["data"]["sessionToken"],
574
563
  ret["data"].get("masterToken"),
@@ -577,7 +566,7 @@ class SnowflakeRestful:
577
566
  logger.debug("updating session completed")
578
567
  return ret
579
568
  else:
580
- logger.debug("failed: %s", ret)
569
+ logger.debug("failed: %s", SecretDetector.mask_secrets(str(ret)))
581
570
  err = ret.get("message")
582
571
  if err is not None and ret.get("data"):
583
572
  err += ret["data"].get("errorMessage", "")
@@ -690,6 +679,7 @@ class SnowflakeRestful:
690
679
  headers: dict[str, str],
691
680
  token: str = None,
692
681
  timeout: int | None = None,
682
+ is_fetch_query_status: bool = False,
693
683
  ) -> dict[str, Any]:
694
684
  if "Content-Encoding" in headers:
695
685
  del headers["Content-Encoding"]
@@ -703,6 +693,7 @@ class SnowflakeRestful:
703
693
  headers,
704
694
  timeout=timeout,
705
695
  token=token,
696
+ is_fetch_query_status=is_fetch_query_status,
706
697
  )
707
698
  if ret.get("code") == SESSION_EXPIRED_GS_CODE:
708
699
  try:
@@ -717,7 +708,12 @@ class SnowflakeRestful:
717
708
  )
718
709
  )
719
710
  if ret.get("success"):
720
- return self._get_request(url, headers, token=self.token)
711
+ return self._get_request(
712
+ url,
713
+ headers,
714
+ token=self.token,
715
+ is_fetch_query_status=is_fetch_query_status,
716
+ )
721
717
 
722
718
  return ret
723
719
 
@@ -790,7 +786,13 @@ class SnowflakeRestful:
790
786
  result_url = ret["data"]["getResultUrl"]
791
787
  logger.debug("ping pong starting...")
792
788
  ret = self._get_request(
793
- result_url, headers, token=self.token, timeout=timeout
789
+ result_url,
790
+ headers,
791
+ token=self.token,
792
+ timeout=timeout,
793
+ is_fetch_query_status=bool(
794
+ re.match(r"^/queries/.+/result$", result_url)
795
+ ),
794
796
  )
795
797
  logger.debug("ret[code] = %s", ret.get("code", "N/A"))
796
798
  logger.debug("ping pong done")
@@ -889,6 +891,15 @@ class SnowflakeRestful:
889
891
 
890
892
  full_url = retry_ctx.add_retry_params(full_url)
891
893
  full_url = SnowflakeRestful.add_request_guid(full_url)
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)
892
903
  try:
893
904
  return_object = self._request_exec(
894
905
  session=session,
@@ -897,37 +908,18 @@ class SnowflakeRestful:
897
908
  headers=headers,
898
909
  data=data,
899
910
  token=token,
911
+ raise_raw_http_failure=raise_raw_http_failure,
900
912
  **kwargs,
901
913
  )
902
914
  if return_object is not None:
903
915
  return return_object
916
+ if is_fetch_query_status:
917
+ err_msg = "fetch query status failed and http request returned None, this is usually caused by transient network failures, retrying..."
918
+ logger.info(err_msg)
919
+ raise RetryRequest(err_msg)
904
920
  self._handle_unknown_error(method, full_url, headers, data, conn)
905
- TelemetryService.get_instance().log_http_request_error(
906
- "HttpRequestUnknownError",
907
- full_url,
908
- method,
909
- SQLSTATE_IO_ERROR,
910
- ER_FAILED_TO_REQUEST,
911
- retry_timeout=retry_ctx.timeout,
912
- retry_count=retry_ctx.current_retry_count,
913
- )
914
921
  return {}
915
922
  except RetryRequest as e:
916
- if (
917
- retry_ctx.current_retry_count
918
- == TelemetryService.get_instance().num_of_retry_to_trigger_telemetry
919
- ):
920
- TelemetryService.get_instance().log_http_request_error(
921
- "HttpRequestRetry%dTimes" % retry_ctx.current_retry_count,
922
- full_url,
923
- method,
924
- SQLSTATE_IO_ERROR,
925
- ER_FAILED_TO_REQUEST,
926
- retry_timeout=retry_ctx.timeout,
927
- retry_count=retry_ctx.current_retry_count,
928
- exception=str(e),
929
- stack_trace=traceback.format_exc(),
930
- )
931
923
  cause = e.args[0]
932
924
  if no_retry:
933
925
  self.log_and_handle_http_error_with_cause(
@@ -984,7 +976,9 @@ class SnowflakeRestful:
984
976
  )
985
977
  return None # retry
986
978
  except Exception as e:
987
- if not no_retry:
979
+ if (
980
+ raise_raw_http_failure and isinstance(e, requests.exceptions.HTTPError)
981
+ ) or not no_retry:
988
982
  raise e
989
983
  logger.debug("Ignored error", exc_info=True)
990
984
  return {}
@@ -1001,17 +995,6 @@ class SnowflakeRestful:
1001
995
  ) -> None:
1002
996
  cause = e.args[0]
1003
997
  logger.error(cause, exc_info=True)
1004
- TelemetryService.get_instance().log_http_request_error(
1005
- "HttpRequestRetryTimeout" if timed_out else f"HttpRequestError: {cause}",
1006
- full_url,
1007
- method,
1008
- SQLSTATE_IO_ERROR,
1009
- ER_FAILED_TO_REQUEST,
1010
- retry_timeout=retry_timeout,
1011
- retry_count=retry_count,
1012
- exception=str(e),
1013
- stack_trace=traceback.format_exc(),
1014
- )
1015
998
  if isinstance(cause, Error):
1016
999
  Error.errorhandler_wrapper_from_cause(conn, cause)
1017
1000
  else:
@@ -1064,6 +1047,7 @@ class SnowflakeRestful:
1064
1047
  binary_data_handler=None,
1065
1048
  socket_timeout: int | None = None,
1066
1049
  is_okta_authentication: bool = False,
1050
+ raise_raw_http_failure: bool = False,
1067
1051
  ):
1068
1052
  if socket_timeout is None:
1069
1053
  if self._connection.socket_timeout is not None:
@@ -1141,6 +1125,8 @@ class SnowflakeRestful:
1141
1125
  raise_okta_unauthorized_error(self._connection, raw_ret)
1142
1126
  return None # required for tests
1143
1127
  else:
1128
+ if raise_raw_http_failure:
1129
+ raw_ret.raise_for_status()
1144
1130
  raise_failed_request_error(
1145
1131
  self._connection, full_url, method, raw_ret
1146
1132
  )
@@ -1149,15 +1135,6 @@ class SnowflakeRestful:
1149
1135
  raw_ret.close() # ensure response is closed
1150
1136
  except SSLError as se:
1151
1137
  logger.debug("Hit non-retryable SSL error, %s", str(se))
1152
- TelemetryService.get_instance().log_http_request_error(
1153
- "CertificateException%s" % str(se),
1154
- full_url,
1155
- method,
1156
- SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED,
1157
- ER_FAILED_TO_REQUEST,
1158
- exception=se,
1159
- stack_trace=traceback.format_exc(),
1160
- )
1161
1138
 
1162
1139
  except (
1163
1140
  BadStatusLine,
@@ -1190,15 +1167,6 @@ class SnowflakeRestful:
1190
1167
  )
1191
1168
  raise RetryRequest(err)
1192
1169
  except Exception as err:
1193
- TelemetryService.get_instance().log_http_request_error(
1194
- "HttpException%s" % str(err),
1195
- full_url,
1196
- method,
1197
- SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED,
1198
- ER_FAILED_TO_REQUEST,
1199
- exception=err,
1200
- stack_trace=traceback.format_exc(),
1201
- )
1202
1170
  raise err
1203
1171
 
1204
1172
  def make_requests_session(self) -> Session:
@@ -13,7 +13,6 @@ import re
13
13
  import sys
14
14
  import tempfile
15
15
  import time
16
- import traceback
17
16
  from base64 import b64decode, b64encode
18
17
  from datetime import datetime, timezone
19
18
  from logging import getLogger
@@ -56,7 +55,6 @@ from snowflake.connector.errorcode import (
56
55
  )
57
56
  from snowflake.connector.errors import RevocationCheckError
58
57
  from snowflake.connector.network import PYTHON_CONNECTOR_USER_AGENT
59
- from snowflake.connector.telemetry_oob import TelemetryService
60
58
 
61
59
  from . import constants
62
60
  from .backoff_policies import exponential_backoff
@@ -250,15 +248,6 @@ class OCSPTelemetryData:
250
248
  is_oob_telemetry=True,
251
249
  )
252
250
 
253
- telemetry_client = TelemetryService.get_instance()
254
- telemetry_client.log_ocsp_exception(
255
- event_type,
256
- telemetry_data,
257
- exception=str(exception),
258
- stack_trace=traceback.format_exc(),
259
- urgent=urgent,
260
- )
261
-
262
251
  return telemetry_data
263
252
  # To be updated once Python Driver has out of band telemetry.
264
253
  # telemetry_client = TelemetryClient()
@@ -1087,7 +1076,7 @@ class SnowflakeOCSP:
1087
1076
  "responder. Details:"
1088
1077
  )
1089
1078
  ocsp_warning = f"{static_warning} \n {ocsp_log}"
1090
- logger.error(ocsp_warning)
1079
+ logger.warning(ocsp_warning)
1091
1080
 
1092
1081
  def validate_by_direct_connection(
1093
1082
  self,