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