snowflake-connector-python 4.7.5__tar.gz → 4.8.1__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-4.7.5 → snowflake_connector_python-4.8.1}/CONTRIBUTING.md +2 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/DESCRIPTION.md +18 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/PKG-INFO +23 -8
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/README.md +3 -3
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/setup.cfg +4 -5
- snowflake_connector_python-4.8.1/src/snowflake/connector/_ocsp_mode.py +68 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/README.md +1 -1
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_azure_storage_client.py +4 -19
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_connection.py +2 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_pandas_tools.py +17 -19
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_result_batch.py +11 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_session_manager.py +2 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_storage_client.py +1 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_webbrowser.py +35 -34
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/webbrowser.py +141 -71
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/workload_identity.py +3 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/azure_storage_client.py +17 -19
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/connection.py +116 -23
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/constants.py +68 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/file_transfer_agent.py +1 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/file_util.py +29 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/network.py +4 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/pandas_tools.py +57 -29
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/result_batch.py +33 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/ssl_wrap_socket.py +87 -1
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/storage_client.py +5 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/__init__.py +4 -4
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/_collections.py +4 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/_version.py +2 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/connection.py +150 -45
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/connectionpool.py +29 -9
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +61 -21
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +5 -7
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/http2/connection.py +3 -2
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/poolmanager.py +28 -4
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/response.py +42 -9
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/request.py +40 -4
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/retry.py +13 -1
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +12 -8
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/url.py +158 -50
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/wif_util.py +180 -36
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake_connector_python.egg-info/PKG-INFO +23 -8
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake_connector_python.egg-info/SOURCES.txt +1 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake_connector_python.egg-info/requires.txt +3 -3
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/LICENSE.txt +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/MANIFEST.in +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/NOTICE +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/SECURITY.md +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/pyproject.toml +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/setup.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/_connection_identifier_shape.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/_host_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/_utils.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_cursor.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_description.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_network.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_result_set.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_telemetry.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_time_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/_wif_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_auth.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_default.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_okta.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_pat.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/_oauth_base.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/oauth_code.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/crl.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/crl_cache.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/cursor.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/interval_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/minicore/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/os_details.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/platform_detection.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/session_manager.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/token_cache.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/packages.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-4.7.5 → snowflake_connector_python-4.8.1}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -30,8 +30,8 @@ dependencies installed with `snowflake-connector-python` installed as an editabl
|
|
|
30
30
|
Setting up a development environment is super easy with this [one simple tox command](https://tox.wiki/en/legacy/example/devenv.html).
|
|
31
31
|
|
|
32
32
|
```shell
|
|
33
|
-
tox --devenv
|
|
34
|
-
.
|
|
33
|
+
tox --devenv venv311 -e py311
|
|
34
|
+
. venv311/bin/activate
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
Note: we suggest using the lowest supported Python version for development.
|
|
@@ -7,6 +7,23 @@ 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
|
+
- v4.8.1(Oct 26,2026)
|
|
11
|
+
- Fixed `write_pandas` identifier quoting. Parquet field paths are quoted, Iceberg option values are escaped string literals, and `quote_identifiers=False` accepts only valid unquoted identifiers.
|
|
12
|
+
- Dropped support for Python 3.10. The minimum supported version is now Python 3.11.
|
|
13
|
+
- Bumped vendored `urllib3` to `2.8.0`. This includes the upstream fix for importing the connector on Python built against OpenSSL 4, where `ssl.PROTOCOL_TLSv1` no longer exists (SNOW-4232077).
|
|
14
|
+
- Fixed large result set batch chunk download logging every transient retry at ERROR level with a traceback. Intermediate retries now log at WARNING; only the final failure after all retries are exhausted logs at ERROR with a traceback. These retry and failure logs now also include the S3 request IDs (`x-amz-request-id` / `x-amz-id-2`) when present, to aid troubleshooting and correlation with AWS-side records (SNOW-4218352).
|
|
15
|
+
- Fixed a spurious `RequestsDependencyWarning` emitted at import time by the vendored `requests` when a newer `chardet` (7.x) or `charset_normalizer` is installed. `check_compatibility()` still requires `chardet >= 3.0.2` and `charset_normalizer >= 2.0.0`, but no longer rejects newer majors (SNOW-3559506).
|
|
16
|
+
- Raised the minimum certifi requirement to 2026.10.18
|
|
17
|
+
- Raised filelock upper bound dependency to allow installation of filelock 4.X.
|
|
18
|
+
|
|
19
|
+
- v4.8.0(Sep 30,2026)
|
|
20
|
+
- Fixed external-browser (SSO) authentication to validate the `Origin` header on the local callback server, rejecting tokens delivered from unexpected origins. A trailing slash in the origin (e.g. `https://account.snowflakecomputing.com/`) is now accepted on par with the bare origin, matching JDBC and other driver behaviour. Preconnect probe connections (empty recv) no longer count against the retry budget and no longer abort the login flow.
|
|
21
|
+
- Added the `SNOWFLAKE_TLS_CIPHERS` environment variable to restrict which TLS ciphers the connector offers. It takes a colon-separated list; names beginning with `TLS_` are applied as TLS 1.3 cipher suites and the remainder as the cipher list for TLS 1.2 and below, so a single variable covers both. Leaving it unset keeps OpenSSL's defaults unchanged, and an unrecognized cipher name is rejected rather than silently ignored. The restriction covers Snowflake API traffic, cloud-storage (stage) transfers, OCSP/CRL fetches and IdP requests. Requests issued by the AWS and Azure SDKs, and asynchronous connections, are not covered — for TLS 1.3 suites specifically they cannot be, because the Python standard library exposes no API for restricting them.
|
|
22
|
+
- Raised the minimum `pyOpenSSL` requirement to 25.3.0, the first version providing `set_tls13_ciphersuites`. This does not narrow the set of installable versions in practice: earlier releases cap `cryptography` below 46 and so were already uninstallable alongside the connector's own `cryptography>=46.0.5` requirement.
|
|
23
|
+
- Added the `workload_identity_host` connection option that overrides the STS host used by AWS Workload Identity Federation, for endpoints the driver cannot derive from the region (such as an interface VPC endpoint). The default STS host is now resolved via botocore so partitions that do not use `amazonaws.com` (ISO, European Sovereign Cloud, ...) get the correct hostname. A privately routed host cannot be reached by Snowflake on the default GetCallerIdentity path, so a VPC or PrivateLink STS endpoint also requires `workload_identity_aws_use_outbound_token=True` (SNOW-4017192).
|
|
24
|
+
- Fixed MD5 computation for Azure clouds (SNOW-4168830).
|
|
25
|
+
- OCSP certificate revocation checks are now off unless you opt in. Set `ocsp_fail_open=True` or `ocsp_fail_open=False` to enable OCSP. The stored default is `None` (unset); only an explicit `True`/`False` opts in, so forwarding `DEFAULT_CONFIGURATION` as kwargs does not turn OCSP on. `disable_ocsp_checks=True` (or `insecure_mode=True`) always turns OCSP off, including when `ocsp_fail_open` is also set. `disable_ocsp_checks=False` and `insecure_mode=False` are the stored defaults and are not an opt-in. Connection attribute `ocsp_fail_open` is no longer a report of whether OCSP *is* fail-open; it is the stored preference (`None` = unset, `True` = fail-open, `False` = fail-closed). Use `_ocsp_mode()` / `disable_ocsp_checks` to see whether checks are actually on. `ocsp_response_cache_filename` and `ocsp_root_certs_dict_lock_timeout` do not turn OCSP on; if they are set without an OCSP mode parameter they are ignored and a warning is logged. The `SF_OCSP_FAIL_OPEN` environment variable still only switches fail-open vs fail-closed after OCSP is already on. Login `OCSP_MODE` telemetry now reports `DISABLE_OCSP_CHECKS` by default. The process-global `FEATURE_OCSP_MODE` is updated by each constructed REST client, except that a later default (OCSP off) client does not overwrite a non-default already stored on the process, and a later `FAIL_OPEN` client does not overwrite `FAIL_CLOSED`.
|
|
26
|
+
|
|
10
27
|
- v4.7.5(Sep 18,2026)
|
|
11
28
|
- Follow-up to the v4.7.4 incomplete-result fix (SNOW-4109042): when a successful query-request has an incomplete inline first chunk, the connector re-fetches the finished query once via `GET /queries/{qid}/result` before building the result set. JSON treats empty or shorter-than-declared inline rowsets as incomplete; Arrow only treats a missing/empty `rowsetBase64` as incomplete so the execute hot path does not decode IPC. If the result GET fails (transport error or `success: false`), the original payload is kept; if the GET succeeds but is still incomplete, that response is used. In either incomplete case the existing rowcount/total checks still raise `OperationalError` errno `252013` when the result is drained (no silent EOF). On the sync path, a remote result chunk whose body holds fewer rows than its declared `rowCount` is re-downloaded once before that check raises, so a truncated-but-valid chunk download can recover without silent data loss. Asynchronous (`snowflake.connector.aio`) remote-chunk re-download is unchanged.
|
|
12
29
|
|
|
@@ -14,8 +31,6 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
14
31
|
- Fixed missing retries on transient HTTP failures when fetching an OAuth access token from the IdP token endpoint (`OAUTH_CLIENT_CREDENTIALS` and `OAUTH_AUTHORIZATION_CODE`). Token requests now retry transport errors, HTTP 408/429, and 5xx responses (SNOW-3984430, #3003).
|
|
15
32
|
- Fixed a bug where a TLS handshake terminated by the peer (`SSLError` containing `SysCallError(-1, 'Unexpected EOF')`) was classified as non-retryable and surfaced as an `OperationalError`, unlike `ECONNRESET`. Such handshake `Unexpected EOF` errors are now retried, on both the sync and async request paths (SNOW-4058589).
|
|
16
33
|
- Fixed `fetchone()`, `fetchmany()`, `fetchall()` and cursor iteration silently returning an incomplete result set. A downloaded result chunk holding fewer rows than the back-end reported just ended the iteration, which the fetch methods report as a normal end of results, so callers received fewer rows than the query produced with no exception raised. Such a chunk now raises an `OperationalError` (errno `252013`). Errors raised while iterating a result set are no longer reported as end-of-results either: `_fetchone()` caught every `TypeError` and returned `None`, so a failure anywhere in the download/parse chain was indistinguishable from an exhausted result set. Both the sync and async paths are fixed (SNOW-4109042).
|
|
17
|
-
- Added the `SNOWFLAKE_MIN_TLS_VERSION` environment variable (`1.2`, `1.3`, `TLSv1.2` or `TLSv1.3`, defaulting to TLS 1.2) to raise the minimum TLS version on every outbound connection a synchronous connector makes: the Snowflake API, stage transfers, OCSP/CRL fetches, platform detection, IdP requests, AWS SDK requests (workload identity STS calls and the platform-detection identity probe) and Azure AD token requests made by `azure-identity`. An unrecognized value is rejected at connect time. The variable name and accepted values match the Go and JDBC drivers. Asynchronous (`snowflake.connector.aio`) connections are not yet covered.
|
|
18
|
-
- Fixed a TLS handshake failure that cannot succeed on a retry — a minimum-version mismatch, an untrusted certificate, a hostname mismatch — being reported by `connect()` as a generic `250001: Could not connect to Snowflake backend after N attempt(s)` alongside a firewall-troubleshooting hint. The network layer already identified and named such failures, but the authentication layer retried them until the login timeout expired and then replaced the diagnosis. They now surface as `NonRetryableTlsError` (a subclass of `OperationalError` keeping the same errno, so existing handlers are unaffected) naming the underlying cause, and are no longer retried. Transient handshake faults (`ECONNRESET`, unexpected EOF) remain retryable.
|
|
19
34
|
|
|
20
35
|
- v4.7.3(Sep 3,2026)
|
|
21
36
|
- Added experimental Python 3.14t (free-threaded CPython) wheel support. **Experimental — not intended for production use.**
|
|
@@ -33,6 +48,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
33
48
|
- Improved the robustness and correctness of OCSP revocation checking (SNOW-3675581).
|
|
34
49
|
- When `SF_OCSP_RESPONSE_CACHE_SERVER_URL` is set, the connector uses it as the OCSP cache server, including on PrivateLink hosts.
|
|
35
50
|
- A PrivateLink OCSP cache URL is derived only for hosts that consist of hostname characters, include a `.privatelink.` label, and end at `snowflakecomputing.com`, `.cn`, or `.mil`. Other hosts use the public default cache URL; set `SF_OCSP_RESPONSE_CACHE_SERVER_URL` to use a different cache server.
|
|
51
|
+
- Please review [Snowflake documentation](https://docs.snowflake.com/en/release-notes/clients-drivers/python-connector-2026#version-473-sep-3-2026) for possible implications to your workflow
|
|
36
52
|
- Extended log secret masking coverage (SNOW-3675583). The connection-token pattern accepts `:` and `%` in the token value. Added patterns for OAuth access and refresh tokens in serialized JSON, for one-time passcodes, and for OAuth client identifiers and secrets. The passcode pattern accepts quoted values. The password pattern requires at least six characters in the value, so ordinary prose following the word "password" is not redacted.
|
|
37
53
|
- Request headers are copied before mutation on the async path, and masking is applied to the `Authorization` header in error logs (SNOW-3675593).
|
|
38
54
|
- Applied secret masking to the `snowflake.connector` loggers by default, independent of how application logging is configured. The same filter also covers the third-party loggers the connector uses (`botocore`, `boto3`, `aiohttp`, `aiobotocore`, `aioboto3`, vendored `urllib3`). Set `SNOWFLAKE_DISABLE_LOG_SECRET_MASKING=true` to opt out; it is honored at emit time, including after import (SNOW-3675583).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.8.1
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -22,7 +22,6 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
22
22
|
Classifier: Operating System :: OS Independent
|
|
23
23
|
Classifier: Programming Language :: Python :: 3
|
|
24
24
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.11
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.12
|
|
28
27
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -35,22 +34,22 @@ Classifier: Topic :: Software Development
|
|
|
35
34
|
Classifier: Topic :: Software Development :: Libraries
|
|
36
35
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
37
36
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
38
|
-
Requires-Python: >=3.
|
|
37
|
+
Requires-Python: >=3.11
|
|
39
38
|
Description-Content-Type: text/markdown
|
|
40
39
|
License-File: LICENSE.txt
|
|
41
40
|
License-File: NOTICE
|
|
42
41
|
Requires-Dist: asn1crypto<2.0.0,>0.24.0
|
|
43
42
|
Requires-Dist: cryptography>=46.0.5
|
|
44
|
-
Requires-Dist: pyOpenSSL>=
|
|
43
|
+
Requires-Dist: pyOpenSSL>=25.3.0
|
|
45
44
|
Requires-Dist: pyjwt<3.0.0,>=2.10.1
|
|
46
45
|
Requires-Dist: pytz
|
|
47
46
|
Requires-Dist: requests<3.0.0,>=2.32.4
|
|
48
47
|
Requires-Dist: packaging
|
|
49
48
|
Requires-Dist: charset_normalizer<4,>=2
|
|
50
49
|
Requires-Dist: idna<4,>=3.7
|
|
51
|
-
Requires-Dist: certifi>=
|
|
50
|
+
Requires-Dist: certifi>=2026.10.18
|
|
52
51
|
Requires-Dist: typing_extensions<5,>=4.3
|
|
53
|
-
Requires-Dist: filelock<
|
|
52
|
+
Requires-Dist: filelock<5,>=3.12
|
|
54
53
|
Requires-Dist: sortedcontainers>=2.4.0
|
|
55
54
|
Requires-Dist: platformdirs<5.0.0,>=2.6.0
|
|
56
55
|
Requires-Dist: tomlkit
|
|
@@ -97,6 +96,23 @@ https://docs.snowflake.com/
|
|
|
97
96
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
98
97
|
|
|
99
98
|
# Release Notes
|
|
99
|
+
- v4.8.1(Oct 26,2026)
|
|
100
|
+
- Fixed `write_pandas` identifier quoting. Parquet field paths are quoted, Iceberg option values are escaped string literals, and `quote_identifiers=False` accepts only valid unquoted identifiers.
|
|
101
|
+
- Dropped support for Python 3.10. The minimum supported version is now Python 3.11.
|
|
102
|
+
- Bumped vendored `urllib3` to `2.8.0`. This includes the upstream fix for importing the connector on Python built against OpenSSL 4, where `ssl.PROTOCOL_TLSv1` no longer exists (SNOW-4232077).
|
|
103
|
+
- Fixed large result set batch chunk download logging every transient retry at ERROR level with a traceback. Intermediate retries now log at WARNING; only the final failure after all retries are exhausted logs at ERROR with a traceback. These retry and failure logs now also include the S3 request IDs (`x-amz-request-id` / `x-amz-id-2`) when present, to aid troubleshooting and correlation with AWS-side records (SNOW-4218352).
|
|
104
|
+
- Fixed a spurious `RequestsDependencyWarning` emitted at import time by the vendored `requests` when a newer `chardet` (7.x) or `charset_normalizer` is installed. `check_compatibility()` still requires `chardet >= 3.0.2` and `charset_normalizer >= 2.0.0`, but no longer rejects newer majors (SNOW-3559506).
|
|
105
|
+
- Raised the minimum certifi requirement to 2026.10.18
|
|
106
|
+
- Raised filelock upper bound dependency to allow installation of filelock 4.X.
|
|
107
|
+
|
|
108
|
+
- v4.8.0(Sep 30,2026)
|
|
109
|
+
- Fixed external-browser (SSO) authentication to validate the `Origin` header on the local callback server, rejecting tokens delivered from unexpected origins. A trailing slash in the origin (e.g. `https://account.snowflakecomputing.com/`) is now accepted on par with the bare origin, matching JDBC and other driver behaviour. Preconnect probe connections (empty recv) no longer count against the retry budget and no longer abort the login flow.
|
|
110
|
+
- Added the `SNOWFLAKE_TLS_CIPHERS` environment variable to restrict which TLS ciphers the connector offers. It takes a colon-separated list; names beginning with `TLS_` are applied as TLS 1.3 cipher suites and the remainder as the cipher list for TLS 1.2 and below, so a single variable covers both. Leaving it unset keeps OpenSSL's defaults unchanged, and an unrecognized cipher name is rejected rather than silently ignored. The restriction covers Snowflake API traffic, cloud-storage (stage) transfers, OCSP/CRL fetches and IdP requests. Requests issued by the AWS and Azure SDKs, and asynchronous connections, are not covered — for TLS 1.3 suites specifically they cannot be, because the Python standard library exposes no API for restricting them.
|
|
111
|
+
- Raised the minimum `pyOpenSSL` requirement to 25.3.0, the first version providing `set_tls13_ciphersuites`. This does not narrow the set of installable versions in practice: earlier releases cap `cryptography` below 46 and so were already uninstallable alongside the connector's own `cryptography>=46.0.5` requirement.
|
|
112
|
+
- Added the `workload_identity_host` connection option that overrides the STS host used by AWS Workload Identity Federation, for endpoints the driver cannot derive from the region (such as an interface VPC endpoint). The default STS host is now resolved via botocore so partitions that do not use `amazonaws.com` (ISO, European Sovereign Cloud, ...) get the correct hostname. A privately routed host cannot be reached by Snowflake on the default GetCallerIdentity path, so a VPC or PrivateLink STS endpoint also requires `workload_identity_aws_use_outbound_token=True` (SNOW-4017192).
|
|
113
|
+
- Fixed MD5 computation for Azure clouds (SNOW-4168830).
|
|
114
|
+
- OCSP certificate revocation checks are now off unless you opt in. Set `ocsp_fail_open=True` or `ocsp_fail_open=False` to enable OCSP. The stored default is `None` (unset); only an explicit `True`/`False` opts in, so forwarding `DEFAULT_CONFIGURATION` as kwargs does not turn OCSP on. `disable_ocsp_checks=True` (or `insecure_mode=True`) always turns OCSP off, including when `ocsp_fail_open` is also set. `disable_ocsp_checks=False` and `insecure_mode=False` are the stored defaults and are not an opt-in. Connection attribute `ocsp_fail_open` is no longer a report of whether OCSP *is* fail-open; it is the stored preference (`None` = unset, `True` = fail-open, `False` = fail-closed). Use `_ocsp_mode()` / `disable_ocsp_checks` to see whether checks are actually on. `ocsp_response_cache_filename` and `ocsp_root_certs_dict_lock_timeout` do not turn OCSP on; if they are set without an OCSP mode parameter they are ignored and a warning is logged. The `SF_OCSP_FAIL_OPEN` environment variable still only switches fail-open vs fail-closed after OCSP is already on. Login `OCSP_MODE` telemetry now reports `DISABLE_OCSP_CHECKS` by default. The process-global `FEATURE_OCSP_MODE` is updated by each constructed REST client, except that a later default (OCSP off) client does not overwrite a non-default already stored on the process, and a later `FAIL_OPEN` client does not overwrite `FAIL_CLOSED`.
|
|
115
|
+
|
|
100
116
|
- v4.7.5(Sep 18,2026)
|
|
101
117
|
- Follow-up to the v4.7.4 incomplete-result fix (SNOW-4109042): when a successful query-request has an incomplete inline first chunk, the connector re-fetches the finished query once via `GET /queries/{qid}/result` before building the result set. JSON treats empty or shorter-than-declared inline rowsets as incomplete; Arrow only treats a missing/empty `rowsetBase64` as incomplete so the execute hot path does not decode IPC. If the result GET fails (transport error or `success: false`), the original payload is kept; if the GET succeeds but is still incomplete, that response is used. In either incomplete case the existing rowcount/total checks still raise `OperationalError` errno `252013` when the result is drained (no silent EOF). On the sync path, a remote result chunk whose body holds fewer rows than its declared `rowCount` is re-downloaded once before that check raises, so a truncated-but-valid chunk download can recover without silent data loss. Asynchronous (`snowflake.connector.aio`) remote-chunk re-download is unchanged.
|
|
102
118
|
|
|
@@ -104,8 +120,6 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
104
120
|
- Fixed missing retries on transient HTTP failures when fetching an OAuth access token from the IdP token endpoint (`OAUTH_CLIENT_CREDENTIALS` and `OAUTH_AUTHORIZATION_CODE`). Token requests now retry transport errors, HTTP 408/429, and 5xx responses (SNOW-3984430, #3003).
|
|
105
121
|
- Fixed a bug where a TLS handshake terminated by the peer (`SSLError` containing `SysCallError(-1, 'Unexpected EOF')`) was classified as non-retryable and surfaced as an `OperationalError`, unlike `ECONNRESET`. Such handshake `Unexpected EOF` errors are now retried, on both the sync and async request paths (SNOW-4058589).
|
|
106
122
|
- Fixed `fetchone()`, `fetchmany()`, `fetchall()` and cursor iteration silently returning an incomplete result set. A downloaded result chunk holding fewer rows than the back-end reported just ended the iteration, which the fetch methods report as a normal end of results, so callers received fewer rows than the query produced with no exception raised. Such a chunk now raises an `OperationalError` (errno `252013`). Errors raised while iterating a result set are no longer reported as end-of-results either: `_fetchone()` caught every `TypeError` and returned `None`, so a failure anywhere in the download/parse chain was indistinguishable from an exhausted result set. Both the sync and async paths are fixed (SNOW-4109042).
|
|
107
|
-
- Added the `SNOWFLAKE_MIN_TLS_VERSION` environment variable (`1.2`, `1.3`, `TLSv1.2` or `TLSv1.3`, defaulting to TLS 1.2) to raise the minimum TLS version on every outbound connection a synchronous connector makes: the Snowflake API, stage transfers, OCSP/CRL fetches, platform detection, IdP requests, AWS SDK requests (workload identity STS calls and the platform-detection identity probe) and Azure AD token requests made by `azure-identity`. An unrecognized value is rejected at connect time. The variable name and accepted values match the Go and JDBC drivers. Asynchronous (`snowflake.connector.aio`) connections are not yet covered.
|
|
108
|
-
- Fixed a TLS handshake failure that cannot succeed on a retry — a minimum-version mismatch, an untrusted certificate, a hostname mismatch — being reported by `connect()` as a generic `250001: Could not connect to Snowflake backend after N attempt(s)` alongside a firewall-troubleshooting hint. The network layer already identified and named such failures, but the authentication layer retried them until the login timeout expired and then replaced the diagnosis. They now surface as `NonRetryableTlsError` (a subclass of `OperationalError` keeping the same errno, so existing handlers are unaffected) naming the underlying cause, and are no longer retried. Transient handshake faults (`ECONNRESET`, unexpected EOF) remain retryable.
|
|
109
123
|
|
|
110
124
|
- v4.7.3(Sep 3,2026)
|
|
111
125
|
- Added experimental Python 3.14t (free-threaded CPython) wheel support. **Experimental — not intended for production use.**
|
|
@@ -123,6 +137,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
123
137
|
- Improved the robustness and correctness of OCSP revocation checking (SNOW-3675581).
|
|
124
138
|
- When `SF_OCSP_RESPONSE_CACHE_SERVER_URL` is set, the connector uses it as the OCSP cache server, including on PrivateLink hosts.
|
|
125
139
|
- A PrivateLink OCSP cache URL is derived only for hosts that consist of hostname characters, include a `.privatelink.` label, and end at `snowflakecomputing.com`, `.cn`, or `.mil`. Other hosts use the public default cache URL; set `SF_OCSP_RESPONSE_CACHE_SERVER_URL` to use a different cache server.
|
|
140
|
+
- Please review [Snowflake documentation](https://docs.snowflake.com/en/release-notes/clients-drivers/python-connector-2026#version-473-sep-3-2026) for possible implications to your workflow
|
|
126
141
|
- Extended log secret masking coverage (SNOW-3675583). The connection-token pattern accepts `:` and `%` in the token value. Added patterns for OAuth access and refresh tokens in serialized JSON, for one-time passcodes, and for OAuth client identifiers and secrets. The passcode pattern accepts quoted values. The password pattern requires at least six characters in the value, so ordinary prose following the word "password" is not redacted.
|
|
127
142
|
- Request headers are copied before mutation on the async path, and masking is applied to the `Authorization` header in error logs (SNOW-3675593).
|
|
128
143
|
- Applied secret masking to the `snowflake.connector` loggers by default, independent of how application logging is configured. The same filter also covers the third-party loggers the connector uses (`botocore`, `boto3`, `aiohttp`, `aiobotocore`, `aioboto3`, vendored `urllib3`). Set `SNOWFLAKE_DISABLE_LOG_SECRET_MASKING=true` to opt out; it is honored at emit time, including after import (SNOW-3675583).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Snowflake Connector for Python
|
|
2
2
|
|
|
3
3
|
> [!IMPORTANT]
|
|
4
|
-
>
|
|
4
|
+
> Version 5.0.0 of the Snowflake Connector for Python has been released. Development has moved to [snowflakedb/drivers](https://github.com/snowflakedb/drivers). See the [documentation](https://docs.snowflake.com/en/developer-guide/universal-core/universal-core) for more information.
|
|
5
5
|
|
|
6
6
|
This package includes the Snowflake Connector for Python, which conforms to the [Python DB API 2.0](https://www.python.org/dev/peps/pep-0249/) specification.
|
|
7
7
|
|
|
@@ -12,7 +12,7 @@ using the Snowflake JDBC or ODBC drivers.
|
|
|
12
12
|
|
|
13
13
|
The connector has **no** dependencies on JDBC or ODBC.
|
|
14
14
|
It can be installed using ``pip`` on Linux, Mac OSX, and Windows platforms
|
|
15
|
-
where Python 3.
|
|
15
|
+
where Python 3.11.0 (or higher) is installed.
|
|
16
16
|
|
|
17
17
|
Snowflake Documentation is available at:
|
|
18
18
|
https://docs.snowflake.com/
|
|
@@ -39,7 +39,7 @@ Find the `snowflake_connector_python*.whl` package in the `./dist` directory.
|
|
|
39
39
|
### In Docker
|
|
40
40
|
Or use our Dockerized build script `ci/build_docker.sh` and find the built wheel files in `dist/repaired_wheels`.
|
|
41
41
|
|
|
42
|
-
Note: `ci/build_docker.sh` can be used to compile only certain versions, like this: `ci/build_docker.sh "3.
|
|
42
|
+
Note: `ci/build_docker.sh` can be used to compile only certain versions, like this: `ci/build_docker.sh "3.11 3.12"`
|
|
43
43
|
|
|
44
44
|
## Code hygiene and other utilities
|
|
45
45
|
These tools are integrated into `tox` to allow us to easily set them up universally on any computer.
|
|
@@ -20,7 +20,6 @@ classifiers =
|
|
|
20
20
|
Operating System :: OS Independent
|
|
21
21
|
Programming Language :: Python :: 3
|
|
22
22
|
Programming Language :: Python :: 3 :: Only
|
|
23
|
-
Programming Language :: Python :: 3.10
|
|
24
23
|
Programming Language :: Python :: 3.11
|
|
25
24
|
Programming Language :: Python :: 3.12
|
|
26
25
|
Programming Language :: Python :: 3.13
|
|
@@ -41,21 +40,21 @@ project_urls =
|
|
|
41
40
|
Changelog=https://github.com/snowflakedb/snowflake-connector-python/blob/main/DESCRIPTION.md
|
|
42
41
|
|
|
43
42
|
[options]
|
|
44
|
-
python_requires = >=3.
|
|
43
|
+
python_requires = >=3.11
|
|
45
44
|
packages = find_namespace:
|
|
46
45
|
install_requires =
|
|
47
46
|
asn1crypto>0.24.0,<2.0.0
|
|
48
47
|
cryptography>=46.0.5
|
|
49
|
-
pyOpenSSL>=
|
|
48
|
+
pyOpenSSL>=25.3.0
|
|
50
49
|
pyjwt>=2.10.1,<3.0.0
|
|
51
50
|
pytz
|
|
52
51
|
requests>=2.32.4,<3.0.0
|
|
53
52
|
packaging
|
|
54
53
|
charset_normalizer>=2,<4
|
|
55
54
|
idna>=3.7,<4
|
|
56
|
-
certifi>=
|
|
55
|
+
certifi>=2026.10.18
|
|
57
56
|
typing_extensions>=4.3,<5
|
|
58
|
-
filelock>=3.5
|
|
57
|
+
filelock>=3.12,<5
|
|
59
58
|
sortedcontainers>=2.4.0
|
|
60
59
|
platformdirs>=2.6.0,<5.0.0
|
|
61
60
|
tomlkit
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
from typing import Any, Collection
|
|
5
|
+
|
|
6
|
+
from .constants import OCSPMode
|
|
7
|
+
|
|
8
|
+
# ocsp_fail_open True/False opts into OCSP. None is the stored default and
|
|
9
|
+
# is not an opt-in. disable_ocsp_checks / insecure_mode only turn OCSP off
|
|
10
|
+
# when True; their stored False default is not an opt-in. Cache/timeout
|
|
11
|
+
# knobs never enable OCSP.
|
|
12
|
+
OCSP_MODE_PARAMS = frozenset({"disable_ocsp_checks", "ocsp_fail_open", "insecure_mode"})
|
|
13
|
+
OCSP_SUPPORT_PARAMS = frozenset(
|
|
14
|
+
{"ocsp_response_cache_filename", "ocsp_root_certs_dict_lock_timeout"}
|
|
15
|
+
)
|
|
16
|
+
OCSP_EXPLICIT_PARAMS = OCSP_MODE_PARAMS | OCSP_SUPPORT_PARAMS
|
|
17
|
+
|
|
18
|
+
IGNORED_OCSP_SUPPORT_PARAMS_WARNING = (
|
|
19
|
+
"OCSP is disabled unless you opt in. The following OCSP setting(s) will be "
|
|
20
|
+
"ignored because none of ocsp_fail_open, disable_ocsp_checks, or "
|
|
21
|
+
"insecure_mode was set: {params}. Set ocsp_fail_open=True or "
|
|
22
|
+
"ocsp_fail_open=False to enable OCSP."
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def snapshot_ocsp_explicit_params(params: Mapping[str, Any]) -> frozenset[str]:
|
|
27
|
+
return frozenset(name for name in OCSP_EXPLICIT_PARAMS if name in params)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def resolve_ocsp_mode(
|
|
31
|
+
*,
|
|
32
|
+
explicit: Collection[str],
|
|
33
|
+
disable_ocsp_checks: bool,
|
|
34
|
+
ocsp_fail_open: bool | None,
|
|
35
|
+
insecure_mode: bool | None = None,
|
|
36
|
+
) -> OCSPMode:
|
|
37
|
+
"""Resolve OCSP mode from explicit user/toml presence plus stored values.
|
|
38
|
+
|
|
39
|
+
``ocsp_fail_open`` is the only opt-in: True = fail-open, False =
|
|
40
|
+
fail-closed. None is the stored default and does not enable OCSP, even
|
|
41
|
+
when the key is present (a caller forwarding DEFAULT_CONFIGURATION).
|
|
42
|
+
|
|
43
|
+
Connection-property disable (``disable_ocsp_checks=True`` or
|
|
44
|
+
``insecure_mode=True``) always turns OCSP off, including when
|
|
45
|
+
``ocsp_fail_open`` is True/False. Presence of
|
|
46
|
+
``disable_ocsp_checks=False`` or ``insecure_mode=False`` is not an
|
|
47
|
+
opt-in; those are the stored defaults.
|
|
48
|
+
"""
|
|
49
|
+
if "disable_ocsp_checks" in explicit:
|
|
50
|
+
disable_value = disable_ocsp_checks
|
|
51
|
+
elif "insecure_mode" in explicit:
|
|
52
|
+
disable_value = (
|
|
53
|
+
insecure_mode if insecure_mode is not None else disable_ocsp_checks
|
|
54
|
+
)
|
|
55
|
+
else:
|
|
56
|
+
disable_value = False
|
|
57
|
+
|
|
58
|
+
if disable_value:
|
|
59
|
+
return OCSPMode.DISABLE_OCSP_CHECKS
|
|
60
|
+
if ocsp_fail_open is not None:
|
|
61
|
+
return OCSPMode.FAIL_OPEN if ocsp_fail_open else OCSPMode.FAIL_CLOSED
|
|
62
|
+
return OCSPMode.DISABLE_OCSP_CHECKS
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def ignored_ocsp_support_params(explicit: Collection[str]) -> tuple[str, ...]:
|
|
66
|
+
if any(name in explicit for name in OCSP_MODE_PARAMS):
|
|
67
|
+
return ()
|
|
68
|
+
return tuple(sorted(name for name in OCSP_SUPPORT_PARAMS if name in explicit))
|
|
@@ -14,7 +14,7 @@ is not intended for production environments.**
|
|
|
14
14
|
- ❌ `mfa_callback` / `password_callback` - not supported
|
|
15
15
|
- ❌ `_probe_connection=True` - no connection diagnostic
|
|
16
16
|
- ❌ Raw binary response handling - not supported
|
|
17
|
-
- ❌ CRL (Certificate Revocation List) - not supported (only OCSP is supported)
|
|
17
|
+
- ❌ CRL (Certificate Revocation List) - not supported (only OCSP is supported). OCSP is off by default; set `ocsp_fail_open=True`/`False` to enable it.
|
|
18
18
|
|
|
19
19
|
## Installation & Import
|
|
20
20
|
|
|
@@ -17,7 +17,6 @@ from ..azure_storage_client import (
|
|
|
17
17
|
from ..compat import quote
|
|
18
18
|
from ..constants import FileHeader, ResultStatus
|
|
19
19
|
from ..encryption_util import EncryptionMetadata
|
|
20
|
-
from ..util_text import get_md5_for_integrity
|
|
21
20
|
from ._storage_client import SnowflakeStorageClient as SnowflakeStorageClientAsync
|
|
22
21
|
|
|
23
22
|
if TYPE_CHECKING: # pragma: no cover
|
|
@@ -173,26 +172,12 @@ class SnowflakeAzureRestClient(
|
|
|
173
172
|
part = ET.Element("Latest")
|
|
174
173
|
part.text = block_id
|
|
175
174
|
root.append(part)
|
|
176
|
-
# SNOW-1778088: We need to
|
|
177
|
-
new_stream = not bool(self.meta.src_stream or self.meta.intermediate_stream)
|
|
178
|
-
fd = (
|
|
179
|
-
self.meta.src_stream
|
|
180
|
-
or self.meta.intermediate_stream
|
|
181
|
-
or open(self.meta.real_src_file_name, "rb")
|
|
182
|
-
)
|
|
183
|
-
try:
|
|
184
|
-
if not new_stream:
|
|
185
|
-
# Reset position in file
|
|
186
|
-
fd.seek(0)
|
|
187
|
-
file_content = fd.read()
|
|
188
|
-
finally:
|
|
189
|
-
if new_stream:
|
|
190
|
-
fd.close()
|
|
175
|
+
# SNOW-1778088: We need to provide the MD5 sum of this file for Azure Blob storage.
|
|
191
176
|
headers = {
|
|
192
177
|
"x-ms-blob-content-encoding": "utf-8",
|
|
193
|
-
"x-ms-blob-content-md5": base64.b64encode(
|
|
194
|
-
|
|
195
|
-
)
|
|
178
|
+
"x-ms-blob-content-md5": base64.b64encode(self.meta.md5_digest).decode(
|
|
179
|
+
"utf-8"
|
|
180
|
+
),
|
|
196
181
|
}
|
|
197
182
|
azure_metadata = self._prepare_file_metadata()
|
|
198
183
|
headers.update(azure_metadata)
|
|
@@ -659,6 +659,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
659
659
|
self._rest = None
|
|
660
660
|
for name, (value, _) in DEFAULT_CONFIGURATION.items():
|
|
661
661
|
setattr(self, f"_{name}", value)
|
|
662
|
+
self._ocsp_explicit: frozenset[str] = frozenset()
|
|
662
663
|
|
|
663
664
|
self._heartbeat_task = None
|
|
664
665
|
is_kwargs_empty = not connection_init_kwargs
|
|
@@ -675,6 +676,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
675
676
|
DeprecationWarning,
|
|
676
677
|
stacklevel=2,
|
|
677
678
|
)
|
|
679
|
+
self._insecure_mode = connection_init_kwargs["insecure_mode"]
|
|
678
680
|
|
|
679
681
|
if (
|
|
680
682
|
"disable_ocsp_checks" in connection_init_kwargs
|
|
@@ -12,6 +12,8 @@ from snowflake.connector.options import pandas
|
|
|
12
12
|
# Import utilities from sync version
|
|
13
13
|
from snowflake.connector.pandas_tools import (
|
|
14
14
|
_iceberg_config_statement_helper,
|
|
15
|
+
_quote_sql_identifier,
|
|
16
|
+
_sql_column_identifier,
|
|
15
17
|
build_location_helper,
|
|
16
18
|
chunk_helper,
|
|
17
19
|
)
|
|
@@ -240,7 +242,8 @@ async def write_pandas(
|
|
|
240
242
|
https://docs.snowflake.com/en/sql-reference/sql/put.html#optional-parameters (Default value = 4).
|
|
241
243
|
quote_identifiers: By default, identifiers, specifically database, schema, table and column names
|
|
242
244
|
(from df.columns) will be quoted. If set to False, identifiers are passed on to Snowflake without quoting.
|
|
243
|
-
I.e. identifiers will be coerced to uppercase by Snowflake.
|
|
245
|
+
I.e. identifiers will be coerced to uppercase by Snowflake. Column names in this mode must be valid
|
|
246
|
+
Snowflake unquoted identifiers. (Default value = True)
|
|
244
247
|
infer_schema: Perform explicit schema inference on the data in the DataFrame and use the inferred data types
|
|
245
248
|
when selecting columns from the DataFrame. (Default value = False)
|
|
246
249
|
auto_create_table: When true, will automatically create a table with corresponding columns for each column in
|
|
@@ -335,6 +338,15 @@ async def write_pandas(
|
|
|
335
338
|
else:
|
|
336
339
|
sql_use_logical_type = " USE_LOGICAL_TYPE = FALSE"
|
|
337
340
|
|
|
341
|
+
# Validate/quote column names before creating temp objects or uploading.
|
|
342
|
+
# `$1:"field"` path syntax does not support IDENTIFIER(?) or ? bindings; always quote it.
|
|
343
|
+
# quote_identifiers only controls CREATE/COPY column lists (case-folding), not the parquet path.
|
|
344
|
+
snowflake_column_names = [
|
|
345
|
+
_sql_column_identifier(c, quote_identifiers) for c in df.columns
|
|
346
|
+
]
|
|
347
|
+
parquet_field_names = [_quote_sql_identifier(c) for c in df.columns]
|
|
348
|
+
columns = ",".join(snowflake_column_names)
|
|
349
|
+
|
|
338
350
|
cursor = conn.cursor()
|
|
339
351
|
stage_location = await _create_temp_stage(
|
|
340
352
|
cursor,
|
|
@@ -373,18 +385,6 @@ async def write_pandas(
|
|
|
373
385
|
options={"parallel": parallel, "source_compression": "auto_detect"},
|
|
374
386
|
)
|
|
375
387
|
|
|
376
|
-
# in Snowflake, all parquet data is stored in a single column, $1, so we must select columns explicitly
|
|
377
|
-
# see (https://docs.snowflake.com/en/user-guide/script-data-load-transform-parquet.html)
|
|
378
|
-
if quote_identifiers:
|
|
379
|
-
quote = '"'
|
|
380
|
-
# if the column name contains a double quote, we need to escape it by replacing with two double quotes
|
|
381
|
-
# https://docs.snowflake.com/en/sql-reference/identifiers-syntax#double-quoted-identifiers
|
|
382
|
-
snowflake_column_names = [str(c).replace('"', '""') for c in df.columns]
|
|
383
|
-
else:
|
|
384
|
-
quote = ""
|
|
385
|
-
snowflake_column_names = list(df.columns)
|
|
386
|
-
columns = quote + f"{quote},{quote}".join(snowflake_column_names) + quote
|
|
387
|
-
|
|
388
388
|
async def drop_object(name: str, object_type: str) -> None:
|
|
389
389
|
drop_sql = f"DROP {object_type.upper()} IF EXISTS identifier(?) /* Python:snowflake.connector.aio._pandas_tools.write_pandas() */"
|
|
390
390
|
params = (name,)
|
|
@@ -427,7 +427,7 @@ async def write_pandas(
|
|
|
427
427
|
# columns in order
|
|
428
428
|
create_table_columns = ", ".join(
|
|
429
429
|
[
|
|
430
|
-
f"{
|
|
430
|
+
f"{snowflake_col} {column_type_mapping[col]}"
|
|
431
431
|
for snowflake_col, col in zip(snowflake_column_names, df.columns)
|
|
432
432
|
]
|
|
433
433
|
)
|
|
@@ -468,8 +468,8 @@ async def write_pandas(
|
|
|
468
468
|
|
|
469
469
|
# need explicit casting when the underlying table schema is inferred
|
|
470
470
|
parquet_columns = "$1:" + ",$1:".join(
|
|
471
|
-
f"{
|
|
472
|
-
for
|
|
471
|
+
f"{parquet_field}::{column_type_mapping[col]}"
|
|
472
|
+
for parquet_field, col in zip(parquet_field_names, df.columns)
|
|
473
473
|
)
|
|
474
474
|
else:
|
|
475
475
|
target_table_location = build_location_helper(
|
|
@@ -478,9 +478,7 @@ async def write_pandas(
|
|
|
478
478
|
name=table_name,
|
|
479
479
|
quote_identifiers=quote_identifiers,
|
|
480
480
|
)
|
|
481
|
-
parquet_columns = "$1:" + ",$1:".join(
|
|
482
|
-
f"{quote}{snowflake_col}{quote}" for snowflake_col in snowflake_column_names
|
|
483
|
-
)
|
|
481
|
+
parquet_columns = "$1:" + ",$1:".join(parquet_field_names)
|
|
484
482
|
|
|
485
483
|
try:
|
|
486
484
|
if overwrite and (not auto_create_table):
|
|
@@ -34,6 +34,7 @@ from snowflake.connector.result_batch import RemoteChunkInfo
|
|
|
34
34
|
from snowflake.connector.result_batch import ResultBatch as ResultBatchSync
|
|
35
35
|
from snowflake.connector.result_batch import (
|
|
36
36
|
_create_nanoarrow_iterator,
|
|
37
|
+
_s3_request_id_log_suffix,
|
|
37
38
|
inline_first_chunk_rowcount,
|
|
38
39
|
)
|
|
39
40
|
from snowflake.connector.secret_detector import SecretDetector
|
|
@@ -232,6 +233,7 @@ class ResultBatch(ResultBatchSync):
|
|
|
232
233
|
|
|
233
234
|
content, encoding = None, None
|
|
234
235
|
for retry in range(max(MAX_DOWNLOAD_RETRY, 1)):
|
|
236
|
+
amz_request_id_suffix = ""
|
|
235
237
|
try:
|
|
236
238
|
|
|
237
239
|
async with TimerContextManager() as download_metric:
|
|
@@ -284,6 +286,7 @@ class ResultBatch(ResultBatchSync):
|
|
|
284
286
|
) as session:
|
|
285
287
|
response, content, encoding = await download_chunk(session)
|
|
286
288
|
|
|
289
|
+
amz_request_id_suffix = _s3_request_id_log_suffix(response)
|
|
287
290
|
if response.status == OK:
|
|
288
291
|
break
|
|
289
292
|
# Raise error here to correctly go in to exception clause
|
|
@@ -301,12 +304,18 @@ class ResultBatch(ResultBatchSync):
|
|
|
301
304
|
if retry == MAX_DOWNLOAD_RETRY - 1:
|
|
302
305
|
# Re-throw if we failed on the last retry
|
|
303
306
|
e = e.args[0] if isinstance(e, RetryRequest) else e
|
|
307
|
+
logger.error(
|
|
308
|
+
f"Failed to fetch the large result set batch "
|
|
309
|
+
f"{self.id} after {MAX_DOWNLOAD_RETRY} attempts, "
|
|
310
|
+
f"giving up for the reason: '{e}'{amz_request_id_suffix}",
|
|
311
|
+
exc_info=True,
|
|
312
|
+
)
|
|
304
313
|
raise e
|
|
305
314
|
sleep_timer = next(backoff)
|
|
306
|
-
logger.
|
|
315
|
+
logger.warning(
|
|
307
316
|
f"Failed to fetch the large result set batch "
|
|
308
317
|
f"{self.id} for the {retry + 1} th time, "
|
|
309
|
-
f"backing off for {sleep_timer}s for the reason: '{e}'"
|
|
318
|
+
f"backing off for {sleep_timer}s for the reason: '{e}'{amz_request_id_suffix}"
|
|
310
319
|
)
|
|
311
320
|
await asyncio.sleep(sleep_timer)
|
|
312
321
|
|
|
@@ -44,7 +44,7 @@ class SnowflakeSSLConnector(aiohttp.TCPConnector):
|
|
|
44
44
|
def __init__(
|
|
45
45
|
self,
|
|
46
46
|
*args,
|
|
47
|
-
snowflake_ocsp_mode: OCSPMode = OCSPMode.
|
|
47
|
+
snowflake_ocsp_mode: OCSPMode = OCSPMode.DISABLE_OCSP_CHECKS,
|
|
48
48
|
session_manager: SessionManager | None = None,
|
|
49
49
|
**kwargs,
|
|
50
50
|
):
|
|
@@ -139,7 +139,7 @@ class AioHttpConfig(BaseHttpConfig):
|
|
|
139
139
|
"""Trust environment variables for proxy configuration (HTTP_PROXY, HTTPS_PROXY, NO_PROXY).
|
|
140
140
|
Required for proxy support set by proxy.set_proxies() in connection initialization."""
|
|
141
141
|
|
|
142
|
-
snowflake_ocsp_mode: OCSPMode = OCSPMode.
|
|
142
|
+
snowflake_ocsp_mode: OCSPMode = OCSPMode.DISABLE_OCSP_CHECKS
|
|
143
143
|
"""OCSP validation mode obtained from connection._ocsp_mode()."""
|
|
144
144
|
|
|
145
145
|
def get_connector(
|
|
@@ -104,6 +104,7 @@ class SnowflakeStorageClient(SnowflakeStorageClientSync):
|
|
|
104
104
|
else:
|
|
105
105
|
self.data_file = meta.real_src_file_name
|
|
106
106
|
logger.debug("finished preprocessing")
|
|
107
|
+
self._compute_content_md5()
|
|
107
108
|
if meta.upload_size < meta.multipart_threshold or not self.chunked_transfer:
|
|
108
109
|
self.num_of_chunks = 1
|
|
109
110
|
else:
|