snowflake-connector-python 3.11.0__tar.gz → 3.12.1__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.11.0 → snowflake_connector_python-3.12.1}/DESCRIPTION.md +18 -0
  2. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/PKG-INFO +21 -3
  3. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/README.md +29 -0
  4. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/setup.cfg +2 -3
  5. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/_auth.py +1 -1
  6. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/okta.py +1 -1
  7. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/webbrowser.py +1 -1
  8. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/connection.py +45 -26
  9. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/connection_diagnostic.py +12 -5
  10. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/constants.py +13 -0
  11. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/cursor.py +7 -0
  12. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/errors.py +0 -6
  13. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/network.py +32 -69
  14. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ocsp_snowflake.py +21 -21
  15. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/result_set.py +55 -32
  16. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sf_dirs.py +4 -4
  17. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ssl_wrap_socket.py +1 -0
  18. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/storage_client.py +8 -1
  19. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/telemetry_oob.py +3 -3
  20. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/url_util.py +10 -0
  21. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/util_text.py +6 -1
  22. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/version.py +1 -1
  23. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/PKG-INFO +21 -3
  24. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -1
  25. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/requires.txt +2 -2
  26. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/CONTRIBUTING.md +0 -0
  27. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/LICENSE.txt +0 -0
  28. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/MANIFEST.in +0 -0
  29. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/NOTICE +0 -0
  30. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/SECURITY.md +0 -0
  31. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/pyproject.toml +0 -0
  32. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/setup.py +0 -0
  33. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/__init__.py +0 -0
  34. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/_query_context_cache.py +0 -0
  35. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/_sql_util.py +0 -0
  36. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/arrow_context.py +0 -0
  37. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/__init__.py +0 -0
  38. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/by_plugin.py +0 -0
  39. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/default.py +0 -0
  40. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/idtoken.py +0 -0
  41. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/keypair.py +0 -0
  42. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/oauth.py +0 -0
  43. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  44. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/azure_storage_client.py +0 -0
  45. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/backoff_policies.py +0 -0
  46. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/bind_upload_agent.py +0 -0
  47. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/cache.py +0 -0
  48. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/compat.py +0 -0
  49. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/config_manager.py +0 -0
  50. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter.py +0 -0
  51. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter_issue23517.py +0 -0
  52. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter_null.py +0 -0
  53. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter_snowsql.py +0 -0
  54. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/dbapi.py +0 -0
  55. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/description.py +0 -0
  56. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/encryption_util.py +0 -0
  57. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/errorcode.py +0 -0
  58. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/feature.py +0 -0
  59. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/file_compression_type.py +0 -0
  60. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/file_transfer_agent.py +0 -0
  61. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/file_util.py +0 -0
  62. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/gcs_storage_client.py +0 -0
  63. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/gzip_decoder.py +0 -0
  64. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/local_storage_client.py +0 -0
  65. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/log_configuration.py +0 -0
  66. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  67. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  68. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  69. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  70. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  71. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  72. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  73. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  74. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  75. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  76. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  77. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  78. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  79. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  80. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  81. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  82. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  83. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  84. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  85. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  86. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  87. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  88. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  89. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  90. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  91. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  92. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  93. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  94. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  95. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  96. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  97. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  98. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  99. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  100. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  101. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  102. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  103. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  104. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  105. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  106. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  107. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  108. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  109. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  110. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  111. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  112. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  113. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  114. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  115. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  116. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  117. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  118. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  119. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  120. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  121. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  122. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  123. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  124. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  125. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  126. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  127. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  128. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  129. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  130. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  131. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  132. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  133. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  134. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  135. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  136. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  137. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  138. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  139. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  140. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  141. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  142. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  143. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  144. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  145. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  146. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  147. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  148. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  149. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  150. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  151. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  152. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  153. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  154. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/options.py +0 -0
  155. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/pandas_tools.py +0 -0
  156. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/proxy.py +0 -0
  157. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/py.typed +0 -0
  158. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/result_batch.py +0 -0
  159. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/s3_storage_client.py +0 -0
  160. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/secret_detector.py +0 -0
  161. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sfbinaryformat.py +0 -0
  162. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sfdatetime.py +0 -0
  163. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/snow_logging.py +0 -0
  164. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sqlstate.py +0 -0
  165. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  166. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/telemetry.py +0 -0
  167. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/test_util.py +0 -0
  168. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/time_util.py +0 -0
  169. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/__init__.py +0 -0
  170. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/dump_certs.py +0 -0
  171. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  172. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  173. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/probe_connection.py +0 -0
  174. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/__init__.py +0 -0
  175. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  176. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  177. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  178. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  179. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  180. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/api.py +0 -0
  181. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  182. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  183. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  184. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  185. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  186. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/help.py +0 -0
  187. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  188. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/models.py +0 -0
  189. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  190. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  191. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  192. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  193. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  194. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  195. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  196. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  197. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  198. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  199. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  200. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
  201. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
  202. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
  203. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
  204. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
  205. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
  206. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  207. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
  208. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  209. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  210. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  211. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  212. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
  213. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
  214. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
  215. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
  216. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
  217. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  218. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
  219. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  220. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  221. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  222. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  223. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
  224. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  225. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  226. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  227. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  228. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  229. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  230. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  231. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  232. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  233. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  234. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  235. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  236. {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
@@ -8,6 +8,24 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
8
8
 
9
9
  # Release Notes
10
10
 
11
+ - v3.12.1(August 20,2024)
12
+ - Fixed a bug that logged the session token when renewing a session.
13
+ - Fixed a bug where disabling client telemetry did not work.
14
+ - Fixed a bug where passing `login_timeout` as a string raised a `TypeError` during the login retry step.
15
+ - Use `pathlib` instead of `os` for default config file location resolution.
16
+ - Removed upper `cryptogaphy` version pin.
17
+ - Removed reference to script `snowflake-export-certs` (its backing module was already removed long ago)
18
+ - Enhanced retry mechanism for handling transient network failures during query result polling when no server response is received.
19
+
20
+ - v3.12.0(July 24,2024)
21
+ - Set default connection timeout of 10 seconds and socket read timeout of 10 minutes for HTTP calls in file transfer.
22
+ - Optimized `to_pandas()` performance by fully parallel downloading logic.
23
+ - Fixed a bug that specifying client_session_keep_alive_heartbeat_frequency in snowflake-sqlalchemy could crash the connector.
24
+ - Fixed incorrect type hint of connection parameter `private_key`.
25
+ - Added support for connectivity to multiple domains.
26
+ - Bumped keyring dependency from >=23.1.0,<25.0.0 to >=23.1.0,<26.0.0.
27
+ - Disabled OOB Telemetry.
28
+
11
29
  - v3.11.0(June 17,2024)
12
30
  - Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
13
31
  - Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: snowflake-connector-python
3
- Version: 3.11.0
3
+ Version: 3.12.1
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
@@ -73,7 +73,7 @@ Provides-Extra: pandas
73
73
  Requires-Dist: pandas<3.0.0,>=1.0.0; extra == "pandas"
74
74
  Requires-Dist: pyarrow; extra == "pandas"
75
75
  Provides-Extra: secure-local-storage
76
- Requires-Dist: keyring<25.0.0,>=23.1.0; extra == "secure-local-storage"
76
+ Requires-Dist: keyring<26.0.0,>=23.1.0; extra == "secure-local-storage"
77
77
 
78
78
  This package includes the Snowflake Connector for Python, which conforms to the Python DB API 2.0 specification:
79
79
  https://www.python.org/dev/peps/pep-0249/
@@ -85,6 +85,24 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
85
85
 
86
86
  # Release Notes
87
87
 
88
+ - v3.12.1(August 20,2024)
89
+ - Fixed a bug that logged the session token when renewing a session.
90
+ - Fixed a bug where disabling client telemetry did not work.
91
+ - Fixed a bug where passing `login_timeout` as a string raised a `TypeError` during the login retry step.
92
+ - Use `pathlib` instead of `os` for default config file location resolution.
93
+ - Removed upper `cryptogaphy` version pin.
94
+ - Removed reference to script `snowflake-export-certs` (its backing module was already removed long ago)
95
+ - Enhanced retry mechanism for handling transient network failures during query result polling when no server response is received.
96
+
97
+ - v3.12.0(July 24,2024)
98
+ - Set default connection timeout of 10 seconds and socket read timeout of 10 minutes for HTTP calls in file transfer.
99
+ - Optimized `to_pandas()` performance by fully parallel downloading logic.
100
+ - Fixed a bug that specifying client_session_keep_alive_heartbeat_frequency in snowflake-sqlalchemy could crash the connector.
101
+ - Fixed incorrect type hint of connection parameter `private_key`.
102
+ - Added support for connectivity to multiple domains.
103
+ - Bumped keyring dependency from >=23.1.0,<25.0.0 to >=23.1.0,<26.0.0.
104
+ - Disabled OOB Telemetry.
105
+
88
106
  - v3.11.0(June 17,2024)
89
107
  - Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
90
108
  - Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
@@ -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 =
@@ -96,7 +95,7 @@ pandas =
96
95
  pandas>=1.0.0,<3.0.0
97
96
  pyarrow
98
97
  secure-local-storage =
99
- keyring>=23.1.0,<25.0.0
98
+ keyring>=23.1.0,<26.0.0
100
99
 
101
100
  [egg_info]
102
101
  tag_build =
@@ -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
 
@@ -52,6 +52,7 @@ from .compat import IS_LINUX, IS_WINDOWS, quote, urlencode
52
52
  from .config_manager import CONFIG_MANAGER, _get_default_connection_params
53
53
  from .connection_diagnostic import ConnectionDiagnostic
54
54
  from .constants import (
55
+ _DOMAIN_NAME_MAP,
55
56
  ENV_VAR_PARTNER,
56
57
  PARAMETER_AUTOCOMMIT,
57
58
  PARAMETER_CLIENT_PREFETCH_THREADS,
@@ -60,7 +61,6 @@ from .constants import (
60
61
  PARAMETER_CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY,
61
62
  PARAMETER_CLIENT_STORE_TEMPORARY_CREDENTIAL,
62
63
  PARAMETER_CLIENT_TELEMETRY_ENABLED,
63
- PARAMETER_CLIENT_TELEMETRY_OOB_ENABLED,
64
64
  PARAMETER_CLIENT_VALIDATE_DEFAULT_PARAMETERS,
65
65
  PARAMETER_ENABLE_STAGE_S3_PRIVATELINK_FOR_US_EAST_1,
66
66
  PARAMETER_QUERY_CONTEXT_CACHE_SIZE,
@@ -105,8 +105,8 @@ from .network import (
105
105
  )
106
106
  from .sqlstate import SQLSTATE_CONNECTION_NOT_EXISTS, SQLSTATE_FEATURE_NOT_SUPPORTED
107
107
  from .telemetry import TelemetryClient, TelemetryData, TelemetryField
108
- from .telemetry_oob import TelemetryService
109
108
  from .time_util import HeartBeatTimer, get_time_millis
109
+ from .url_util import extract_top_level_domain_from_hostname
110
110
  from .util_text import construct_hostname, parse_account, split_statements
111
111
 
112
112
  DEFAULT_CLIENT_PREFETCH_THREADS = 4
@@ -181,7 +181,7 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
181
181
  "backoff_policy": (DEFAULT_BACKOFF_POLICY, Callable),
182
182
  "passcode_in_password": (False, bool), # Snowflake MFA
183
183
  "passcode": (None, (type(None), str)), # Snowflake MFA
184
- "private_key": (None, (type(None), str, RSAPrivateKey)),
184
+ "private_key": (None, (type(None), bytes, RSAPrivateKey)),
185
185
  "private_key_file": (None, (type(None), str)),
186
186
  "private_key_file_pwd": (None, (type(None), str, bytes)),
187
187
  "token": (None, (type(None), str)), # OAuth or JWT Token
@@ -190,6 +190,10 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
190
190
  "password_callback": (None, (type(None), Callable)),
191
191
  "auth_class": (None, (type(None), AuthByPlugin)),
192
192
  "application": (CLIENT_NAME, (type(None), str)),
193
+ # internal_application_name/version is used to tell the server the type of client connecting to
194
+ # Snowflake. There are some functionalities (e.g., MFA, Arrow result format) that
195
+ # Snowflake server doesn't support for new client types, which requires developers to
196
+ # add the new client type to the server to support these features.
193
197
  "internal_application_name": (CLIENT_NAME, (type(None), str)),
194
198
  "internal_application_version": (CLIENT_VERSION, (type(None), str)),
195
199
  "insecure_mode": (False, bool), # Error security fix requirement
@@ -403,7 +407,8 @@ class SnowflakeConnection:
403
407
  self.messages = []
404
408
  self._async_sfqids: dict[str, None] = {}
405
409
  self._done_async_sfqids: dict[str, None] = {}
406
- self.telemetry_enabled = False
410
+ self._client_param_telemetry_enabled = True
411
+ self._server_param_telemetry_enabled = False
407
412
  self._session_parameters: dict[str, str | int | bool] = {}
408
413
  logger.info(
409
414
  "Snowflake Connector for Python Version: %s, "
@@ -620,11 +625,22 @@ class SnowflakeConnection:
620
625
 
621
626
  @property
622
627
  def telemetry_enabled(self) -> bool:
623
- return self._telemetry_enabled
628
+ return bool(
629
+ self._client_param_telemetry_enabled
630
+ and self._server_param_telemetry_enabled
631
+ )
624
632
 
625
633
  @telemetry_enabled.setter
626
634
  def telemetry_enabled(self, value) -> None:
627
- 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
+ )
628
644
 
629
645
  @property
630
646
  def service_name(self) -> str | None:
@@ -714,7 +730,6 @@ class SnowflakeConnection:
714
730
  logger.debug("connect")
715
731
  if len(kwargs) > 0:
716
732
  self.__config(**kwargs)
717
- TelemetryService.get_instance().update_context(kwargs)
718
733
 
719
734
  if self.enable_connection_diag:
720
735
  exceptions_dict = {}
@@ -771,7 +786,7 @@ class SnowflakeConnection:
771
786
 
772
787
  # close telemetry first, since it needs rest to send remaining data
773
788
  logger.info("closed")
774
- self._telemetry.close(send_on_close=retry)
789
+ self._telemetry.close(send_on_close=bool(retry and self.telemetry_enabled))
775
790
  if (
776
791
  self._all_async_queries_finished()
777
792
  and not self._server_session_keep_alive
@@ -931,7 +946,7 @@ class SnowflakeConnection:
931
946
  os.environ["SF_OCSP_RESPONSE_CACHE_SERVER_URL"],
932
947
  )
933
948
 
934
- if self.host.endswith(".privatelink.snowflakecomputing.com"):
949
+ if ".privatelink.snowflakecomputing." in self.host:
935
950
  SnowflakeConnection.setup_ocsp_privatelink(self.application, self.host)
936
951
  else:
937
952
  if "SF_OCSP_RESPONSE_CACHE_SERVER_URL" in os.environ:
@@ -1003,7 +1018,7 @@ class SnowflakeConnection:
1003
1018
  elif self._authenticator == DEFAULT_AUTHENTICATOR:
1004
1019
  self.auth_class = AuthByDefault(
1005
1020
  password=self._password,
1006
- timeout=self._login_timeout,
1021
+ timeout=self.login_timeout,
1007
1022
  backoff_generator=self._backoff_generator,
1008
1023
  )
1009
1024
  elif self._authenticator == EXTERNAL_BROWSER_AUTHENTICATOR:
@@ -1023,7 +1038,7 @@ class SnowflakeConnection:
1023
1038
  protocol=self._protocol,
1024
1039
  host=self.host,
1025
1040
  port=self.port,
1026
- timeout=self._login_timeout,
1041
+ timeout=self.login_timeout,
1027
1042
  backoff_generator=self._backoff_generator,
1028
1043
  )
1029
1044
  else:
@@ -1033,7 +1048,7 @@ class SnowflakeConnection:
1033
1048
  protocol=self._protocol,
1034
1049
  host=self.host,
1035
1050
  port=self.port,
1036
- timeout=self._login_timeout,
1051
+ timeout=self.login_timeout,
1037
1052
  backoff_generator=self._backoff_generator,
1038
1053
  )
1039
1054
 
@@ -1048,13 +1063,13 @@ class SnowflakeConnection:
1048
1063
 
1049
1064
  self.auth_class = AuthByKeyPair(
1050
1065
  private_key=private_key,
1051
- timeout=self._login_timeout,
1066
+ timeout=self.login_timeout,
1052
1067
  backoff_generator=self._backoff_generator,
1053
1068
  )
1054
1069
  elif self._authenticator == OAUTH_AUTHENTICATOR:
1055
1070
  self.auth_class = AuthByOAuth(
1056
1071
  oauth_token=self._token,
1057
- timeout=self._login_timeout,
1072
+ timeout=self.login_timeout,
1058
1073
  backoff_generator=self._backoff_generator,
1059
1074
  )
1060
1075
  elif self._authenticator == USR_PWD_MFA_AUTHENTICATOR:
@@ -1070,14 +1085,14 @@ class SnowflakeConnection:
1070
1085
  self.auth_class = AuthByUsrPwdMfa(
1071
1086
  password=self._password,
1072
1087
  mfa_token=self.rest.mfa_token,
1073
- timeout=self._login_timeout,
1088
+ timeout=self.login_timeout,
1074
1089
  backoff_generator=self._backoff_generator,
1075
1090
  )
1076
1091
  else:
1077
1092
  # okta URL, e.g., https://<account>.okta.com/
1078
1093
  self.auth_class = AuthByOkta(
1079
1094
  application=self.application,
1080
- timeout=self._login_timeout,
1095
+ timeout=self.login_timeout,
1081
1096
  backoff_generator=self._backoff_generator,
1082
1097
  )
1083
1098
 
@@ -1178,6 +1193,10 @@ class SnowflakeConnection:
1178
1193
  if "protocol" not in kwargs:
1179
1194
  self._protocol = "https"
1180
1195
 
1196
+ logger.info(
1197
+ f"Connecting to {_DOMAIN_NAME_MAP.get(extract_top_level_domain_from_hostname(self._host), 'GLOBAL')} Snowflake domain"
1198
+ )
1199
+
1181
1200
  # If using a custom auth class, we should set the authenticator
1182
1201
  # type to be the same as the custom auth class
1183
1202
  if self._auth_class:
@@ -1287,6 +1306,7 @@ class SnowflakeConnection:
1287
1306
  _update_current_object: bool = True,
1288
1307
  _no_retry: bool = False,
1289
1308
  timeout: int | None = None,
1309
+ dataframe_ast: str | None = None,
1290
1310
  ) -> dict[str, Any]:
