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.
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/DESCRIPTION.md +18 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/PKG-INFO +21 -3
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/README.md +29 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/setup.cfg +2 -3
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/_auth.py +1 -1
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/okta.py +1 -1
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/webbrowser.py +1 -1
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/connection.py +45 -26
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/connection_diagnostic.py +12 -5
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/constants.py +13 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/cursor.py +7 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/errors.py +0 -6
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/network.py +32 -69
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ocsp_snowflake.py +21 -21
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/result_set.py +55 -32
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sf_dirs.py +4 -4
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ssl_wrap_socket.py +1 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/storage_client.py +8 -1
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/telemetry_oob.py +3 -3
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/url_util.py +10 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/util_text.py +6 -1
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/PKG-INFO +21 -3
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -1
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/requires.txt +2 -2
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/LICENSE.txt +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/MANIFEST.in +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/NOTICE +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/SECURITY.md +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/pyproject.toml +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/setup.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {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
- {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
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {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
- {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
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {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
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {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
- {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
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-3.11.0 → snowflake_connector_python-3.12.1}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {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.
|
|
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
|
+
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<
|
|
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
|
|
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,<
|
|
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.
|
|
201
|
+
self._rest._connection.login_timeout,
|
|
202
202
|
self._rest._connection._network_timeout,
|
|
203
203
|
self._rest._connection._socket_timeout,
|
|
204
204
|
)
|
|
@@ -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.
|
|
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),
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
93
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|