snowflake-connector-python 3.17.0__tar.gz → 3.17.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/DESCRIPTION.md +8 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/PKG-INFO +9 -1
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/_auth.py +2 -2
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/okta.py +3 -1
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/webbrowser.py +8 -6
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/workload_identity.py +3 -1
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/pandas_tools.py +27 -22
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/platform_detection.py +31 -28
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/session_manager.py +59 -36
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/wif_util.py +3 -1
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake_connector_python.egg-info/PKG-INFO +9 -1
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/LICENSE.txt +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/MANIFEST.in +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/NOTICE +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/README.md +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/SECURITY.md +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/pyproject.toml +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/setup.cfg +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/setup.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/_utils.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/_oauth_base.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/oauth_code.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/connection.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/cursor.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/interval_util.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/network.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/token_cache.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake_connector_python.egg-info/requires.txt +0 -0
- {snowflake_connector_python-3.17.0 → snowflake_connector_python-3.17.2}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -7,6 +7,14 @@ 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.2(August 23,2025)
|
|
11
|
+
- Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
|
|
12
|
+
- Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
|
|
13
|
+
|
|
14
|
+
- v3.17.1(August 17,2025)
|
|
15
|
+
- Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
|
|
16
|
+
- Namespace `snowlake` reverted back to non-module.
|
|
17
|
+
|
|
10
18
|
- v3.17.0(August 16,2025)
|
|
11
19
|
- Added in-band HTTP exception telemetry.
|
|
12
20
|
- Added an `unsafe_skip_file_permissions_check` flag to skip file permission checks on the cache and configuration.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.17.
|
|
3
|
+
Version: 3.17.2
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -86,6 +86,14 @@ 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.2(August 23,2025)
|
|
90
|
+
- Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
|
|
91
|
+
- Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
|
|
92
|
+
|
|
93
|
+
- v3.17.1(August 17,2025)
|
|
94
|
+
- Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
|
|
95
|
+
- Namespace `snowlake` reverted back to non-module.
|
|
96
|
+
|
|
89
97
|
- v3.17.0(August 16,2025)
|
|
90
98
|
- Added in-band HTTP exception telemetry.
|
|
91
99
|
- Added an `unsafe_skip_file_permissions_check` flag to skip file permission checks on the cache and configuration.
|
|
@@ -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]:
|
|
@@ -254,6 +254,7 @@ def write_pandas(
|
|
|
254
254
|
on_error: str = "abort_statement",
|
|
255
255
|
parallel: int = 4,
|
|
256
256
|
quote_identifiers: bool = True,
|
|
257
|
+
infer_schema: bool = False,
|
|
257
258
|
auto_create_table: bool = False,
|
|
258
259
|
create_temp_table: bool = False,
|
|
259
260
|
overwrite: bool = False,
|
|
@@ -316,6 +317,8 @@ def write_pandas(
|
|
|
316
317
|
quote_identifiers: By default, identifiers, specifically database, schema, table and column names
|
|
317
318
|
(from df.columns) will be quoted. If set to False, identifiers are passed on to Snowflake without quoting.
|
|
318
319
|
I.e. identifiers will be coerced to uppercase by Snowflake. (Default value = True)
|
|
320
|
+
infer_schema: Perform explicit schema inference on the data in the DataFrame and use the inferred data types
|
|
321
|
+
when selecting columns from the DataFrame. (Default value = False)
|
|
319
322
|
auto_create_table: When true, will automatically create a table with corresponding columns for each column in
|
|
320
323
|
the passed in DataFrame. The table will not be created if it already exists
|
|
321
324
|
create_temp_table: (Deprecated) Will make the auto-created table as a temporary table
|
|
@@ -482,7 +485,7 @@ def write_pandas(
|
|
|
482
485
|
num_statements=1,
|
|
483
486
|
)
|
|
484
487
|
|
|
485
|
-
if auto_create_table or overwrite:
|
|
488
|
+
if auto_create_table or overwrite or infer_schema:
|
|
486
489
|
file_format_location = _create_temp_file_format(
|
|
487
490
|
cursor,
|
|
488
491
|
database,
|
|
@@ -525,27 +528,29 @@ def write_pandas(
|
|
|
525
528
|
quote_identifiers,
|
|
526
529
|
)
|
|
527
530
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
531
|
+
if auto_create_table or overwrite:
|
|
532
|
+
iceberg = "ICEBERG " if iceberg_config else ""
|
|
533
|
+
iceberg_config_statement = _iceberg_config_statement_helper(
|
|
534
|
+
iceberg_config or {}
|
|
535
|
+
)
|
|
536
|
+
|
|
537
|
+
create_table_sql = (
|
|
538
|
+
f"CREATE {table_type.upper()} {iceberg}TABLE IF NOT EXISTS identifier(?) "
|
|
539
|
+
f"({create_table_columns}) {iceberg_config_statement}"
|
|
540
|
+
f" /* Python:snowflake.connector.pandas_tools.write_pandas() */ "
|
|
541
|
+
)
|
|
542
|
+
params = (target_table_location,)
|
|
543
|
+
logger.debug(
|
|
544
|
+
f"auto creating table with '{create_table_sql}'. params: %s", params
|
|
545
|
+
)
|
|
546
|
+
cursor.execute(
|
|
547
|
+
create_table_sql,
|
|
548
|
+
_is_internal=True,
|
|
549
|
+
_force_qmark_paramstyle=True,
|
|
550
|
+
params=params,
|
|
551
|
+
num_statements=1,
|
|
552
|
+
)
|
|
532
553
|
|
|
533
|
-
create_table_sql = (
|
|
534
|
-
f"CREATE {table_type.upper()} {iceberg}TABLE IF NOT EXISTS identifier(?) "
|
|
535
|
-
f"({create_table_columns}) {iceberg_config_statement}"
|
|
536
|
-
f" /* Python:snowflake.connector.pandas_tools.write_pandas() */ "
|
|
537
|
-
)
|
|
538
|
-
params = (target_table_location,)
|
|
539
|
-
logger.debug(
|
|
540
|
-
f"auto creating table with '{create_table_sql}'. params: %s", params
|
|
541
|
-
)
|
|
542
|
-
cursor.execute(
|
|
543
|
-
create_table_sql,
|
|
544
|
-
_is_internal=True,
|
|
545
|
-
_force_qmark_paramstyle=True,
|
|
546
|
-
params=params,
|
|
547
|
-
num_statements=1,
|
|
548
|
-
)
|
|
549
554
|
# need explicit casting when the underlying table schema is inferred
|
|
550
555
|
parquet_columns = "$1:" + ",$1:".join(
|
|
551
556
|
f"{quote}{snowflake_col}{quote}::{column_type_mapping[col]}"
|
|
@@ -584,7 +589,7 @@ def write_pandas(
|
|
|
584
589
|
f"TYPE=PARQUET "
|
|
585
590
|
f"USE_VECTORIZED_SCANNER={use_vectorized_scanner} "
|
|
586
591
|
f"COMPRESSION={compression_map[compression]}"
|
|
587
|
-
f"{' BINARY_AS_TEXT=FALSE' if auto_create_table or overwrite else ''}"
|
|
592
|
+
f"{' BINARY_AS_TEXT=FALSE' if auto_create_table or overwrite or infer_schema else ''}"
|
|
588
593
|
f"{sql_use_logical_type}"
|
|
589
594
|
f") "
|
|
590
595
|
f"PURGE=TRUE ON_ERROR=?"
|
|
@@ -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.2
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -86,6 +86,14 @@ 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.2(August 23,2025)
|
|
90
|
+
- Fixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
|
|
91
|
+
- Added disabling endpoint-based platform detection by setting `platform_detection_timeout_seconds` to zero.
|
|
92
|
+
|
|
93
|
+
- v3.17.1(August 17,2025)
|
|
94
|
+
- Added `infer_schema` parameter to `write_pandas` to perform schema inference on the passed data.
|
|
95
|
+
- Namespace `snowlake` reverted back to non-module.
|
|
96
|
+
|
|
89
97
|
- v3.17.0(August 16,2025)
|
|
90
98
|
- Added in-band HTTP exception telemetry.
|
|
91
99
|
- Added an `unsafe_skip_file_permissions_check` flag to skip file permission checks on the cache and configuration.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|