1291
1311
  """Executes a query with a sequence counter."""
1292
1312
  logger.debug("_cmd_query")
@@ -1296,6 +1316,8 @@ class SnowflakeConnection:
1296
1316
  "sequenceId": sequence_counter,
1297
1317
  "querySubmissionTime": get_time_millis(),
1298
1318
  }
1319
+ if dataframe_ast is not None:
1320
+ data["dataframeAst"] = dataframe_ast
1299
1321
  if statement_params is not None:
1300
1322
  data["parameters"] = statement_params
1301
1323
  if is_internal:
@@ -1670,6 +1692,12 @@ class SnowflakeConnection:
1670
1692
  """Validate and return heartbeat frequency in seconds."""
1671
1693
  real_max = int(self.rest.master_validity_in_seconds / 4)
1672
1694
  real_min = int(real_max / 4)
1695
+
1696
+ # ensure the type is integer
1697
+ self._client_session_keep_alive_heartbeat_frequency = int(
1698
+ self.client_session_keep_alive_heartbeat_frequency
1699
+ )
1700
+
1673
1701
  if self.client_session_keep_alive_heartbeat_frequency is None:
1674
1702
  # This is an unlikely scenario but covering it just in case.
1675
1703
  self._client_session_keep_alive_heartbeat_frequency = real_min
