snowflake-connector-python 3.12.1__tar.gz → 3.12.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/DESCRIPTION.md +6 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/PKG-INFO +7 -1
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/connection.py +34 -24
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/cursor.py +8 -5
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/network.py +15 -1
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ocsp_snowflake.py +1 -1
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/util_text.py +12 -7
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/PKG-INFO +7 -1
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/LICENSE.txt +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/MANIFEST.in +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/NOTICE +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/README.md +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/SECURITY.md +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/pyproject.toml +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/setup.cfg +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/setup.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/requires.txt +0 -0
- {snowflake_connector_python-3.12.1 → snowflake_connector_python-3.12.2}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -8,6 +8,12 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
8
8
|
|
|
9
9
|
# Release Notes
|
|
10
10
|
|
|
11
|
+
- v3.12.2(September 11,2024)
|
|
12
|
+
- Improved error handling for asynchronous queries, providing more detailed and informative error messages when an async query fails.
|
|
13
|
+
- Improved inference of top-level domains for accounts specifying a region in China, now defaulting to snowflakecomputing.cn.
|
|
14
|
+
- Improved implementation of the `snowflake.connector.util_text.random_string` to reduce the likelihood of collisions.
|
|
15
|
+
- Updated the log level for OCSP fail-open warning messages from ERROR to WARNING.
|
|
16
|
+
|
|
11
17
|
- v3.12.1(August 20,2024)
|
|
12
18
|
- Fixed a bug that logged the session token when renewing a session.
|
|
13
19
|
- Fixed a bug where disabling client telemetry did not work.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.12.
|
|
3
|
+
Version: 3.12.2
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -85,6 +85,12 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
85
85
|
|
|
86
86
|
# Release Notes
|
|
87
87
|
|
|
88
|
+
- v3.12.2(September 11,2024)
|
|
89
|
+
- Improved error handling for asynchronous queries, providing more detailed and informative error messages when an async query fails.
|
|
90
|
+
- Improved inference of top-level domains for accounts specifying a region in China, now defaulting to snowflakecomputing.cn.
|
|
91
|
+
- Improved implementation of the `snowflake.connector.util_text.random_string` to reduce the likelihood of collisions.
|
|
92
|
+
- Updated the log level for OCSP fail-open warning messages from ERROR to WARNING.
|
|
93
|
+
|
|
88
94
|
- v3.12.1(August 20,2024)
|
|
89
95
|
- Fixed a bug that logged the session token when renewing a session.
|
|
90
96
|
- Fixed a bug where disabling client telemetry did not work.
|
|
@@ -1817,6 +1817,39 @@ class SnowflakeConnection:
|
|
|
1817
1817
|
with suppress(Exception):
|
|
1818
1818
|
self.close(retry=False)
|
|
1819
1819
|
|
|
1820
|
+
def _process_error_query_status(
|
|
1821
|
+
self,
|
|
1822
|
+
sf_qid: str,
|
|
1823
|
+
status_resp: dict,
|
|
1824
|
+
error_message: str = "",
|
|
1825
|
+
error_cls: type[Exception] = ProgrammingError,
|
|
1826
|
+
) -> None:
|
|
1827
|
+
status_resp = status_resp or {}
|
|
1828
|
+
data = status_resp.get("data", {})
|
|
1829
|
+
queries = data.get("queries")
|
|
1830
|
+
|
|
1831
|
+
if sf_qid in self._async_sfqids:
|
|
1832
|
+
self._async_sfqids.pop(sf_qid, None)
|
|
1833
|
+
message = status_resp.get("message")
|
|
1834
|
+
if message is None:
|
|
1835
|
+
message = ""
|
|
1836
|
+
code = queries[0].get("errorCode", -1) if queries else -1
|
|
1837
|
+
sql_state = None
|
|
1838
|
+
if "data" in status_resp:
|
|
1839
|
+
message += queries[0].get("errorMessage", "") if queries else ""
|
|
1840
|
+
sql_state = data.get("sqlState")
|
|
1841
|
+
Error.errorhandler_wrapper(
|
|
1842
|
+
self,
|
|
1843
|
+
None,
|
|
1844
|
+
error_cls,
|
|
1845
|
+
{
|
|
1846
|
+
"msg": message or error_message,
|
|
1847
|
+
"errno": int(code),
|
|
1848
|
+
"sqlstate": sql_state,
|
|
1849
|
+
"sfqid": sf_qid,
|
|
1850
|
+
},
|
|
1851
|
+
)
|
|
1852
|
+
|
|
1820
1853
|
def get_query_status(self, sf_qid: str) -> QueryStatus:
|
|
1821
1854
|
"""Retrieves the status of query with sf_qid.
|
|
1822
1855
|
|
|
@@ -1845,31 +1878,8 @@ class SnowflakeConnection:
|
|
|
1845
1878
|
"""
|
|
1846
1879
|
status, status_resp = self._get_query_status(sf_qid)
|
|
1847
1880
|
self._cache_query_status(sf_qid, status)
|
|
1848
|
-
queries = status_resp["data"]["queries"]
|
|
1849
1881
|
if self.is_an_error(status):
|
|
1850
|
-
|
|
1851
|
-
self._async_sfqids.pop(sf_qid, None)
|
|
1852
|
-
message = status_resp.get("message")
|
|
1853
|
-
if message is None:
|
|
1854
|
-
message = ""
|
|
1855
|
-
code = queries[0].get("errorCode", -1)
|
|
1856
|
-
sql_state = None
|
|
1857
|
-
if "data" in status_resp:
|
|
1858
|
-
message += (
|
|
1859
|
-
queries[0].get("errorMessage", "") if len(queries) > 0 else ""
|
|
1860
|
-
)
|
|
1861
|
-
sql_state = status_resp["data"].get("sqlState")
|
|
1862
|
-
Error.errorhandler_wrapper(
|
|
1863
|
-
self,
|
|
1864
|
-
None,
|
|
1865
|
-
ProgrammingError,
|
|
1866
|
-
{
|
|
1867
|
-
"msg": message,
|
|
1868
|
-
"errno": int(code),
|
|
1869
|
-
"sqlstate": sql_state,
|
|
1870
|
-
"sfqid": sf_qid,
|
|
1871
|
-
},
|
|
1872
|
-
)
|
|
1882
|
+
self._process_error_query_status(sf_qid, status_resp)
|
|
1873
1883
|
return status
|
|
1874
1884
|
|
|
1875
1885
|
def initialize_query_context_cache(self) -> None:
|
|
@@ -1638,7 +1638,8 @@ class SnowflakeCursor:
|
|
|
1638
1638
|
no_data_counter = 0
|
|
1639
1639
|
retry_pattern_pos = 0
|
|
1640
1640
|
while True:
|
|
1641
|
-
status = self.connection.
|
|
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
|
|
@@ -892,6 +892,14 @@ class SnowflakeRestful:
|
|
|
892
892
|
full_url = retry_ctx.add_retry_params(full_url)
|
|
893
893
|
full_url = SnowflakeRestful.add_request_guid(full_url)
|
|
894
894
|
is_fetch_query_status = kwargs.pop("is_fetch_query_status", False)
|
|
895
|
+
# raise_raw_http_failure is not a public parameter and may change in the future
|
|
896
|
+
# it enables raising raw http errors that are not handled by
|
|
897
|
+
# connector, connector handles the following http error:
|
|
898
|
+
# 1. FORBIDDEN error when trying to login
|
|
899
|
+
# 2. retryable http code defined in method is_retryable_http_code
|
|
900
|
+
# 3. UNAUTHORIZED error when using okta authentication
|
|
901
|
+
# raise_raw_http_failure doesn't work for the 3 mentioned cases.
|
|
902
|
+
raise_raw_http_failure = kwargs.pop("raise_raw_http_failure", False)
|
|
895
903
|
try:
|
|
896
904
|
return_object = self._request_exec(
|
|
897
905
|
session=session,
|
|
@@ -900,6 +908,7 @@ class SnowflakeRestful:
|
|
|
900
908
|
headers=headers,
|
|
901
909
|
data=data,
|
|
902
910
|
token=token,
|
|
911
|
+
raise_raw_http_failure=raise_raw_http_failure,
|
|
903
912
|
**kwargs,
|
|
904
913
|
)
|
|
905
914
|
if return_object is not None:
|
|
@@ -967,7 +976,9 @@ class SnowflakeRestful:
|
|
|
967
976
|
)
|
|
968
977
|
return None # retry
|
|
969
978
|
except Exception as e:
|
|
970
|
-
if
|
|
979
|
+
if (
|
|
980
|
+
raise_raw_http_failure and isinstance(e, requests.exceptions.HTTPError)
|
|
981
|
+
) or not no_retry:
|
|
971
982
|
raise e
|
|
972
983
|
logger.debug("Ignored error", exc_info=True)
|
|
973
984
|
return {}
|
|
@@ -1036,6 +1047,7 @@ class SnowflakeRestful:
|
|
|
1036
1047
|
binary_data_handler=None,
|
|
1037
1048
|
socket_timeout: int | None = None,
|
|
1038
1049
|
is_okta_authentication: bool = False,
|
|
1050
|
+
raise_raw_http_failure: bool = False,
|
|
1039
1051
|
):
|
|
1040
1052
|
if socket_timeout is None:
|
|
1041
1053
|
if self._connection.socket_timeout is not None:
|
|
@@ -1113,6 +1125,8 @@ class SnowflakeRestful:
|
|
|
1113
1125
|
raise_okta_unauthorized_error(self._connection, raw_ret)
|
|
1114
1126
|
return None # required for tests
|
|
1115
1127
|
else:
|
|
1128
|
+
if raise_raw_http_failure:
|
|
1129
|
+
raw_ret.raise_for_status()
|
|
1116
1130
|
raise_failed_request_error(
|
|
1117
1131
|
self._connection, full_url, method, raw_ret
|
|
1118
1132
|
)
|
|
@@ -235,19 +235,24 @@ def _concatenate_statements(
|
|
|
235
235
|
|
|
236
236
|
def construct_hostname(region: str | None, account: str) -> str:
|
|
237
237
|
"""Constructs hostname from region and account."""
|
|
238
|
+
|
|
239
|
+
def _is_china_region(r: str) -> bool:
|
|
240
|
+
# This is consistent with the Go driver:
|
|
241
|
+
# https://github.com/snowflakedb/gosnowflake/blob/f20a46475dce322f3f6b97b4a72f2807571e750b/dsn.go#L535
|
|
242
|
+
return r.lower().startswith("cn-")
|
|
243
|
+
|
|
238
244
|
if region == "us-west-2":
|
|
239
245
|
region = ""
|
|
240
246
|
if region:
|
|
241
247
|
if account.find(".") > 0:
|
|
242
248
|
account = account[0 : account.find(".")]
|
|
243
|
-
top_level_domain = (
|
|
244
|
-
"com"
|
|
245
|
-
if not any(substring in region for substring in ["cn-", "CN-"])
|
|
246
|
-
else "cn"
|
|
247
|
-
)
|
|
249
|
+
top_level_domain = "cn" if _is_china_region(region) else "com"
|
|
248
250
|
host = f"{account}.{region}.snowflakecomputing.{top_level_domain}"
|
|
249
251
|
else:
|
|
250
|
-
|
|
252
|
+
top_level_domain = "com"
|
|
253
|
+
if account.find(".") > 0 and _is_china_region(account.split(".")[1]):
|
|
254
|
+
top_level_domain = "cn"
|
|
255
|
+
host = f"{account}.snowflakecomputing.{top_level_domain}"
|
|
251
256
|
return host
|
|
252
257
|
|
|
253
258
|
|
|
@@ -282,5 +287,5 @@ def random_string(
|
|
|
282
287
|
suffix: Suffix to add to random string generated.
|
|
283
288
|
choices: A generator of things to choose from.
|
|
284
289
|
"""
|
|
285
|
-
random_part = "".join([random.choice(choices) for _ in range(length)])
|
|
290
|
+
random_part = "".join([random.Random().choice(choices) for _ in range(length)])
|
|
286
291
|
return "".join([prefix, random_part, suffix])
|
|
@@ -1,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
|
|
@@ -85,6 +85,12 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
85
85
|
|
|
86
86
|
# Release Notes
|
|
87
87
|
|
|
88
|
+
- v3.12.2(September 11,2024)
|
|
89
|
+
- Improved error handling for asynchronous queries, providing more detailed and informative error messages when an async query fails.
|
|
90
|
+
- Improved inference of top-level domains for accounts specifying a region in China, now defaulting to snowflakecomputing.cn.
|
|
91
|
+
- Improved implementation of the `snowflake.connector.util_text.random_string` to reduce the likelihood of collisions.
|
|
92
|
+
- Updated the log level for OCSP fail-open warning messages from ERROR to WARNING.
|
|
93
|
+
|
|
88
94
|
- v3.12.1(August 20,2024)
|
|
89
95
|
- Fixed a bug that logged the session token when renewing a session.
|
|
90
96
|
- Fixed a bug where disabling client telemetry did not work.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|