snowflake-connector-python 3.17.1__tar.gz → 3.17.3__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.17.1 → snowflake_connector_python-3.17.3}/DESCRIPTION.md +10 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/PKG-INFO +12 -2
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/setup.cfg +1 -1
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/_auth.py +2 -2
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/okta.py +3 -1
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/webbrowser.py +8 -6
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/workload_identity.py +3 -1
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/config_manager.py +12 -2
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/cursor.py +30 -34
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/platform_detection.py +31 -28
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/session_manager.py +59 -36
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/wif_util.py +3 -1
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/PKG-INFO +12 -2
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/LICENSE.txt +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/MANIFEST.in +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/NOTICE +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/README.md +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/SECURITY.md +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/pyproject.toml +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/setup.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/_utils.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/_oauth_base.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/oauth_code.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/connection.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/interval_util.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/network.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/token_cache.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-3.17.1 → snowflake_connector_python-3.17.3}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -7,6 +7,16 @@ https://docs.snowflake.com/
|
|
|
7
7
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
8
8
|
|
|
9
9
|
# Release Notes
|
|
10
|
+
- v3.17.3(September 02,2025)
|
|
11
|
+
- Enhanced configuration file permission warning messages.
|
|
12
|
+
- Improved warning messages for readable permission issues to include clear instructions on how to skip warnings using the `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` environment variable.
|
|
13
|
+
- Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
|
|
14
|
+
- This addresses the issue with `create_dataframe` call on Snowpark
|
|
15
|
+
|
|
16
|
+
- v3.17.2(August 23,2025)
|
|
17
|
+
- Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
|
|
18
|
+
- Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
|
|
19
|
+
|
|
10
20
|
- v3.17.1(August 17,2025)
|
|
11
21
|
- Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
|
|
12
22
|
- Namespace `snowlake` reverted back to non-module.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.17.
|
|
3
|
+
Version: 3.17.3
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -66,7 +66,7 @@ Requires-Dist: pendulum!=2.1.1; extra == "development"
|
|
|
66
66
|
Requires-Dist: pexpect; extra == "development"
|
|
67
67
|
Requires-Dist: pytest<7.5.0; extra == "development"
|
|
68
68
|
Requires-Dist: pytest-cov; extra == "development"
|
|
69
|
-
Requires-Dist: pytest-rerunfailures; extra == "development"
|
|
69
|
+
Requires-Dist: pytest-rerunfailures<16.0; extra == "development"
|
|
70
70
|
Requires-Dist: pytest-timeout; extra == "development"
|
|
71
71
|
Requires-Dist: pytest-xdist; extra == "development"
|
|
72
72
|
Requires-Dist: pytzdata; extra == "development"
|
|
@@ -86,6 +86,16 @@ https://docs.snowflake.com/
|
|
|
86
86
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
87
87
|
|
|
88
88
|
# Release Notes
|
|
89
|
+
- v3.17.3(September 02,2025)
|
|
90
|
+
- Enhanced configuration file permission warning messages.
|
|
91
|
+
- Improved warning messages for readable permission issues to include clear instructions on how to skip warnings using the `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` environment variable.
|
|
92
|
+
- Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
|
|
93
|
+
- This addresses the issue with `create_dataframe` call on Snowpark
|
|
94
|
+
|
|
95
|
+
- v3.17.2(August 23,2025)
|
|
96
|
+
- Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
|
|
97
|
+
- Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
|
|
98
|
+
|
|
89
99
|
- v3.17.1(August 17,2025)
|
|
90
100
|
- Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
|
|
91
101
|
- Namespace `snowlake` reverted back to non-module.
|
|
@@ -128,7 +128,7 @@ class Auth:
|
|
|
128
128
|
"SOCKET_TIMEOUT": socket_timeout,
|
|
129
129
|
"PLATFORM": detect_platforms(
|
|
130
130
|
platform_detection_timeout_seconds=platform_detection_timeout_seconds,
|
|
131
|
-
session_manager=session_manager,
|
|
131
|
+
session_manager=session_manager.clone(max_retries=0),
|
|
132
132
|
),
|
|
133
133
|
},
|
|
134
134
|
},
|
|
@@ -185,7 +185,7 @@ class Auth:
|
|
|
185
185
|
self._rest._connection.login_timeout,
|
|
186
186
|
self._rest._connection._network_timeout,
|
|
187
187
|
self._rest._connection._socket_timeout,
|
|
188
|
-
self._rest._connection.
|
|
188
|
+
self._rest._connection.platform_detection_timeout_seconds,
|
|
189
189
|
session_manager=self._rest.session_manager.clone(use_pooling=False),
|
|
190
190
|
)
|
|
191
191
|
|
|
@@ -167,7 +167,9 @@ class AuthByOkta(AuthByPlugin):
|
|
|
167
167
|
conn._internal_application_version,
|
|
168
168
|
conn._ocsp_mode(),
|
|
169
169
|
conn.login_timeout,
|
|
170
|
-
conn.
|
|
170
|
+
conn.network_timeout,
|
|
171
|
+
conn.socket_timeout,
|
|
172
|
+
conn.platform_detection_timeout_seconds,
|
|
171
173
|
session_manager=conn._session_manager.clone(use_pooling=False),
|
|
172
174
|
)
|
|
173
175
|
|
|
@@ -456,12 +456,14 @@ You can close this window now and go back where you started from.
|
|
|
456
456
|
body = Auth.base_auth_data(
|
|
457
457
|
user,
|
|
458
458
|
account,
|
|
459
|
-
conn.
|
|
460
|
-
conn.
|
|
461
|
-
conn.
|
|
462
|
-
conn.
|
|
463
|
-
conn.
|
|
464
|
-
conn.
|
|
459
|
+
conn.application,
|
|
460
|
+
conn._internal_application_name,
|
|
461
|
+
conn._internal_application_version,
|
|
462
|
+
conn._ocsp_mode(),
|
|
463
|
+
conn.login_timeout,
|
|
464
|
+
conn.network_timeout,
|
|
465
|
+
conn.socket_timeout,
|
|
466
|
+
conn.platform_detection_timeout_seconds,
|
|
465
467
|
session_manager=conn.rest.session_manager.clone(use_pooling=False),
|
|
466
468
|
)
|
|
467
469
|
|
|
@@ -85,7 +85,9 @@ class AuthByWorkloadIdentity(AuthByPlugin):
|
|
|
85
85
|
self.provider,
|
|
86
86
|
self.entra_resource,
|
|
87
87
|
self.token,
|
|
88
|
-
session_manager=
|
|
88
|
+
session_manager=(
|
|
89
|
+
conn._session_manager.clone(max_retries=0) if conn else None
|
|
90
|
+
),
|
|
89
91
|
)
|
|
90
92
|
|
|
91
93
|
def reauthenticate(self, **kwargs: typing.Any) -> dict[str, bool]:
|
|
@@ -29,6 +29,14 @@ LOGGER = logging.getLogger(__name__)
|
|
|
29
29
|
READABLE_BY_OTHERS = stat.S_IRGRP | stat.S_IROTH
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
SKIP_WARNING_ENV_VAR = "SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _should_skip_warning_for_read_permissions_on_config_file() -> bool:
|
|
36
|
+
"""Check if the warning should be skipped based on environment variable."""
|
|
37
|
+
return os.getenv(SKIP_WARNING_ENV_VAR, "false").lower() == "true"
|
|
38
|
+
|
|
39
|
+
|
|
32
40
|
class ConfigSliceOptions(NamedTuple):
|
|
33
41
|
"""Class that defines settings individual configuration files."""
|
|
34
42
|
|
|
@@ -329,6 +337,7 @@ class ConfigManager:
|
|
|
329
337
|
)
|
|
330
338
|
continue
|
|
331
339
|
|
|
340
|
+
# Check for readable by others or wrong ownership - this should warn
|
|
332
341
|
if (
|
|
333
342
|
not IS_WINDOWS # Skip checking on Windows
|
|
334
343
|
and sliceoptions.check_permissions # Skip checking if this file couldn't hold sensitive information
|
|
@@ -342,9 +351,10 @@ class ConfigManager:
|
|
|
342
351
|
and filep.stat().st_uid != os.getuid()
|
|
343
352
|
)
|
|
344
353
|
):
|
|
345
|
-
chmod_message = f'.\n * To change owner, run `chown $USER "{str(filep)}"`.\n * To restrict permissions, run `chmod 0600 "{str(filep)}"`.\n'
|
|
354
|
+
chmod_message = f'.\n * To change owner, run `chown $USER "{str(filep)}"`.\n * To restrict permissions, run `chmod 0600 "{str(filep)}"`.\n * To skip this warning, set environment variable {SKIP_WARNING_ENV_VAR}=true.\n'
|
|
346
355
|
|
|
347
|
-
|
|
356
|
+
if not _should_skip_warning_for_read_permissions_on_config_file():
|
|
357
|
+
warn(f"Bad owner or permissions on {str(filep)}{chmod_message}")
|
|
348
358
|
LOGGER.debug(f"reading configuration file from {str(filep)}")
|
|
349
359
|
try:
|
|
350
360
|
read_config_piece = tomlkit.parse(filep.read_text())
|
|
@@ -79,7 +79,10 @@ if TYPE_CHECKING: # pragma: no cover
|
|
|
79
79
|
from pyarrow import Table
|
|
80
80
|
|
|
81
81
|
from .connection import SnowflakeConnection
|
|
82
|
-
from .file_transfer_agent import
|
|
82
|
+
from .file_transfer_agent import (
|
|
83
|
+
SnowflakeFileTransferAgent,
|
|
84
|
+
SnowflakeProgressPercentage,
|
|
85
|
+
)
|
|
83
86
|
from .result_batch import ResultBatch
|
|
84
87
|
|
|
85
88
|
T = TypeVar("T", bound=collections.abc.Sequence)
|
|
@@ -1064,11 +1067,7 @@ class SnowflakeCursor:
|
|
|
1064
1067
|
)
|
|
1065
1068
|
logger.debug("PUT OR GET: %s", self.is_file_transfer)
|
|
1066
1069
|
if self.is_file_transfer:
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
# Decide whether to use the old, or new code path
|
|
1070
|
-
sf_file_transfer_agent = SnowflakeFileTransferAgent(
|
|
1071
|
-
self,
|
|
1070
|
+
sf_file_transfer_agent = self._create_file_transfer_agent(
|
|
1072
1071
|
query,
|
|
1073
1072
|
ret,
|
|
1074
1073
|
put_callback=_put_callback,
|
|
@@ -1084,13 +1083,6 @@ class SnowflakeCursor:
|
|
|
1084
1083
|
skip_upload_on_content_match=_skip_upload_on_content_match,
|
|
1085
1084
|
source_from_stream=file_stream,
|
|
1086
1085
|
multipart_threshold=data.get("threshold"),
|
|
1087
|
-
use_s3_regional_url=self._connection.enable_stage_s3_privatelink_for_us_east_1,
|
|
1088
|
-
iobound_tpe_limit=self._connection.iobound_tpe_limit,
|
|
1089
|
-
unsafe_file_write=self._connection.unsafe_file_write,
|
|
1090
|
-
snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
|
|
1091
|
-
self._connection
|
|
1092
|
-
),
|
|
1093
|
-
reraise_error_in_file_transfer_work_function=self.connection._reraise_error_in_file_transfer_work_function,
|
|
1094
1086
|
)
|
|
1095
1087
|
sf_file_transfer_agent.execute()
|
|
1096
1088
|
data = sf_file_transfer_agent.result()
|
|
@@ -1786,8 +1778,6 @@ class SnowflakeCursor:
|
|
|
1786
1778
|
_do_reset (bool, optional): Whether to reset the cursor before
|
|
1787
1779
|
downloading, by default we will reset the cursor.
|
|
1788
1780
|
"""
|
|
1789
|
-
from .file_transfer_agent import SnowflakeFileTransferAgent
|
|
1790
|
-
|
|
1791
1781
|
if _do_reset:
|
|
1792
1782
|
self.reset()
|
|
1793
1783
|
|
|
@@ -1801,14 +1791,9 @@ class SnowflakeCursor:
|
|
|
1801
1791
|
)
|
|
1802
1792
|
|
|
1803
1793
|
# Execute the file operation based on the interpretation above.
|
|
1804
|
-
file_transfer_agent =
|
|
1805
|
-
self,
|
|
1794
|
+
file_transfer_agent = self._create_file_transfer_agent(
|
|
1806
1795
|
"", # empty command because it is triggered by directly calling this util not by a SQL query
|
|
1807
1796
|
ret,
|
|
1808
|
-
snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
|
|
1809
|
-
self._connection
|
|
1810
|
-
),
|
|
1811
|
-
reraise_error_in_file_transfer_work_function=self.connection._reraise_error_in_file_transfer_work_function,
|
|
1812
1797
|
)
|
|
1813
1798
|
file_transfer_agent.execute()
|
|
1814
1799
|
self._init_result_and_meta(file_transfer_agent.result())
|
|
@@ -1829,7 +1814,6 @@ class SnowflakeCursor:
|
|
|
1829
1814
|
_do_reset (bool, optional): Whether to reset the cursor before
|
|
1830
1815
|
uploading, by default we will reset the cursor.
|
|
1831
1816
|
"""
|
|
1832
|
-
from .file_transfer_agent import SnowflakeFileTransferAgent
|
|
1833
1817
|
|
|
1834
1818
|
if _do_reset:
|
|
1835
1819
|
self.reset()
|
|
@@ -1844,15 +1828,10 @@ class SnowflakeCursor:
|
|
|
1844
1828
|
)
|
|
1845
1829
|
|
|
1846
1830
|
# Execute the file operation based on the interpretation above.
|
|
1847
|
-
file_transfer_agent =
|
|
1848
|
-
self,
|
|
1831
|
+
file_transfer_agent = self._create_file_transfer_agent(
|
|
1849
1832
|
"", # empty command because it is triggered by directly calling this util not by a SQL query
|
|
1850
1833
|
ret,
|
|
1851
1834
|
force_put_overwrite=False, # _upload should respect user decision on overwriting
|
|
1852
|
-
snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
|
|
1853
|
-
self._connection
|
|
1854
|
-
),
|
|
1855
|
-
reraise_error_in_file_transfer_work_function=self.connection._reraise_error_in_file_transfer_work_function,
|
|
1856
1835
|
)
|
|
1857
1836
|
file_transfer_agent.execute()
|
|
1858
1837
|
self._init_result_and_meta(file_transfer_agent.result())
|
|
@@ -1899,7 +1878,6 @@ class SnowflakeCursor:
|
|
|
1899
1878
|
_do_reset (bool, optional): Whether to reset the cursor before
|
|
1900
1879
|
uploading, by default we will reset the cursor.
|
|
1901
1880
|
"""
|
|
1902
|
-
from .file_transfer_agent import SnowflakeFileTransferAgent
|
|
1903
1881
|
|
|
1904
1882
|
if _do_reset:
|
|
1905
1883
|
self.reset()
|
|
@@ -1915,19 +1893,37 @@ class SnowflakeCursor:
|
|
|
1915
1893
|
)
|
|
1916
1894
|
|
|
1917
1895
|
# Execute the file operation based on the interpretation above.
|
|
1918
|
-
file_transfer_agent =
|
|
1919
|
-
self,
|
|
1896
|
+
file_transfer_agent = self._create_file_transfer_agent(
|
|
1920
1897
|
"", # empty command because it is triggered by directly calling this util not by a SQL query
|
|
1921
1898
|
ret,
|
|
1922
1899
|
source_from_stream=input_stream,
|
|
1923
1900
|
force_put_overwrite=False, # _upload_stream should respect user decision on overwriting
|
|
1901
|
+
)
|
|
1902
|
+
file_transfer_agent.execute()
|
|
1903
|
+
self._init_result_and_meta(file_transfer_agent.result())
|
|
1904
|
+
|
|
1905
|
+
def _create_file_transfer_agent(
|
|
1906
|
+
self,
|
|
1907
|
+
command: str,
|
|
1908
|
+
ret: dict[str, Any],
|
|
1909
|
+
/,
|
|
1910
|
+
**kwargs,
|
|
1911
|
+
) -> SnowflakeFileTransferAgent:
|
|
1912
|
+
from .file_transfer_agent import SnowflakeFileTransferAgent
|
|
1913
|
+
|
|
1914
|
+
return SnowflakeFileTransferAgent(
|
|
1915
|
+
self,
|
|
1916
|
+
command,
|
|
1917
|
+
ret,
|
|
1918
|
+
use_s3_regional_url=self._connection.enable_stage_s3_privatelink_for_us_east_1,
|
|
1919
|
+
iobound_tpe_limit=self._connection.iobound_tpe_limit,
|
|
1920
|
+
unsafe_file_write=self._connection.unsafe_file_write,
|
|
1924
1921
|
snowflake_server_dop_cap_for_file_transfer=_snowflake_max_parallelism_for_file_transfer(
|
|
1925
1922
|
self._connection
|
|
1926
1923
|
),
|
|
1927
|
-
reraise_error_in_file_transfer_work_function=self.
|
|
1924
|
+
reraise_error_in_file_transfer_work_function=self._connection._reraise_error_in_file_transfer_work_function,
|
|
1925
|
+
**kwargs,
|
|
1928
1926
|
)
|
|
1929
|
-
file_transfer_agent.execute()
|
|
1930
|
-
self._init_result_and_meta(file_transfer_agent.result())
|
|
1931
1927
|
|
|
1932
1928
|
|
|
1933
1929
|
class DictCursor(SnowflakeCursor):
|
|
@@ -399,7 +399,7 @@ def detect_platforms(
|
|
|
399
399
|
|
|
400
400
|
if session_manager is None:
|
|
401
401
|
# This should never happen - we expect session manager to be passed from the outer scope
|
|
402
|
-
session_manager = SessionManager(use_pooling=False)
|
|
402
|
+
session_manager = SessionManager(use_pooling=False, max_retries=0)
|
|
403
403
|
|
|
404
404
|
# Run environment-only checks synchronously (no network calls, no threading overhead)
|
|
405
405
|
platforms = {
|
|
@@ -411,33 +411,36 @@ def detect_platforms(
|
|
|
411
411
|
}
|
|
412
412
|
|
|
413
413
|
# Run network-calling functions in parallel
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
is_ec2_instance
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
has_aws_identity
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
is_azure_vm
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
has_azure_managed_identity
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
is_gce_vm
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
has_gcp_identity
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
414
|
+
if platform_detection_timeout_seconds != 0.0:
|
|
415
|
+
with ThreadPoolExecutor(max_workers=6) as executor:
|
|
416
|
+
futures = {
|
|
417
|
+
"is_ec2_instance": executor.submit(
|
|
418
|
+
is_ec2_instance, platform_detection_timeout_seconds
|
|
419
|
+
),
|
|
420
|
+
"has_aws_identity": executor.submit(
|
|
421
|
+
has_aws_identity, platform_detection_timeout_seconds
|
|
422
|
+
),
|
|
423
|
+
"is_azure_vm": executor.submit(
|
|
424
|
+
is_azure_vm, platform_detection_timeout_seconds, session_manager
|
|
425
|
+
),
|
|
426
|
+
"has_azure_managed_identity": executor.submit(
|
|
427
|
+
has_azure_managed_identity,
|
|
428
|
+
platform_detection_timeout_seconds,
|
|
429
|
+
session_manager,
|
|
430
|
+
),
|
|
431
|
+
"is_gce_vm": executor.submit(
|
|
432
|
+
is_gce_vm, platform_detection_timeout_seconds, session_manager
|
|
433
|
+
),
|
|
434
|
+
"has_gcp_identity": executor.submit(
|
|
435
|
+
has_gcp_identity,
|
|
436
|
+
platform_detection_timeout_seconds,
|
|
437
|
+
session_manager,
|
|
438
|
+
),
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
platforms.update(
|
|
442
|
+
{key: future.result() for key, future in futures.items()}
|
|
443
|
+
)
|
|
441
444
|
|
|
442
445
|
detected_platforms = []
|
|
443
446
|
for platform_name, detection_state in platforms.items():
|
|
@@ -16,7 +16,7 @@ from .vendored.requests import Response, Session
|
|
|
16
16
|
from .vendored.requests.adapters import BaseAdapter, HTTPAdapter
|
|
17
17
|
from .vendored.requests.exceptions import InvalidProxyURL
|
|
18
18
|
from .vendored.requests.utils import prepend_scheme_if_needed, select_proxy
|
|
19
|
-
from .vendored.urllib3 import PoolManager
|
|
19
|
+
from .vendored.urllib3 import PoolManager, Retry
|
|
20
20
|
from .vendored.urllib3.poolmanager import ProxyManager
|
|
21
21
|
from .vendored.urllib3.util.url import parse_url
|
|
22
22
|
|
|
@@ -119,7 +119,7 @@ class HttpConfig:
|
|
|
119
119
|
default_factory=ProxySupportAdapterFactory
|
|
120
120
|
)
|
|
121
121
|
use_pooling: bool = True
|
|
122
|
-
max_retries: int | None = REQUESTS_RETRY
|
|
122
|
+
max_retries: int | Retry | None = REQUESTS_RETRY
|
|
123
123
|
proxy_host: str | None = None
|
|
124
124
|
proxy_port: str | None = None
|
|
125
125
|
proxy_user: str | None = None
|
|
@@ -129,6 +129,22 @@ class HttpConfig:
|
|
|
129
129
|
"""Return a new HttpConfig with overrides applied."""
|
|
130
130
|
return replace(self, **overrides)
|
|
131
131
|
|
|
132
|
+
def get_adapter(self, **override_adapter_factory_kwargs) -> HTTPAdapter:
|
|
133
|
+
# We pass here only chosen attributes as kwargs to make the arguments received by the factory as compliant with the HttpAdapter constructor interface as possible.
|
|
134
|
+
# We could consider passing the whole HttpConfig as kwarg to the factory if necessary in the future.
|
|
135
|
+
attributes_for_adapter_factory = frozenset(
|
|
136
|
+
{
|
|
137
|
+
"max_retries",
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
self_kwargs_for_adapter_factory = {
|
|
142
|
+
attr_name: getattr(self, attr_name)
|
|
143
|
+
for attr_name in attributes_for_adapter_factory
|
|
144
|
+
}
|
|
145
|
+
self_kwargs_for_adapter_factory.update(override_adapter_factory_kwargs)
|
|
146
|
+
return self.adapter_factory(**self_kwargs_for_adapter_factory)
|
|
147
|
+
|
|
132
148
|
|
|
133
149
|
class SessionPool:
|
|
134
150
|
"""
|
|
@@ -185,6 +201,40 @@ class SessionPool:
|
|
|
185
201
|
self._idle_sessions.clear()
|
|
186
202
|
|
|
187
203
|
|
|
204
|
+
class _ConfigDirectAccessMixin(abc.ABC):
|
|
205
|
+
@property
|
|
206
|
+
@abc.abstractmethod
|
|
207
|
+
def config(self) -> HttpConfig: ...
|
|
208
|
+
|
|
209
|
+
@config.setter
|
|
210
|
+
@abc.abstractmethod
|
|
211
|
+
def config(self, value) -> HttpConfig: ...
|
|
212
|
+
|
|
213
|
+
@property
|
|
214
|
+
def use_pooling(self) -> bool:
|
|
215
|
+
return self.config.use_pooling
|
|
216
|
+
|
|
217
|
+
@use_pooling.setter
|
|
218
|
+
def use_pooling(self, value: bool) -> None:
|
|
219
|
+
self.config = self.config.copy_with(use_pooling=value)
|
|
220
|
+
|
|
221
|
+
@property
|
|
222
|
+
def adapter_factory(self) -> Callable[..., HTTPAdapter]:
|
|
223
|
+
return self.config.adapter_factory
|
|
224
|
+
|
|
225
|
+
@adapter_factory.setter
|
|
226
|
+
def adapter_factory(self, value: Callable[..., HTTPAdapter]) -> None:
|
|
227
|
+
self.config = self.config.copy_with(adapter_factory=value)
|
|
228
|
+
|
|
229
|
+
@property
|
|
230
|
+
def max_retries(self) -> Retry | int:
|
|
231
|
+
return self.config.max_retries
|
|
232
|
+
|
|
233
|
+
@max_retries.setter
|
|
234
|
+
def max_retries(self, value: Retry | int) -> None:
|
|
235
|
+
self.config = self.config.copy_with(max_retries=value)
|
|
236
|
+
|
|
237
|
+
|
|
188
238
|
class _RequestVerbsUsingSessionMixin(abc.ABC):
|
|
189
239
|
"""
|
|
190
240
|
Mixin that provides HTTP methods (get, post, put, etc.) mirroring requests.Session, maintaining their default argument behavior (e.g., HEAD uses allow_redirects=False).
|
|
@@ -295,7 +345,7 @@ class _RequestVerbsUsingSessionMixin(abc.ABC):
|
|
|
295
345
|
return session.delete(url, headers=headers, timeout=timeout, **kwargs)
|
|
296
346
|
|
|
297
347
|
|
|
298
|
-
class SessionManager(_RequestVerbsUsingSessionMixin):
|
|
348
|
+
class SessionManager(_RequestVerbsUsingSessionMixin, _ConfigDirectAccessMixin):
|
|
299
349
|
"""
|
|
300
350
|
Central HTTP session manager that handles all external requests from the Snowflake driver.
|
|
301
351
|
|
|
@@ -362,22 +412,6 @@ class SessionManager(_RequestVerbsUsingSessionMixin):
|
|
|
362
412
|
self._cfg.proxy_password,
|
|
363
413
|
)
|
|
364
414
|
|
|
365
|
-
@property
|
|
366
|
-
def use_pooling(self) -> bool:
|
|
367
|
-
return self._cfg.use_pooling
|
|
368
|
-
|
|
369
|
-
@use_pooling.setter
|
|
370
|
-
def use_pooling(self, value: bool) -> None:
|
|
371
|
-
self._cfg = self._cfg.copy_with(use_pooling=value)
|
|
372
|
-
|
|
373
|
-
@property
|
|
374
|
-
def adapter_factory(self) -> Callable[..., HTTPAdapter]:
|
|
375
|
-
return self._cfg.adapter_factory
|
|
376
|
-
|
|
377
|
-
@adapter_factory.setter
|
|
378
|
-
def adapter_factory(self, value: Callable[..., HTTPAdapter]) -> None:
|
|
379
|
-
self._cfg = self._cfg.copy_with(adapter_factory=value)
|
|
380
|
-
|
|
381
415
|
@property
|
|
382
416
|
def sessions_map(self) -> dict[str, SessionPool]:
|
|
383
417
|
return self._sessions_map
|
|
@@ -403,9 +437,7 @@ class SessionManager(_RequestVerbsUsingSessionMixin):
|
|
|
403
437
|
def _mount_adapters(self, session: requests.Session) -> None:
|
|
404
438
|
try:
|
|
405
439
|
# Its important that each separate session manager creates its own adapters - because they are storing internally PoolManagers - which shouldn't be reused if not in scope of the same adapter.
|
|
406
|
-
adapter = self._cfg.
|
|
407
|
-
max_retries=self._cfg.max_retries or REQUESTS_RETRY
|
|
408
|
-
)
|
|
440
|
+
adapter = self._cfg.get_adapter()
|
|
409
441
|
if adapter is not None:
|
|
410
442
|
session.mount("http://", adapter)
|
|
411
443
|
session.mount("https://", adapter)
|
|
@@ -473,27 +505,18 @@ class SessionManager(_RequestVerbsUsingSessionMixin):
|
|
|
473
505
|
|
|
474
506
|
def clone(
|
|
475
507
|
self,
|
|
476
|
-
|
|
477
|
-
use_pooling: bool | None = None,
|
|
478
|
-
adapter_factory: AdapterFactory | None = None,
|
|
508
|
+
**http_config_overrides,
|
|
479
509
|
) -> SessionManager:
|
|
480
510
|
"""Return a new *stateless* SessionManager sharing this instance’s config.
|
|
481
511
|
|
|
482
|
-
"Shallow"
|
|
512
|
+
"Shallow clone" - the configuration object (HttpConfig) is reused as-is,
|
|
483
513
|
while *stateful* aspects such as the per-host SessionPool mapping are
|
|
484
514
|
reset, so the two managers do not share live `requests.Session`
|
|
485
515
|
objects.
|
|
486
|
-
Optional *use_pooling* / *adapter_factory* overrides create a modified
|
|
487
|
-
copy of the
|
|
516
|
+
Optional kwargs (e.g. *use_pooling* / *adapter_factory* / max_retries etc.) - overrides to create a modified
|
|
517
|
+
copy of the HttpConfig before instantiation.
|
|
488
518
|
"""
|
|
489
|
-
|
|
490
|
-
overrides: dict[str, Any] = {}
|
|
491
|
-
if use_pooling is not None:
|
|
492
|
-
overrides["use_pooling"] = use_pooling
|
|
493
|
-
if adapter_factory is not None:
|
|
494
|
-
overrides["adapter_factory"] = adapter_factory
|
|
495
|
-
|
|
496
|
-
return SessionManager.from_config(self._cfg, **overrides)
|
|
519
|
+
return SessionManager.from_config(self._cfg, **http_config_overrides)
|
|
497
520
|
|
|
498
521
|
def __getstate__(self):
|
|
499
522
|
state = self.__dict__.copy()
|
|
@@ -303,7 +303,9 @@ def create_attestation(
|
|
|
303
303
|
"""
|
|
304
304
|
entra_resource = entra_resource or DEFAULT_ENTRA_SNOWFLAKE_RESOURCE
|
|
305
305
|
session_manager = (
|
|
306
|
-
session_manager.clone()
|
|
306
|
+
session_manager.clone()
|
|
307
|
+
if session_manager
|
|
308
|
+
else SessionManager(use_pooling=True, max_retries=0)
|
|
307
309
|
)
|
|
308
310
|
|
|
309
311
|
if provider == AttestationProvider.AWS:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.17.
|
|
3
|
+
Version: 3.17.3
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -66,7 +66,7 @@ Requires-Dist: pendulum!=2.1.1; extra == "development"
|
|
|
66
66
|
Requires-Dist: pexpect; extra == "development"
|
|
67
67
|
Requires-Dist: pytest<7.5.0; extra == "development"
|
|
68
68
|
Requires-Dist: pytest-cov; extra == "development"
|
|
69
|
-
Requires-Dist: pytest-rerunfailures; extra == "development"
|
|
69
|
+
Requires-Dist: pytest-rerunfailures<16.0; extra == "development"
|
|
70
70
|
Requires-Dist: pytest-timeout; extra == "development"
|
|
71
71
|
Requires-Dist: pytest-xdist; extra == "development"
|
|
72
72
|
Requires-Dist: pytzdata; extra == "development"
|
|
@@ -86,6 +86,16 @@ https://docs.snowflake.com/
|
|
|
86
86
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
87
87
|
|
|
88
88
|
# Release Notes
|
|
89
|
+
- v3.17.3(September 02,2025)
|
|
90
|
+
- Enhanced configuration file permission warning messages.
|
|
91
|
+
- Improved warning messages for readable permission issues to include clear instructions on how to skip warnings using the `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` environment variable.
|
|
92
|
+
- Fixed the bug with staging pandas dataframes on AWS - the regional endpoint is used when required
|
|
93
|
+
- This addresses the issue with `create_dataframe` call on Snowpark
|
|
94
|
+
|
|
95
|
+
- v3.17.2(August 23,2025)
|
|
96
|
+
- Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
|
|
97
|
+
- Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
|
|
98
|
+
|
|
89
99
|
- v3.17.1(August 17,2025)
|
|
90
100
|
- Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
|
|
91
101
|
- Namespace `snowlake` reverted back to non-module.
|
|
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
|