@@ -1678,10 +1706,6 @@ class SnowflakeConnection:
1678
1706
  elif self.client_session_keep_alive_heartbeat_frequency < real_min:
1679
1707
  self._client_session_keep_alive_heartbeat_frequency = real_min
1680
1708
 
1681
- # ensure the type is integer
1682
- self._client_session_keep_alive_heartbeat_frequency = int(
1683
- self.client_session_keep_alive_heartbeat_frequency
1684
- )
1685
1709
  return self.client_session_keep_alive_heartbeat_frequency
1686
1710
 
1687
1711
  def _validate_client_prefetch_threads(self) -> int:
@@ -1702,12 +1726,7 @@ class SnowflakeConnection:
1702
1726
  for name, value in parameters.items():
1703
1727
  self._session_parameters[name] = value
1704
1728
  if PARAMETER_CLIENT_TELEMETRY_ENABLED == name:
1705
- self.telemetry_enabled = value
1706
- elif PARAMETER_CLIENT_TELEMETRY_OOB_ENABLED == name:
1707
- if value:
1708
- TelemetryService.get_instance().enable()
1709
- else:
1710
- TelemetryService.get_instance().disable()
1729
+ self._server_param_telemetry_enabled = value
1711
1730
  elif PARAMETER_CLIENT_SESSION_KEEP_ALIVE == name:
