snowflake-connector-python 3.10.0__tar.gz → 3.11.0__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.10.0 → snowflake_connector_python-3.11.0}/DESCRIPTION.md +14 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/PKG-INFO +15 -1
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/_query_context_cache.py +5 -3
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/_auth.py +20 -12
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/okta.py +3 -1
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/config_manager.py +8 -1
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/connection.py +36 -17
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/connection_diagnostic.py +3 -1
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/cursor.py +19 -21
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/errors.py +3 -3
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/file_transfer_agent.py +18 -14
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/gcs_storage_client.py +10 -6
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -2
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/network.py +3 -3
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ocsp_asn1crypto.py +2 -2
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ocsp_snowflake.py +6 -2
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/result_batch.py +15 -5
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/result_set.py +2 -4
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sf_dirs.py +1 -2
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/storage_client.py +2 -2
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/telemetry.py +3 -3
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/telemetry_oob.py +18 -18
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/url_util.py +1 -1
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/PKG-INFO +15 -1
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/LICENSE.txt +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/MANIFEST.in +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/NOTICE +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/README.md +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/SECURITY.md +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/pyproject.toml +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/setup.cfg +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/setup.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/requires.txt +0 -0
- {snowflake_connector_python-3.10.0 → snowflake_connector_python-3.11.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -8,6 +8,20 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
8
8
|
|
|
9
9
|
# Release Notes
|
|
10
10
|
|
|
11
|
+
- v3.11.0(June 17,2024)
|
|
12
|
+
- Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
|
|
13
|
+
- Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
|
|
14
|
+
- Added support for `disable_saml_url_check` connection parameter to disable SAML URL check in OKTA authentication.
|
|
15
|
+
- Fixed a bug that OCSP certificate signed using SHA384 algorithm cannot be verified.
|
|
16
|
+
- Fixed a bug that status code shown as uploaded when PUT command failed with 400 error.
|
|
17
|
+
- Fixed a bug that a PermissionError was raised when the current user does not have the right permission on parent directory of config file path.
|
|
18
|
+
- Fixed a bug that OCSP GET url is not encoded correctly when it contains a slash.
|
|
19
|
+
- Fixed a bug that an SSO URL didn't accept `:` in a query parameter, for instance, `https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/`.
|
|
20
|
+
|
|
21
|
+
- v3.10.1(May 21, 2024)
|
|
22
|
+
|
|
23
|
+
- Removed an incorrect error log message that could occur during arrow data conversion.
|
|
24
|
+
|
|
11
25
|
- v3.10.0(April 29,2024)
|
|
12
26
|
|
|
13
27
|
- Added support for structured types to fetch_pandas_all.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.11.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -85,6 +85,20 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
85
85
|
|
|
86
86
|
# Release Notes
|
|
87
87
|
|
|
88
|
+
- v3.11.0(June 17,2024)
|
|
89
|
+
- Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
|
|
90
|
+
- Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
|
|
91
|
+
- Added support for `disable_saml_url_check` connection parameter to disable SAML URL check in OKTA authentication.
|
|
92
|
+
- Fixed a bug that OCSP certificate signed using SHA384 algorithm cannot be verified.
|
|
93
|
+
- Fixed a bug that status code shown as uploaded when PUT command failed with 400 error.
|
|
94
|
+
- Fixed a bug that a PermissionError was raised when the current user does not have the right permission on parent directory of config file path.
|
|
95
|
+
- Fixed a bug that OCSP GET url is not encoded correctly when it contains a slash.
|
|
96
|
+
- Fixed a bug that an SSO URL didn't accept `:` in a query parameter, for instance, `https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/`.
|
|
97
|
+
|
|
98
|
+
- v3.10.1(May 21, 2024)
|
|
99
|
+
|
|
100
|
+
- Removed an incorrect error log message that could occur during arrow data conversion.
|
|
101
|
+
|
|
88
102
|
- v3.10.0(April 29,2024)
|
|
89
103
|
|
|
90
104
|
- Added support for structured types to fetch_pandas_all.
|
|
@@ -165,9 +165,11 @@ class QueryContextCache:
|
|
|
165
165
|
"id": qce.id,
|
|
166
166
|
"timestamp": qce.read_timestamp,
|
|
167
167
|
"priority": qce.priority,
|
|
168
|
-
"context":
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
"context": (
|
|
169
|
+
{"base64Data": qce.context}
|
|
170
|
+
if qce.context is not None
|
|
171
|
+
else {}
|
|
172
|
+
),
|
|
171
173
|
}
|
|
172
174
|
for qce in self._tree_set
|
|
173
175
|
]
|
|
@@ -417,27 +417,35 @@ class Auth:
|
|
|
417
417
|
else:
|
|
418
418
|
logger.debug(
|
|
419
419
|
"token = %s",
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
420
|
+
(
|
|
421
|
+
"******"
|
|
422
|
+
if ret["data"] and ret["data"].get("token") is not None
|
|
423
|
+
else "NULL"
|
|
424
|
+
),
|
|
423
425
|
)
|
|
424
426
|
logger.debug(
|
|
425
427
|
"master_token = %s",
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
428
|
+
(
|
|
429
|
+
"******"
|
|
430
|
+
if ret["data"] and ret["data"].get("masterToken") is not None
|
|
431
|
+
else "NULL"
|
|
432
|
+
),
|
|
429
433
|
)
|
|
430
434
|
logger.debug(
|
|
431
435
|
"id_token = %s",
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
436
|
+
(
|
|
437
|
+
"******"
|
|
438
|
+
if ret["data"] and ret["data"].get("idToken") is not None
|
|
439
|
+
else "NULL"
|
|
440
|
+
),
|
|
435
441
|
)
|
|
436
442
|
logger.debug(
|
|
437
443
|
"mfa_token = %s",
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
444
|
+
(
|
|
445
|
+
"******"
|
|
446
|
+
if ret["data"] and ret["data"].get("mfaToken") is not None
|
|
447
|
+
else "NULL"
|
|
448
|
+
),
|
|
441
449
|
)
|
|
442
450
|
if not ret["data"]:
|
|
443
451
|
Error.errorhandler_wrapper(
|
|
@@ -315,7 +315,9 @@ class AuthByOkta(AuthByPlugin):
|
|
|
315
315
|
host=conn._rest._host,
|
|
316
316
|
port=conn._rest._port,
|
|
317
317
|
)
|
|
318
|
-
if not
|
|
318
|
+
if not getattr(conn, "_disable_saml_url_check", False) and not _is_prefix_equal(
|
|
319
|
+
post_back_url, full_url
|
|
320
|
+
):
|
|
319
321
|
Error.errorhandler_wrapper(
|
|
320
322
|
conn._rest._connection,
|
|
321
323
|
None,
|
|
@@ -320,8 +320,15 @@ class ConfigManager:
|
|
|
320
320
|
):
|
|
321
321
|
if sliceoptions.only_in_slice:
|
|
322
322
|
del read_config_file[section]
|
|
323
|
-
|
|
323
|
+
try:
|
|
324
|
+
if not filep.exists():
|
|
325
|
+
continue
|
|
326
|
+
except PermissionError:
|
|
327
|
+
LOGGER.debug(
|
|
328
|
+
f"Fail to read configuration file from {str(filep)} due to no permission on its parent directory"
|
|
329
|
+
)
|
|
324
330
|
continue
|
|
331
|
+
|
|
325
332
|
if (
|
|
326
333
|
sliceoptions.check_permissions # Skip checking if this file couldn't hold sensitive information
|
|
327
334
|
# Same check as openssh does for permissions
|
|
@@ -281,6 +281,14 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
|
|
|
281
281
|
True,
|
|
282
282
|
bool,
|
|
283
283
|
), # Disable console login and fall back to getting SSO URL from GS
|
|
284
|
+
"debug_arrow_chunk": (
|
|
285
|
+
False,
|
|
286
|
+
bool,
|
|
287
|
+
), # log raw arrow chunk for debugging purpuse in case there is malformed arrow data
|
|
288
|
+
"disable_saml_url_check": (
|
|
289
|
+
False,
|
|
290
|
+
bool,
|
|
291
|
+
), # disable saml url check in okta authentication
|
|
284
292
|
}
|
|
285
293
|
|
|
286
294
|
APPLICATION_RE = re.compile(r"[\w\d_]+")
|
|
@@ -359,6 +367,7 @@ class SnowflakeConnection:
|
|
|
359
367
|
This parameter is only effective when the result format is JSON.
|
|
360
368
|
server_session_keep_alive: When true, the connector does not destroy the session on the Snowflake server side
|
|
361
369
|
before the connector shuts down. Default value is false.
|
|
370
|
+
token_file_path: The file path of the token file. If both token and token_file_path are provided, the token in token_file_path will be used.
|
|
362
371
|
"""
|
|
363
372
|
|
|
364
373
|
OCSP_ENV_LOCK = Lock()
|
|
@@ -713,9 +722,11 @@ class SnowflakeConnection:
|
|
|
713
722
|
account=self.account,
|
|
714
723
|
host=self.host,
|
|
715
724
|
connection_diag_log_path=self.connection_diag_log_path,
|
|
716
|
-
connection_diag_allowlist_path=
|
|
717
|
-
|
|
718
|
-
|
|
725
|
+
connection_diag_allowlist_path=(
|
|
726
|
+
self.connection_diag_allowlist_path
|
|
727
|
+
if self.connection_diag_allowlist_path is not None
|
|
728
|
+
else self.connection_diag_whitelist_path
|
|
729
|
+
),
|
|
719
730
|
proxy_host=self.proxy_host,
|
|
720
731
|
proxy_port=self.proxy_port,
|
|
721
732
|
proxy_user=self.proxy_user,
|
|
@@ -936,14 +947,14 @@ class SnowflakeConnection:
|
|
|
936
947
|
|
|
937
948
|
if self._validate_default_parameters:
|
|
938
949
|
# Snowflake will validate the requested database, schema, and warehouse
|
|
939
|
-
self._session_parameters[
|
|
940
|
-
|
|
941
|
-
|
|
950
|
+
self._session_parameters[PARAMETER_CLIENT_VALIDATE_DEFAULT_PARAMETERS] = (
|
|
951
|
+
True
|
|
952
|
+
)
|
|
942
953
|
|
|
943
954
|
if self.client_session_keep_alive is not None:
|
|
944
|
-
self._session_parameters[
|
|
945
|
-
|
|
946
|
-
|
|
955
|
+
self._session_parameters[PARAMETER_CLIENT_SESSION_KEEP_ALIVE] = (
|
|
956
|
+
self._client_session_keep_alive
|
|
957
|
+
)
|
|
947
958
|
|
|
948
959
|
if self.client_session_keep_alive_heartbeat_frequency is not None:
|
|
949
960
|
self._session_parameters[
|
|
@@ -951,9 +962,9 @@ class SnowflakeConnection:
|
|
|
951
962
|
] = self._validate_client_session_keep_alive_heartbeat_frequency()
|
|
952
963
|
|
|
953
964
|
if self.client_prefetch_threads:
|
|
954
|
-
self._session_parameters[
|
|
955
|
-
|
|
956
|
-
|
|
965
|
+
self._session_parameters[PARAMETER_CLIENT_PREFETCH_THREADS] = (
|
|
966
|
+
self._validate_client_prefetch_threads()
|
|
967
|
+
)
|
|
957
968
|
|
|
958
969
|
# Setup authenticator
|
|
959
970
|
auth = Auth(self.rest)
|
|
@@ -1119,11 +1130,13 @@ class SnowflakeConnection:
|
|
|
1119
1130
|
warnings.warn(
|
|
1120
1131
|
"'{}' connection parameter should be of type '{}', but is a '{}'".format(
|
|
1121
1132
|
name,
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1133
|
+
(
|
|
1134
|
+
str(tuple(e.__name__ for e in accepted_types)).replace(
|
|
1135
|
+
"'", ""
|
|
1136
|
+
)
|
|
1137
|
+
if isinstance(accepted_types, tuple)
|
|
1138
|
+
else accepted_types.__name__
|
|
1139
|
+
),
|
|
1127
1140
|
type(value).__name__,
|
|
1128
1141
|
),
|
|
1129
1142
|
# Raise warning from where class was initiated
|
|
@@ -1182,6 +1195,12 @@ class SnowflakeConnection:
|
|
|
1182
1195
|
]:
|
|
1183
1196
|
self._authenticator = auth_tmp
|
|
1184
1197
|
|
|
1198
|
+
# read OAuth token from
|
|
1199
|
+
token_file_path = kwargs.get("token_file_path")
|
|
1200
|
+
if token_file_path:
|
|
1201
|
+
with open(token_file_path) as f:
|
|
1202
|
+
self._token = f.read()
|
|
1203
|
+
|
|
1185
1204
|
if not (self._master_token and self._session_token):
|
|
1186
1205
|
if not self.user and self._authenticator != OAUTH_AUTHENTICATOR:
|
|
1187
1206
|
# OAuth Authentication does not require a username
|
|
@@ -175,7 +175,9 @@ class ConnectionDiagnostic:
|
|
|
175
175
|
)
|
|
176
176
|
self.full_connection_diag_allowlist_path = None
|
|
177
177
|
|
|
178
|
-
self.allowlist_sql: str =
|
|
178
|
+
self.allowlist_sql: str = (
|
|
179
|
+
"select /* snowflake-connector-python:connection_diagnostics */ system$allowlist();"
|
|
180
|
+
)
|
|
179
181
|
|
|
180
182
|
if self.__is_privatelink():
|
|
181
183
|
self.ocsp_urls.append(f"ocsp.{self.host}")
|
|
@@ -149,9 +149,11 @@ class ResultMetadata(NamedTuple):
|
|
|
149
149
|
def from_column(cls, col: dict[str, Any]):
|
|
150
150
|
"""Initializes a ResultMetadata object from the column description in the query response."""
|
|
151
151
|
type_code = FIELD_NAME_TO_ID[
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
(
|
|
153
|
+
col["extTypeName"].upper()
|
|
154
|
+
if col.get("extTypeName")
|
|
155
|
+
else col["type"].upper()
|
|
156
|
+
)
|
|
155
157
|
]
|
|
156
158
|
|
|
157
159
|
return cls(
|
|
@@ -546,12 +548,10 @@ class SnowflakeCursor:
|
|
|
546
548
|
return None
|
|
547
549
|
|
|
548
550
|
@overload
|
|
549
|
-
def callproc(self, procname: str) -> tuple:
|
|
550
|
-
...
|
|
551
|
+
def callproc(self, procname: str) -> tuple: ...
|
|
551
552
|
|
|
552
553
|
@overload
|
|
553
|
-
def callproc(self, procname: str, args: T) -> T:
|
|
554
|
-
...
|
|
554
|
+
def callproc(self, procname: str, args: T) -> T: ...
|
|
555
555
|
|
|
556
556
|
def callproc(self, procname: str, args=tuple()):
|
|
557
557
|
"""Call a stored procedure.
|
|
@@ -630,9 +630,9 @@ class SnowflakeCursor:
|
|
|
630
630
|
if str(result_format_val).upper() == "ARROW":
|
|
631
631
|
self.check_can_use_arrow_resultset()
|
|
632
632
|
elif result_format_val is None:
|
|
633
|
-
statement_params[
|
|
634
|
-
|
|
635
|
-
|
|
633
|
+
statement_params[PARAMETER_PYTHON_CONNECTOR_QUERY_RESULT_FORMAT] = (
|
|
634
|
+
"JSON"
|
|
635
|
+
)
|
|
636
636
|
|
|
637
637
|
self._sequence_counter = self._connection._next_sequence_counter()
|
|
638
638
|
self._request_id = uuid.uuid4()
|
|
@@ -758,9 +758,11 @@ class SnowflakeCursor:
|
|
|
758
758
|
if params is not None and len(params) == 0:
|
|
759
759
|
self._log_telemetry_job_data(
|
|
760
760
|
TelemetryField.EMPTY_SEQ_INTERPOLATION,
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
761
|
+
(
|
|
762
|
+
TelemetryData.TRUE
|
|
763
|
+
if self.connection._interpolate_empty_sequences
|
|
764
|
+
else TelemetryData.FALSE
|
|
765
|
+
),
|
|
764
766
|
)
|
|
765
767
|
if logger.getEffectiveLevel() <= logging.DEBUG:
|
|
766
768
|
logger.debug(
|
|
@@ -807,8 +809,7 @@ class SnowflakeCursor:
|
|
|
807
809
|
_skip_upload_on_content_match: bool = False,
|
|
808
810
|
file_stream: IO[bytes] | None = None,
|
|
809
811
|
num_statements: int | None = None,
|
|
810
|
-
) -> Self | None:
|
|
811
|
-
...
|
|
812
|
+
) -> Self | None: ...
|
|
812
813
|
|
|
813
814
|
@overload
|
|
814
815
|
def execute(
|
|
@@ -837,8 +838,7 @@ class SnowflakeCursor:
|
|
|
837
838
|
_skip_upload_on_content_match: bool = False,
|
|
838
839
|
file_stream: IO[bytes] | None = None,
|
|
839
840
|
num_statements: int | None = None,
|
|
840
|
-
) -> dict[str, Any] | None:
|
|
841
|
-
...
|
|
841
|
+
) -> dict[str, Any] | None: ...
|
|
842
842
|
|
|
843
843
|
def execute(
|
|
844
844
|
self,
|
|
@@ -1278,12 +1278,10 @@ class SnowflakeCursor:
|
|
|
1278
1278
|
return self._result_set._fetch_arrow_batches()
|
|
1279
1279
|
|
|
1280
1280
|
@overload
|
|
1281
|
-
def fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None:
|
|
1282
|
-
...
|
|
1281
|
+
def fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None: ...
|
|
1283
1282
|
|
|
1284
1283
|
@overload
|
|
1285
|
-
def fetch_arrow_all(self, force_return_table: Literal[True]) -> Table:
|
|
1286
|
-
...
|
|
1284
|
+
def fetch_arrow_all(self, force_return_table: Literal[True]) -> Table: ...
|
|
1287
1285
|
|
|
1288
1286
|
def fetch_arrow_all(self, force_return_table: bool = False) -> Table | None:
|
|
1289
1287
|
"""
|
|
@@ -153,9 +153,9 @@ class Error(BASE_EXCEPTION_CLASS):
|
|
|
153
153
|
and not connection._telemetry.is_closed
|
|
154
154
|
):
|
|
155
155
|
# Send with in-band telemetry
|
|
156
|
-
telemetry_data[
|
|
157
|
-
TelemetryField.
|
|
158
|
-
|
|
156
|
+
telemetry_data[TelemetryField.KEY_TYPE.value] = (
|
|
157
|
+
TelemetryField.SQL_EXCEPTION.value
|
|
158
|
+
)
|
|
159
159
|
telemetry_data[TelemetryField.KEY_SOURCE.value] = connection.application
|
|
160
160
|
telemetry_data[TelemetryField.KEY_EXCEPTION.value] = self.__class__.__name__
|
|
161
161
|
ts = get_time_millis()
|
|
@@ -941,9 +941,9 @@ class SnowflakeFileTransferAgent:
|
|
|
941
941
|
if len(response["src_locations"]) == len(self._encryption_material):
|
|
942
942
|
for idx, src_file in enumerate(self._src_files):
|
|
943
943
|
logger.debug(src_file)
|
|
944
|
-
self._src_file_to_encryption_material[
|
|
945
|
-
|
|
946
|
-
|
|
944
|
+
self._src_file_to_encryption_material[src_file] = (
|
|
945
|
+
self._encryption_material[idx]
|
|
946
|
+
)
|
|
947
947
|
elif len(self._encryption_material) != 0:
|
|
948
948
|
# some encryption material exists. Zero means no encryption
|
|
949
949
|
Error.errorhandler_wrapper(
|
|
@@ -1000,9 +1000,11 @@ class SnowflakeFileTransferAgent:
|
|
|
1000
1000
|
intermediate_stream=self._source_from_stream,
|
|
1001
1001
|
src_file_size=self._source_from_stream.seek(0, os.SEEK_END),
|
|
1002
1002
|
stage_location_type=self._stage_location_type,
|
|
1003
|
-
encryption_material=
|
|
1004
|
-
|
|
1005
|
-
|
|
1003
|
+
encryption_material=(
|
|
1004
|
+
self._encryption_material[0]
|
|
1005
|
+
if len(self._encryption_material) > 0
|
|
1006
|
+
else None
|
|
1007
|
+
),
|
|
1006
1008
|
)
|
|
1007
1009
|
)
|
|
1008
1010
|
self._source_from_stream.seek(0)
|
|
@@ -1035,9 +1037,11 @@ class SnowflakeFileTransferAgent:
|
|
|
1035
1037
|
src_file_name=file_name,
|
|
1036
1038
|
src_file_size=statinfo.st_size,
|
|
1037
1039
|
stage_location_type=self._stage_location_type,
|
|
1038
|
-
encryption_material=
|
|
1039
|
-
|
|
1040
|
-
|
|
1040
|
+
encryption_material=(
|
|
1041
|
+
self._encryption_material[0]
|
|
1042
|
+
if len(self._encryption_material) > 0
|
|
1043
|
+
else None
|
|
1044
|
+
),
|
|
1041
1045
|
)
|
|
1042
1046
|
)
|
|
1043
1047
|
elif self._command_type == CMD_TYPE_DOWNLOAD:
|
|
@@ -1066,11 +1070,11 @@ class SnowflakeFileTransferAgent:
|
|
|
1066
1070
|
stage_location_type=self._stage_location_type,
|
|
1067
1071
|
local_location=self._local_location,
|
|
1068
1072
|
presigned_url=url,
|
|
1069
|
-
encryption_material=
|
|
1070
|
-
file_name
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1073
|
+
encryption_material=(
|
|
1074
|
+
self._src_file_to_encryption_material[file_name]
|
|
1075
|
+
if file_name in self._src_file_to_encryption_material
|
|
1076
|
+
else None
|
|
1077
|
+
),
|
|
1074
1078
|
)
|
|
1075
1079
|
)
|
|
1076
1080
|
|
|
@@ -203,9 +203,11 @@ class SnowflakeGCSRestClient(SnowflakeStorageClient):
|
|
|
203
203
|
encryption_metadata = EncryptionMetadata(
|
|
204
204
|
key=encryptiondata["WrappedContentKey"]["EncryptedKey"],
|
|
205
205
|
iv=encryptiondata["ContentEncryptionIV"],
|
|
206
|
-
matdesc=
|
|
207
|
-
|
|
208
|
-
|
|
206
|
+
matdesc=(
|
|
207
|
+
response.headers[GCS_METADATA_MATDESC_KEY]
|
|
208
|
+
if GCS_METADATA_MATDESC_KEY in response.headers
|
|
209
|
+
else None
|
|
210
|
+
),
|
|
209
211
|
)
|
|
210
212
|
|
|
211
213
|
meta.gcs_file_header_digest = response.headers.get(GCS_METADATA_SFC_DIGEST)
|
|
@@ -359,9 +361,11 @@ class SnowflakeGCSRestClient(SnowflakeStorageClient):
|
|
|
359
361
|
encryption_metadata = EncryptionMetadata(
|
|
360
362
|
key=encryption_data["WrappedContentKey"]["EncryptedKey"],
|
|
361
363
|
iv=encryption_data["ContentEncryptionIV"],
|
|
362
|
-
matdesc=
|
|
363
|
-
|
|
364
|
-
|
|
364
|
+
matdesc=(
|
|
365
|
+
response.headers[GCS_METADATA_MATDESC_KEY]
|
|
366
|
+
if GCS_METADATA_MATDESC_KEY in response.headers
|
|
367
|
+
else None
|
|
368
|
+
),
|
|
365
369
|
)
|
|
366
370
|
meta.result_status = ResultStatus.UPLOADED
|
|
367
371
|
return FileHeader(
|
|
@@ -226,8 +226,6 @@ void CArrowTableIterator::convertIfNeeded(ArrowSchema* columnSchema,
|
|
|
226
226
|
scale =
|
|
227
227
|
std::stoi(std::string(scaleString.data, scaleString.size_bytes));
|
|
228
228
|
}
|
|
229
|
-
|
|
230
|
-
logger->error(__FILE__, __func__, __LINE__, "scale: %d", scale);
|
|
231
229
|
convertTimestampColumn_nanoarrow(&columnSchemaView, columnArray, scale,
|
|
232
230
|
m_timezone);
|
|
233
231
|
break;
|
|
@@ -832,9 +832,9 @@ class SnowflakeRestful:
|
|
|
832
832
|
retry_ctx = RetryCtx(
|
|
833
833
|
_include_retry_params=include_retry_params,
|
|
834
834
|
_include_retry_reason=include_retry_reason,
|
|
835
|
-
timeout=
|
|
836
|
-
|
|
837
|
-
|
|
835
|
+
timeout=(
|
|
836
|
+
timeout if timeout is not None else self._connection.network_timeout
|
|
837
|
+
),
|
|
838
838
|
backoff_generator=self._connection._backoff_generator,
|
|
839
839
|
)
|
|
840
840
|
|
|
@@ -50,8 +50,8 @@ class SnowflakeOCSPAsn1Crypto(SnowflakeOCSP):
|
|
|
50
50
|
# map signature algorithm name to digest class
|
|
51
51
|
SIGNATURE_ALGORITHM_TO_DIGEST_CLASS = {
|
|
52
52
|
"sha256": hashes.SHA256,
|
|
53
|
-
"sha384": hashes.
|
|
54
|
-
"sha512": hashes.
|
|
53
|
+
"sha384": hashes.SHA384,
|
|
54
|
+
"sha512": hashes.SHA512,
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
def encode_cert_id_key(self, hkey):
|
|
@@ -62,6 +62,7 @@ from . import constants
|
|
|
62
62
|
from .backoff_policies import exponential_backoff
|
|
63
63
|
from .cache import SFDictCache, SFDictFileCache
|
|
64
64
|
from .telemetry import TelemetryField, generate_telemetry_data_dict
|
|
65
|
+
from .url_util import url_encode_str
|
|
65
66
|
|
|
66
67
|
|
|
67
68
|
class OCSPResponseValidationResult(NamedTuple):
|
|
@@ -436,8 +437,9 @@ class OCSPServer:
|
|
|
436
437
|
|
|
437
438
|
def generate_get_url(self, ocsp_url, b64data):
|
|
438
439
|
parsed_url = urlsplit(ocsp_url)
|
|
440
|
+
url_encoded_b64data = url_encode_str(b64data)
|
|
439
441
|
if self.OCSP_RETRY_URL is None:
|
|
440
|
-
target_url = f"{ocsp_url}/{
|
|
442
|
+
target_url = f"{ocsp_url}/{url_encoded_b64data}"
|
|
441
443
|
else:
|
|
442
444
|
# values of parsed_url.netloc and parsed_url.path based on oscp_url are as follows:
|
|
443
445
|
# URL NETLOC PATH
|
|
@@ -447,7 +449,9 @@ class OCSPServer:
|
|
|
447
449
|
# "http://oneocsp.microsoft.com/ocsp" "oneocsp.microsoft.com" "/ocsp"
|
|
448
450
|
# The check below is to treat first two urls same
|
|
449
451
|
path = parsed_url.path if parsed_url.path != "/" else ""
|
|
450
|
-
target_url = self.OCSP_RETRY_URL.format(
|
|
452
|
+
target_url = self.OCSP_RETRY_URL.format(
|
|
453
|
+
parsed_url.netloc + path, url_encoded_b64data
|
|
454
|
+
)
|
|
451
455
|
|
|
452
456
|
logger.debug("OCSP Retry URL is - %s", target_url)
|
|
453
457
|
return target_url
|
|
@@ -366,9 +366,9 @@ class ResultBatch(abc.ABC):
|
|
|
366
366
|
)
|
|
367
367
|
time.sleep(sleep_timer)
|
|
368
368
|
|
|
369
|
-
self._metrics[
|
|
370
|
-
|
|
371
|
-
|
|
369
|
+
self._metrics[DownloadMetrics.download.value] = (
|
|
370
|
+
download_metric.get_timing_millis()
|
|
371
|
+
)
|
|
372
372
|
return response
|
|
373
373
|
|
|
374
374
|
@abc.abstractmethod
|
|
@@ -664,11 +664,21 @@ class ArrowResultBatch(ResultBatch):
|
|
|
664
664
|
) -> Iterator[dict | Exception] | Iterator[tuple | Exception] | Iterator[Table]:
|
|
665
665
|
"""Create an iterator for the ResultBatch. Used by get_arrow_iter."""
|
|
666
666
|
if self._local:
|
|
667
|
-
|
|
667
|
+
try:
|
|
668
|
+
return self._from_data(self._data, iter_unit)
|
|
669
|
+
except Exception:
|
|
670
|
+
if connection and getattr(connection, "_debug_arrow_chunk", False):
|
|
671
|
+
logger.debug(f"arrow data can not be parsed: {self._data}")
|
|
672
|
+
raise
|
|
668
673
|
response = self._download(connection=connection)
|
|
669
674
|
logger.debug(f"started loading result batch id: {self.id}")
|
|
670
675
|
with TimerContextManager() as load_metric:
|
|
671
|
-
|
|
676
|
+
try:
|
|
677
|
+
loaded_data = self._load(response, iter_unit)
|
|
678
|
+
except Exception:
|
|
679
|
+
if connection and getattr(connection, "_debug_arrow_chunk", False):
|
|
680
|
+
logger.debug(f"arrow data can not be parsed: {response}")
|
|
681
|
+
raise
|
|
672
682
|
logger.debug(f"finished loading result batch id: {self.id}")
|
|
673
683
|
self._metrics[DownloadMetrics.load.value] = load_metric.get_timing_millis()
|
|
674
684
|
return loaded_data
|
|
@@ -174,12 +174,10 @@ class ResultSet(Iterable[list]):
|
|
|
174
174
|
return self._create_iter(iter_unit=IterUnit.TABLE_UNIT, structure="arrow")
|
|
175
175
|
|
|
176
176
|
@overload
|
|
177
|
-
def _fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None:
|
|
178
|
-
...
|
|
177
|
+
def _fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None: ...
|
|
179
178
|
|
|
180
179
|
@overload
|
|
181
|
-
def _fetch_arrow_all(self, force_return_table: Literal[True]) -> Table:
|
|
182
|
-
...
|
|
180
|
+
def _fetch_arrow_all(self, force_return_table: Literal[True]) -> Table: ...
|
|
183
181
|
|
|
184
182
|
def _fetch_arrow_all(self, force_return_table: bool = False) -> Table | None:
|
|
185
183
|
"""Fetches a single Arrow Table from all of the ``ResultBatch``."""
|
|
@@ -74,7 +74,7 @@ class SnowflakeStorageClient(ABC):
|
|
|
74
74
|
) -> None:
|
|
75
75
|
self.meta = meta
|
|
76
76
|
self.stage_info = stage_info
|
|
77
|
-
self.retry_count: dict[int | str, int] = defaultdict(
|
|
77
|
+
self.retry_count: dict[int | str, int] = defaultdict(int)
|
|
78
78
|
self.tmp_dir = tempfile.mkdtemp()
|
|
79
79
|
self.data_file: str | None = None
|
|
80
80
|
self.encryption_metadata: EncryptionMetadata | None = None
|
|
@@ -247,7 +247,7 @@ class SnowflakeStorageClient(ABC):
|
|
|
247
247
|
|
|
248
248
|
def finish_upload(self) -> None:
|
|
249
249
|
meta = self.meta
|
|
250
|
-
if self.successful_transfers == self.num_of_chunks:
|
|
250
|
+
if self.successful_transfers == self.num_of_chunks and self.num_of_chunks != 0:
|
|
251
251
|
if self.num_of_chunks > 1:
|
|
252
252
|
self._complete_multipart_upload()
|
|
253
253
|
meta.result_status = ResultStatus.UPLOADED
|
|
@@ -239,9 +239,9 @@ def generate_telemetry_data_dict(
|
|
|
239
239
|
{
|
|
240
240
|
TelemetryField.KEY_DRIVER_TYPE.value: CLIENT_NAME,
|
|
241
241
|
TelemetryField.KEY_DRIVER_VERSION.value: SNOWFLAKE_CONNECTOR_VERSION,
|
|
242
|
-
TelemetryField.KEY_SOURCE.value:
|
|
243
|
-
|
|
244
|
-
|
|
242
|
+
TelemetryField.KEY_SOURCE.value: (
|
|
243
|
+
connection.application if connection else CLIENT_NAME
|
|
244
|
+
),
|
|
245
245
|
**from_dict,
|
|
246
246
|
}
|
|
247
247
|
if not is_oob_telemetry
|