snowflake-connector-python 4.7.4__tar.gz → 4.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/DESCRIPTION.md +11 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/PKG-INFO +13 -2
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/setup.cfg +1 -1
- snowflake_connector_python-4.8.0/src/snowflake/connector/_ocsp_mode.py +68 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/README.md +1 -1
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_azure_storage_client.py +4 -19
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_connection.py +23 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_network.py +2 -1
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_result_batch.py +5 -5
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_session_manager.py +2 -2
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_storage_client.py +1 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_webbrowser.py +35 -34
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/webbrowser.py +141 -71
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/workload_identity.py +3 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/azure_storage_client.py +17 -19
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/connection.py +169 -22
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/connection_diagnostic.py +5 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/constants.py +123 -2
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/cursor.py +87 -1
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/errors.py +19 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_transfer_agent.py +1 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_util.py +29 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/network.py +10 -3
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/result_batch.py +138 -13
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/session_manager.py +61 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ssl_wrap_socket.py +201 -3
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/storage_client.py +27 -1
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/wif_util.py +197 -39
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/PKG-INFO +13 -2
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +1 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/LICENSE.txt +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/MANIFEST.in +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/NOTICE +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/README.md +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/SECURITY.md +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/pyproject.toml +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/setup.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_connection_identifier_shape.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_host_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/_utils.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_cursor.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_description.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_result_set.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_time_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/_wif_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_auth.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/oauth_code.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/crl.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/crl_cache.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/interval_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/minicore/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/os_details.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/platform_detection.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/token_cache.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-4.7.4 → snowflake_connector_python-4.8.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -7,6 +7,17 @@ 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.0(Sep 30,2026)
|
|
11
|
+
- 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.
|
|
12
|
+
- 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.
|
|
13
|
+
- 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.
|
|
14
|
+
- 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).
|
|
15
|
+
- Fixed MD5 computation for Azure clouds (SNOW-4168830).
|
|
16
|
+
- 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`.
|
|
17
|
+
|
|
18
|
+
- v4.7.5(Sep 18,2026)
|
|
19
|
+
- 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.
|
|
20
|
+
|
|
10
21
|
- v4.7.4(Sep 16,2026)
|
|
11
22
|
- 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).
|
|
12
23
|
- 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).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.8.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -41,7 +41,7 @@ License-File: LICENSE.txt
|
|
|
41
41
|
License-File: NOTICE
|
|
42
42
|
Requires-Dist: asn1crypto<2.0.0,>0.24.0
|
|
43
43
|
Requires-Dist: cryptography>=46.0.5
|
|
44
|
-
Requires-Dist: pyOpenSSL>=
|
|
44
|
+
Requires-Dist: pyOpenSSL>=25.3.0
|
|
45
45
|
Requires-Dist: pyjwt<3.0.0,>=2.10.1
|
|
46
46
|
Requires-Dist: pytz
|
|
47
47
|
Requires-Dist: requests<3.0.0,>=2.32.4
|
|
@@ -97,6 +97,17 @@ https://docs.snowflake.com/
|
|
|
97
97
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
98
98
|
|
|
99
99
|
# Release Notes
|
|
100
|
+
- v4.8.0(Sep 30,2026)
|
|
101
|
+
- 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.
|
|
102
|
+
- 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.
|
|
103
|
+
- 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.
|
|
104
|
+
- 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).
|
|
105
|
+
- Fixed MD5 computation for Azure clouds (SNOW-4168830).
|
|
106
|
+
- 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`.
|
|
107
|
+
|
|
108
|
+
- v4.7.5(Sep 18,2026)
|
|
109
|
+
- 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.
|
|
110
|
+
|
|
100
111
|
- v4.7.4(Sep 16,2026)
|
|
101
112
|
- 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).
|
|
102
113
|
- 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).
|
|
@@ -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)
|
|
@@ -23,6 +23,7 @@ from snowflake.connector import (
|
|
|
23
23
|
OperationalError,
|
|
24
24
|
ProgrammingError,
|
|
25
25
|
)
|
|
26
|
+
from snowflake.connector.errors import NonRetryableTlsError
|
|
26
27
|
|
|
27
28
|
from .._connection_identifier_shape import (
|
|
28
29
|
ConnectionIdentifierShape,
|
|
@@ -38,6 +39,7 @@ from ..connection import _get_private_bytes_from_file
|
|
|
38
39
|
from ..constants import (
|
|
39
40
|
_CONNECTIVITY_ERR_MSG,
|
|
40
41
|
_OAUTH_DEFAULT_SCOPE,
|
|
42
|
+
ENV_VAR_MIN_TLS_VERSION,
|
|
41
43
|
PARAMETER_AUTOCOMMIT,
|
|
42
44
|
PARAMETER_CLIENT_PREFETCH_THREADS,
|
|
43
45
|
PARAMETER_CLIENT_REQUEST_MFA_TOKEN,
|
|
@@ -570,6 +572,11 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
570
572
|
password_callback=self._password_callback,
|
|
571
573
|
session_parameters=self._session_parameters,
|
|
572
574
|
)
|
|
575
|
+
except NonRetryableTlsError:
|
|
576
|
+
# See the sync counterpart: a TLS failure that a retry cannot fix must
|
|
577
|
+
# surface with its diagnosis rather than be replaced by the generic
|
|
578
|
+
# "could not connect" message the retry loop below ends with.
|
|
579
|
+
raise
|
|
573
580
|
except OperationalError as e:
|
|
574
581
|
logger.debug(
|
|
575
582
|
"Operational Error raised at authentication"
|
|
@@ -652,6 +659,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
652
659
|
self._rest = None
|
|
653
660
|
for name, (value, _) in DEFAULT_CONFIGURATION.items():
|
|
654
661
|
setattr(self, f"_{name}", value)
|
|
662
|
+
self._ocsp_explicit: frozenset[str] = frozenset()
|
|
655
663
|
|
|
656
664
|
self._heartbeat_task = None
|
|
657
665
|
is_kwargs_empty = not connection_init_kwargs
|
|
@@ -668,6 +676,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
668
676
|
DeprecationWarning,
|
|
669
677
|
stacklevel=2,
|
|
670
678
|
)
|
|
679
|
+
self._insecure_mode = connection_init_kwargs["insecure_mode"]
|
|
671
680
|
|
|
672
681
|
if (
|
|
673
682
|
"disable_ocsp_checks" in connection_init_kwargs
|
|
@@ -1110,6 +1119,20 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
1110
1119
|
async def connect(self, **kwargs) -> None:
|
|
1111
1120
|
"""Establishes connection to Snowflake."""
|
|
1112
1121
|
logger.debug("connect")
|
|
1122
|
+
self._validate_min_tls_version()
|
|
1123
|
+
# Validating the value here must not be read as enforcing it: the async
|
|
1124
|
+
# stack builds its TLS contexts through aiohttp, which the connector's
|
|
1125
|
+
# urllib3 interception never sees, so the floor is not applied to async
|
|
1126
|
+
# handshakes. Say so rather than let a successful connect imply otherwise.
|
|
1127
|
+
# Not raised, because the variable is process-wide -- failing here would
|
|
1128
|
+
# break async connections in any process that set it for the sync path.
|
|
1129
|
+
if os.environ.get(ENV_VAR_MIN_TLS_VERSION, "").strip():
|
|
1130
|
+
logger.warning(
|
|
1131
|
+
"%s is set but is not enforced on asynchronous connections; their "
|
|
1132
|
+
"TLS handshakes may negotiate a lower version. Use a synchronous "
|
|
1133
|
+
"connection where the minimum must be guaranteed.",
|
|
1134
|
+
ENV_VAR_MIN_TLS_VERSION,
|
|
1135
|
+
)
|
|
1113
1136
|
if len(kwargs) > 0:
|
|
1114
1137
|
self.__config(**kwargs)
|
|
1115
1138
|
else:
|
|
@@ -42,6 +42,7 @@ from ..errors import (
|
|
|
42
42
|
Error,
|
|
43
43
|
ForbiddenError,
|
|
44
44
|
HttpError,
|
|
45
|
+
NonRetryableTlsError,
|
|
45
46
|
OperationalError,
|
|
46
47
|
ProgrammingError,
|
|
47
48
|
RefreshTokenError,
|
|
@@ -826,7 +827,7 @@ class SnowflakeRestful(SnowflakeRestfulSync):
|
|
|
826
827
|
Error.errorhandler_wrapper(
|
|
827
828
|
self._connection,
|
|
828
829
|
None,
|
|
829
|
-
|
|
830
|
+
NonRetryableTlsError,
|
|
830
831
|
{
|
|
831
832
|
"msg": msg,
|
|
832
833
|
"errno": ER_FAILED_TO_REQUEST,
|
|
@@ -32,7 +32,10 @@ from snowflake.connector.result_batch import DownloadMetrics
|
|
|
32
32
|
from snowflake.connector.result_batch import JSONResultBatch as JSONResultBatchSync
|
|
33
33
|
from snowflake.connector.result_batch import RemoteChunkInfo
|
|
34
34
|
from snowflake.connector.result_batch import ResultBatch as ResultBatchSync
|
|
35
|
-
from snowflake.connector.result_batch import
|
|
35
|
+
from snowflake.connector.result_batch import (
|
|
36
|
+
_create_nanoarrow_iterator,
|
|
37
|
+
inline_first_chunk_rowcount,
|
|
38
|
+
)
|
|
36
39
|
from snowflake.connector.secret_detector import SecretDetector
|
|
37
40
|
|
|
38
41
|
if TYPE_CHECKING:
|
|
@@ -60,8 +63,7 @@ def create_batches_from_response(
|
|
|
60
63
|
column_converters: list[tuple[str, SnowflakeConverterType]] = []
|
|
61
64
|
arrow_context: ArrowConverterContext | None = None
|
|
62
65
|
rowtypes = data["rowtype"]
|
|
63
|
-
|
|
64
|
-
first_chunk_len = total_len
|
|
66
|
+
first_chunk_len = inline_first_chunk_rowcount(data)
|
|
65
67
|
rest_of_chunks: list[ResultBatch] = []
|
|
66
68
|
if _format == "json":
|
|
67
69
|
|
|
@@ -138,8 +140,6 @@ def create_batches_from_response(
|
|
|
138
140
|
)
|
|
139
141
|
for c in chunks
|
|
140
142
|
]
|
|
141
|
-
for c in rest_of_chunks:
|
|
142
|
-
first_chunk_len -= c.rowcount
|
|
143
143
|
if _format == "json":
|
|
144
144
|
first_chunk = JSONResultBatch.from_data(
|
|
145
145
|
data.get("rowset"),
|
|
@@ -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:
|
|
@@ -25,7 +25,6 @@ from ...constants import (
|
|
|
25
25
|
HTTP_HEADER_USER_AGENT,
|
|
26
26
|
)
|
|
27
27
|
from ...errorcode import (
|
|
28
|
-
ER_IDP_CONNECTION_ERROR,
|
|
29
28
|
ER_INVALID_VALUE,
|
|
30
29
|
ER_NO_HOSTNAME_FOUND,
|
|
31
30
|
ER_UNABLE_TO_OPEN_BROWSER,
|
|
@@ -111,7 +110,7 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
|
|
|
111
110
|
)
|
|
112
111
|
else:
|
|
113
112
|
raise ex
|
|
114
|
-
socket_connection.listen(
|
|
113
|
+
socket_connection.listen(5)
|
|
115
114
|
callback_port = socket_connection.getsockname()[1]
|
|
116
115
|
|
|
117
116
|
if conn._disable_console_login:
|
|
@@ -246,34 +245,45 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
|
|
|
246
245
|
else:
|
|
247
246
|
logger.debug("Exceeded retry count")
|
|
248
247
|
|
|
249
|
-
|
|
248
|
+
if not raw_data:
|
|
249
|
+
continue
|
|
250
250
|
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
data = raw_data.decode("utf-8").splitlines()
|
|
252
|
+
|
|
253
|
+
method = self._request_method(data)
|
|
254
|
+
if method == "OPTIONS":
|
|
255
|
+
await self._process_options(data, socket_client)
|
|
256
|
+
continue
|
|
257
|
+
if method not in {"GET", "POST"}:
|
|
258
|
+
continue
|
|
259
|
+
if not self._validate_callback_origin(data):
|
|
260
|
+
continue
|
|
261
|
+
if await self._process_receive_saml_token(conn, data, socket_client):
|
|
253
262
|
break
|
|
254
263
|
|
|
255
264
|
finally:
|
|
256
|
-
|
|
257
|
-
socket_client.close()
|
|
265
|
+
self._close_socket_client(socket_client)
|
|
258
266
|
|
|
259
267
|
async def _process_options(
|
|
260
268
|
self, data: list[str], socket_client: socket.socket
|
|
261
269
|
) -> bool:
|
|
262
270
|
"""Allows JS Ajax access to this endpoint."""
|
|
263
|
-
|
|
264
|
-
if line.startswith("OPTIONS "):
|
|
265
|
-
break
|
|
266
|
-
else:
|
|
271
|
+
if self._request_method(data) != "OPTIONS":
|
|
267
272
|
return False
|
|
268
273
|
|
|
269
274
|
self._get_user_agent(data)
|
|
270
275
|
requested_headers, requested_origin = self._check_post_requested(data)
|
|
271
|
-
if
|
|
272
|
-
return
|
|
276
|
+
if requested_origin is None:
|
|
277
|
+
return True
|
|
278
|
+
|
|
279
|
+
if requested_headers and any(
|
|
280
|
+
header.strip().lower() != "content-type"
|
|
281
|
+
for header in requested_headers.split(",")
|
|
282
|
+
):
|
|
283
|
+
return True
|
|
273
284
|
|
|
274
285
|
if not self._validate_origin(requested_origin):
|
|
275
|
-
|
|
276
|
-
return False
|
|
286
|
+
return True
|
|
277
287
|
|
|
278
288
|
self._origin = requested_origin
|
|
279
289
|
content = [
|
|
@@ -281,8 +291,8 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
|
|
|
281
291
|
"Date: {}".format(
|
|
282
292
|
time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime())
|
|
283
293
|
),
|
|
284
|
-
"Access-Control-Allow-Methods: POST
|
|
285
|
-
|
|
294
|
+
"Access-Control-Allow-Methods: POST",
|
|
295
|
+
"Access-Control-Allow-Headers: Content-Type",
|
|
286
296
|
"Access-Control-Max-Age: 86400",
|
|
287
297
|
f"Access-Control-Allow-Origin: {self._origin}",
|
|
288
298
|
"",
|
|
@@ -295,9 +305,9 @@ class AuthByWebBrowser(AuthByPluginAsync, AuthByWebBrowserSync):
|
|
|
295
305
|
|
|
296
306
|
async def _process_receive_saml_token(
|
|
297
307
|
self, conn: SnowflakeConnection, data: list[str], socket_client: socket.socket
|
|
298
|
-
) ->
|
|
308
|
+
) -> bool:
|
|
299
309
|
if not self._process_get(data) and not await self._process_post(conn, data):
|
|
300
|
-
return
|
|
310
|
+
return False
|
|
301
311
|
|
|
302
312
|
content = [
|
|
303
313
|
"HTTP/1.1 200 OK",
|
|
@@ -324,32 +334,23 @@ You can close this window now and go back where you started from.
|
|
|
324
334
|
await self._event_loop.sock_sendall(
|
|
325
335
|
socket_client, "\r\n".join(content).encode("utf-8")
|
|
326
336
|
)
|
|
337
|
+
return True
|
|
327
338
|
|
|
328
339
|
async def _process_post(self, conn: SnowflakeConnection, data: list[str]) -> bool:
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
break
|
|
332
|
-
else:
|
|
333
|
-
await self._handle_failure(
|
|
334
|
-
conn=conn,
|
|
335
|
-
ret={
|
|
336
|
-
"code": ER_IDP_CONNECTION_ERROR,
|
|
337
|
-
"message": "Invalid HTTP request from web browser. Idp "
|
|
338
|
-
"authentication could have failed.",
|
|
339
|
-
},
|
|
340
|
-
)
|
|
340
|
+
body = self._request_body(data)
|
|
341
|
+
if self._request_method(data) != "POST" or body is None:
|
|
341
342
|
return False
|
|
342
343
|
|
|
343
344
|
self._get_user_agent(data)
|
|
344
345
|
try:
|
|
345
346
|
# parse the response as JSON
|
|
346
|
-
payload = json.loads(
|
|
347
|
+
payload = json.loads(body)
|
|
347
348
|
self._token = payload.get("token")
|
|
348
349
|
self.consent_cache_id_token = payload.get("consent", True)
|
|
349
350
|
except Exception:
|
|
350
351
|
# key=value form.
|
|
351
|
-
self._token = parse_qs(
|
|
352
|
-
return
|
|
352
|
+
self._token = (parse_qs(body).get("token") or [None])[0]
|
|
353
|
+
return self._token is not None
|
|
353
354
|
|
|
354
355
|
async def _get_sso_url(
|
|
355
356
|
self,
|