1712
1731
  # Only set if the local config is None.
1713
1732
  # Always give preference to user config.
@@ -23,6 +23,7 @@ import OpenSSL
23
23
 
24
24
  from .compat import IS_WINDOWS, urlparse
25
25
  from .cursor import SnowflakeCursor
26
+ from .url_util import extract_top_level_domain_from_hostname
26
27
  from .vendored import urllib3
27
28
 
28
29
  logger = getLogger(__name__)
@@ -89,15 +90,21 @@ class ConnectionDiagnostic:
89
90
  self.__append_message(
90
91
  host_type, f"Host based on specified account: {self.host}"
91
92
  )
92
- if ".com.snowflakecomputing.com" in self.host:
93
- self.host = host.split(".com.snow", 1)[0] + ".com"
93
+
94
+ top_level_domain = extract_top_level_domain_from_hostname(host)
95
+ if (
96
+ f".{top_level_domain}.snowflakecomputing.{top_level_domain}" in self.host
97
+ ): # repeated domain name pattern
98
+ self.host = (
99
+ host.split(f".{top_level_domain}.snow", 1)[0] + f".{top_level_domain}"
100
+ )
94
101
  logger.warning(
95
- f"Account should not have snowflakecomputing.com in it. You provided {host}. "
102
+ f"Account should not have snowflakecomputing.{top_level_domain} in it. You provided {host}. "
96
103
  f"Continuing with fixed host."
97
104
  )
98
105
  self.__append_message(
99
106
  host_type,
100
- f"We removed extra .snowflakecomputing.com and will continue with host: "
107
+ f"We removed extra .snowflakecomputing.{top_level_domain} and will continue with host: "
101
108
  f"{self.host}",
102
109
  )
103
110
  else:
@@ -183,7 +190,7 @@ class ConnectionDiagnostic:
183
190
  self.ocsp_urls.append(f"ocsp.{self.host}")
184
191
  self.allowlist_sql = "select system$allowlist_privatelink();"
185
192
  else:
186
- self.ocsp_urls.append("ocsp.snowflakecomputing.com")
193
+ self.ocsp_urls.append(f"ocsp.snowflakecomputing.{top_level_domain}")
187
194
 
188
195
  self.allowlist_retrieval_success: bool = False
189
196
  self.cursor: SnowflakeCursor | None = None
@@ -36,6 +36,11 @@ DBAPI_TYPE_BINARY = 1
36
36
  DBAPI_TYPE_NUMBER = 2
37
37
  DBAPI_TYPE_TIMESTAMP = 3
38
38
 
39
+ _DEFAULT_HOSTNAME_TLD = "com"
40
+ _CHINA_HOSTNAME_TLD = "cn"
41
+ _TOP_LEVEL_DOMAIN_REGEX = r"\.[a-zA-Z]{1,63}$"
42
+ _SNOWFLAKE_HOST_SUFFIX_REGEX = r"snowflakecomputing(\.[a-zA-Z]{1,63}){1,2}$"
43
+
39
44
 
40
45
  class FieldType(NamedTuple):
41
46
  name: str
@@ -399,6 +404,7 @@ class IterUnit(Enum):
399
404
  TABLE_UNIT = "table"
400
405
 
401
406
 
407
+ # File Transfer
402
408
  # Amazon S3 multipart upload limits
403
409
  # https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html
404
410
  S3_DEFAULT_CHUNK_SIZE = 8 * 1024**2
@@ -410,8 +416,15 @@ S3_MAX_PARTS = 10000
410
416
  S3_CHUNK_SIZE = 8388608 # boto3 default
411
417
  AZURE_CHUNK_SIZE = 4 * megabyte
412
418
 
419
+ # https://requests.readthedocs.io/en/latest/user/advanced/#timeouts
420
+ REQUEST_CONNECTION_TIMEOUT = 10
421
+ REQUEST_READ_TIMEOUT = 600
422
+
413
423
  DAY_IN_SECONDS = 60 * 60 * 24
414
424
 
415
425
  # TODO: all env variables definitions should be here
416
426
  ENV_VAR_PARTNER = "SF_PARTNER"
417
427
  ENV_VAR_TEST_MODE = "SNOWFLAKE_TEST_MODE"
428
+
429
+
430
+ _DOMAIN_NAME_MAP = {_DEFAULT_HOSTNAME_TLD: "GLOBAL", _CHINA_HOSTNAME_TLD: "CHINA"}
@@ -601,6 +601,7 @@ class SnowflakeCursor:
601
601
  _no_results: bool = False,
602
602
  _is_put_get=None,
603
603
  _no_retry: bool = False,
604
+ dataframe_ast: str | None = None,
604
605
  ) -> dict[str, Any]:
605
606
  del self.messages[:]
606
607
 
@@ -704,6 +705,7 @@ class SnowflakeCursor:
704
705
  _no_results=_no_results,
705
706
  _no_retry=_no_retry,
706
707
  timeout=real_timeout,
708
+ dataframe_ast=dataframe_ast,
707
709
  )
708
710
  finally:
709
711
  try:
@@ -809,6 +811,7 @@ class SnowflakeCursor:
809
811
  _skip_upload_on_content_match: bool = False,
810
812
  file_stream: IO[bytes] | None = None,
811
813
  num_statements: int | None = None,
814
+ _dataframe_ast: str | None = None,
812
815
  ) -> Self | None: ...
813
816
 
814
817
  @overload
@@ -838,6 +841,7 @@ class SnowflakeCursor:
838
841
  _skip_upload_on_content_match: bool = False,
839
842
  file_stream: IO[bytes] | None = None,
840
843
  num_statements: int | None = None,
844
+ _dataframe_ast: str | None = None,
841
845
  ) -> dict[str, Any] | None: ...
842
846
 
843
847
  def execute(
@@ -866,6 +870,7 @@ class SnowflakeCursor:
866
870
  _skip_upload_on_content_match: bool = False,
867
871
  file_stream: IO[bytes] | None = None,
868
872
  num_statements: int | None = None,
873
+ _dataframe_ast: str | None = None,
869
874
  ) -> Self | dict[str, Any] | None:
870
875
  """Executes a command/query.
871
876
 
@@ -900,6 +905,7 @@ class SnowflakeCursor:
900
905
  file_stream: File-like object to be uploaded with PUT
901
906
  num_statements: Query level parameter submitted in _statement_params constraining exact number of
902
907
  statements being submitted (or 0 if submitting an uncounted number) when using a multi-statement query.
908
+ _dataframe_ast: Base64-encoded dataframe request abstract syntax tree.
903
909
 
904
910
  Returns:
905
911
  The cursor itself, or None if some error happened, or the response returned
@@ -941,6 +947,7 @@ class SnowflakeCursor:
941
947
  "_no_results": _no_results,
942
948
  "_is_put_get": _is_put_get,
943
949
  "_no_retry": _no_retry,
950
+ "dataframe_ast": _dataframe_ast,
944
951
  }
945
952
 
946
953
  if self._connection.is_pyformat:
@@ -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,