snowflake-connector-python 4.6.0__tar.gz → 4.7.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.6.0 → snowflake_connector_python-4.7.1}/DESCRIPTION.md +15 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/PKG-INFO +22 -3
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/setup.cfg +6 -2
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_connection.py +7 -2
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_wif_util.py +106 -57
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_keypair.py +6 -2
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_oauth_code.py +9 -13
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_oauth_credentials.py +10 -13
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/_oauth_base.py +144 -67
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/oauth_code.py +15 -3
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/workload_identity.py +3 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/connection.py +14 -3
- snowflake_connector_python-4.7.1/src/snowflake/connector/log_configuration.py +98 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +36 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/options.py +21 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/s3_storage_client.py +83 -2
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/ssl_wrap_socket.py +124 -3
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/url_util.py +10 -14
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/wif_util.py +122 -62
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake_connector_python.egg-info/PKG-INFO +22 -3
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake_connector_python.egg-info/requires.txt +11 -2
- snowflake_connector_python-4.6.0/src/snowflake/connector/log_configuration.py +0 -62
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/LICENSE.txt +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/MANIFEST.in +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/NOTICE +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/README.md +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/SECURITY.md +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/pyproject.toml +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/setup.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/_connection_identifier_shape.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/_utils.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/README.md +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_cursor.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_description.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_network.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_result_batch.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_result_set.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_session_manager.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_telemetry.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/_time_util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_auth.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_default.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_okta.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_pat.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/crl.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/crl_cache.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/cursor.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/interval_util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/minicore/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/network.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/os_details.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/platform_detection.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/session_manager.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/token_cache.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/packages.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-4.6.0 → snowflake_connector_python-4.7.1}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -7,6 +7,21 @@ 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.7.1(Jul 15,2026)
|
|
11
|
+
- Added support for Python 3.14t (free-threaded).
|
|
12
|
+
- **Note:** Python 3.14t CI testing excludes `win_arm64` (no `cryptography` wheels available) and `mitmproxy` proxy tests on all platforms (transitive dependencies `aioquic`/`pylsqpack` lack free-threaded-compatible wheels).
|
|
13
|
+
- Improved verification of TLS connections (SNOW-3675579).
|
|
14
|
+
- Fixed `python-connector.log` not rotating on Windows, and every record being logged twice, when easy logging is enabled via `config.toml` (SNOW-3680325).
|
|
15
|
+
- **Note:** As part of this fix, easy logging no longer calls `logging.basicConfig()` and therefore no longer configures the root logger. `python-connector.log` now captures only the `snowflake.connector`, `botocore`, and `boto3`.
|
|
16
|
+
- Improved URL validation reliability by replacing the hand-rolled regex in `is_valid_url()` with `urllib.parse.urlparse` (SNOW-3392651).
|
|
17
|
+
- Fixed OAuth infinite loop when tokens expire by ensuring `reauthenticate()` calls `_request_tokens()` directly instead of looping through `prepare()`. Token cache is now read exactly once per connection, and `_store_tokens()` preserves macOS Keychain ACL by never calling `remove()`. The async OAuth `reauthenticate()` now runs the synchronous OAuth flow on a worker thread instead of blocking the event loop.
|
|
18
|
+
- Fixed OAuth scope handling for Snowflake custom OAuth: when refresh tokens are enabled, the connector no longer appends the OIDC `offline_access` scope for token endpoints on `*.snowflakecomputing.com` or `*.snowflakecomputing.cn`, which caused `invalid_scope` errors. Snowflake custom OAuth expects `refresh_token` in scope instead. External IdP behavior is unchanged.
|
|
19
|
+
- Fixed input validation for `scale` metadata in Arrow result set processing for `TIME`, `TIMESTAMP_NTZ`, `TIMESTAMP_LTZ`, and `TIMESTAMP_TZ` columns (SNOW-3388299).
|
|
20
|
+
- Fixed S3 storage client to correctly handle 307/308 (method-preserving) and 301/302 (GET/HEAD only) redirects by disabling automatic redirect following and re-signing each request with AWS SigV4 credentials for the redirect target. The region is updated from the `x-amz-bucket-region` response header on each redirect. Redirects are capped at 5 hops.
|
|
21
|
+
- Added native AKS (Azure Kubernetes Service) workload identity support. When running on AKS with workload identity configured, the connector automatically uses `WorkloadIdentityCredential` to authenticate via the injected service account credentials. OIDC backward compatibility is also supported.
|
|
22
|
+
- Added the `workload_identity_aws_use_outbound_token` connection option (default `false`) to opt into AWS WIF JWT attestation via STS `GetWebIdentityToken` instead of the default SigV4 `GetCallerIdentity` method.
|
|
23
|
+
- Fixed a bug where a fully-qualified DDL statement (e.g. `CREATE VIEW db.schema.obj`) on a session with no current schema would populate the connector's cached `_schema`/`_database` from the referenced object's namespace. This made `get_current_schema()` diverge from the server's `CURRENT_SCHEMA()` and mis-qualified Snowpark temp objects (SNOW-3665226).
|
|
24
|
+
|
|
10
25
|
- v4.6.0(May 28,2026)
|
|
11
26
|
- Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
|
|
12
27
|
- Fixed sdist to only install the minicore binary matching the current platform (SNOW-3526469). Previous 4.x releases copied every platform's minicore `.so`/`.dylib`/`.dll` into the install prefix, breaking downstream packagers (e.g. Homebrew) whose audits reject foreign-arch binaries.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.7.1
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -58,10 +58,13 @@ Requires-Dist: botocore>=1.24
|
|
|
58
58
|
Provides-Extra: boto
|
|
59
59
|
Requires-Dist: boto3>=1.24; extra == "boto"
|
|
60
60
|
Requires-Dist: botocore>=1.24; extra == "boto"
|
|
61
|
+
Provides-Extra: azure
|
|
62
|
+
Requires-Dist: azure-identity>=1.16; extra == "azure"
|
|
61
63
|
Provides-Extra: development
|
|
62
64
|
Requires-Dist: Cython; extra == "development"
|
|
65
|
+
Requires-Dist: azure-identity>=1.16; extra == "development"
|
|
63
66
|
Requires-Dist: coverage; extra == "development"
|
|
64
|
-
Requires-Dist: mitmproxy>=12.0.0; python_version >= "3.12" and extra == "development"
|
|
67
|
+
Requires-Dist: mitmproxy>=12.0.0; (python_version >= "3.12" and python_version < "3.14") and extra == "development"
|
|
65
68
|
Requires-Dist: more-itertools; extra == "development"
|
|
66
69
|
Requires-Dist: numpy<=2.4.3; extra == "development"
|
|
67
70
|
Requires-Dist: pendulum!=2.1.1; extra == "development"
|
|
@@ -77,7 +80,8 @@ Requires-Dist: responses; extra == "development"
|
|
|
77
80
|
Provides-Extra: pandas
|
|
78
81
|
Requires-Dist: pandas<3.0.0,>=1.0.0; python_version < "3.13" and extra == "pandas"
|
|
79
82
|
Requires-Dist: pandas<3.0.0,>=2.1.2; python_version >= "3.13" and extra == "pandas"
|
|
80
|
-
Requires-Dist: pyarrow
|
|
83
|
+
Requires-Dist: pyarrow<24,>=14.0.1; python_version >= "3.14" and extra == "pandas"
|
|
84
|
+
Requires-Dist: pyarrow>=14.0.1; python_version < "3.14" and extra == "pandas"
|
|
81
85
|
Provides-Extra: secure-local-storage
|
|
82
86
|
Requires-Dist: keyring<26.0.0,>=23.1.0; extra == "secure-local-storage"
|
|
83
87
|
Dynamic: license-file
|
|
@@ -92,6 +96,21 @@ https://docs.snowflake.com/
|
|
|
92
96
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
93
97
|
|
|
94
98
|
# Release Notes
|
|
99
|
+
- v4.7.1(Jul 15,2026)
|
|
100
|
+
- Added support for Python 3.14t (free-threaded).
|
|
101
|
+
- **Note:** Python 3.14t CI testing excludes `win_arm64` (no `cryptography` wheels available) and `mitmproxy` proxy tests on all platforms (transitive dependencies `aioquic`/`pylsqpack` lack free-threaded-compatible wheels).
|
|
102
|
+
- Improved verification of TLS connections (SNOW-3675579).
|
|
103
|
+
- Fixed `python-connector.log` not rotating on Windows, and every record being logged twice, when easy logging is enabled via `config.toml` (SNOW-3680325).
|
|
104
|
+
- **Note:** As part of this fix, easy logging no longer calls `logging.basicConfig()` and therefore no longer configures the root logger. `python-connector.log` now captures only the `snowflake.connector`, `botocore`, and `boto3`.
|
|
105
|
+
- Improved URL validation reliability by replacing the hand-rolled regex in `is_valid_url()` with `urllib.parse.urlparse` (SNOW-3392651).
|
|
106
|
+
- Fixed OAuth infinite loop when tokens expire by ensuring `reauthenticate()` calls `_request_tokens()` directly instead of looping through `prepare()`. Token cache is now read exactly once per connection, and `_store_tokens()` preserves macOS Keychain ACL by never calling `remove()`. The async OAuth `reauthenticate()` now runs the synchronous OAuth flow on a worker thread instead of blocking the event loop.
|
|
107
|
+
- Fixed OAuth scope handling for Snowflake custom OAuth: when refresh tokens are enabled, the connector no longer appends the OIDC `offline_access` scope for token endpoints on `*.snowflakecomputing.com` or `*.snowflakecomputing.cn`, which caused `invalid_scope` errors. Snowflake custom OAuth expects `refresh_token` in scope instead. External IdP behavior is unchanged.
|
|
108
|
+
- Fixed input validation for `scale` metadata in Arrow result set processing for `TIME`, `TIMESTAMP_NTZ`, `TIMESTAMP_LTZ`, and `TIMESTAMP_TZ` columns (SNOW-3388299).
|
|
109
|
+
- Fixed S3 storage client to correctly handle 307/308 (method-preserving) and 301/302 (GET/HEAD only) redirects by disabling automatic redirect following and re-signing each request with AWS SigV4 credentials for the redirect target. The region is updated from the `x-amz-bucket-region` response header on each redirect. Redirects are capped at 5 hops.
|
|
110
|
+
- Added native AKS (Azure Kubernetes Service) workload identity support. When running on AKS with workload identity configured, the connector automatically uses `WorkloadIdentityCredential` to authenticate via the injected service account credentials. OIDC backward compatibility is also supported.
|
|
111
|
+
- Added the `workload_identity_aws_use_outbound_token` connection option (default `false`) to opt into AWS WIF JWT attestation via STS `GetWebIdentityToken` instead of the default SigV4 `GetCallerIdentity` method.
|
|
112
|
+
- Fixed a bug where a fully-qualified DDL statement (e.g. `CREATE VIEW db.schema.obj`) on a session with no current schema would populate the connector's cached `_schema`/`_database` from the referenced object's namespace. This made `get_current_schema()` diverge from the server's `CURRENT_SCHEMA()` and mis-qualified Snowpark temp objects (SNOW-3665226).
|
|
113
|
+
|
|
95
114
|
- v4.6.0(May 28,2026)
|
|
96
115
|
- Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
|
|
97
116
|
- Fixed sdist to only install the minicore binary matching the current platform (SNOW-3526469). Previous 4.x releases copied every platform's minicore `.so`/`.dylib`/`.dll` into the install prefix, breaking downstream packagers (e.g. Homebrew) whose audits reject foreign-arch binaries.
|
|
@@ -85,10 +85,13 @@ console_scripts =
|
|
|
85
85
|
boto =
|
|
86
86
|
boto3>=1.24
|
|
87
87
|
botocore>=1.24
|
|
88
|
+
azure =
|
|
89
|
+
azure-identity>=1.16
|
|
88
90
|
development =
|
|
89
91
|
Cython
|
|
92
|
+
azure-identity>=1.16
|
|
90
93
|
coverage
|
|
91
|
-
mitmproxy>=12.0.0; python_version >= '3.12'
|
|
94
|
+
mitmproxy>=12.0.0; python_version >= '3.12' and python_version < '3.14'
|
|
92
95
|
more-itertools
|
|
93
96
|
numpy<=2.4.3
|
|
94
97
|
pendulum!=2.1.1
|
|
@@ -104,7 +107,8 @@ development =
|
|
|
104
107
|
pandas =
|
|
105
108
|
pandas>=1.0.0,<3.0.0; python_version < '3.13'
|
|
106
109
|
pandas>=2.1.2,<3.0.0; python_version >= '3.13'
|
|
107
|
-
pyarrow>=14.0.1
|
|
110
|
+
pyarrow>=14.0.1,<24; python_version >= '3.14'
|
|
111
|
+
pyarrow>=14.0.1; python_version < '3.14'
|
|
108
112
|
secure-local-storage =
|
|
109
113
|
keyring>=23.1.0,<26.0.0
|
|
110
114
|
|
|
@@ -1084,9 +1084,14 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
1084
1084
|
ret["data"] = {}
|
|
1085
1085
|
if _update_current_object:
|
|
1086
1086
|
data = ret["data"]
|
|
1087
|
-
|
|
1087
|
+
is_context_switch = sql.strip().upper().startswith("USE ")
|
|
1088
|
+
if data.get("finalDatabaseName") is not None and (
|
|
1089
|
+
self._database is not None or is_context_switch
|
|
1090
|
+
):
|
|
1088
1091
|
self._database = data["finalDatabaseName"]
|
|
1089
|
-
if
|
|
1092
|
+
if data.get("finalSchemaName") is not None and (
|
|
1093
|
+
self._schema is not None or is_context_switch
|
|
1094
|
+
):
|
|
1090
1095
|
self._schema = data["finalSchemaName"]
|
|
1091
1096
|
if "finalWarehouseName" in data and data["finalWarehouseName"] is not None:
|
|
1092
1097
|
self._warehouse = data["finalWarehouseName"]
|
|
@@ -10,8 +10,10 @@ import jwt
|
|
|
10
10
|
from snowflake.connector.options import (
|
|
11
11
|
aioboto3,
|
|
12
12
|
aiobotocore,
|
|
13
|
+
azure_identity_aio,
|
|
13
14
|
botocore,
|
|
14
15
|
installed_aioboto,
|
|
16
|
+
installed_azure_identity,
|
|
15
17
|
)
|
|
16
18
|
|
|
17
19
|
from ..errorcode import ER_INVALID_WIF_SETTINGS, ER_WIF_CREDENTIALS_NOT_FOUND
|
|
@@ -33,6 +35,26 @@ logger = logging.getLogger(__name__)
|
|
|
33
35
|
GCP_METADATA_SERVICE_ACCOUNT_BASE_URL = "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default"
|
|
34
36
|
|
|
35
37
|
|
|
38
|
+
async def get_azure_mi_token_via_aks(resource: str) -> str:
|
|
39
|
+
"""Gets an Azure MI access token via AsyncWorkloadIdentityCredential on AKS."""
|
|
40
|
+
if not installed_azure_identity:
|
|
41
|
+
raise MissingDependencyError(
|
|
42
|
+
"azure-identity (install with: pip install 'snowflake-connector-python[azure]')"
|
|
43
|
+
)
|
|
44
|
+
logger.debug(
|
|
45
|
+
"Detected AKS workload identity environment, using WorkloadIdentityCredential"
|
|
46
|
+
)
|
|
47
|
+
try:
|
|
48
|
+
async with azure_identity_aio.WorkloadIdentityCredential() as credential:
|
|
49
|
+
token = await credential.get_token(f"{resource}/.default")
|
|
50
|
+
return token.token
|
|
51
|
+
except Exception as e:
|
|
52
|
+
raise ProgrammingError(
|
|
53
|
+
msg=f"Error fetching Azure MI token via WorkloadIdentityCredential: {e}. Ensure the application is running on AKS with workload identity configured.",
|
|
54
|
+
errno=ER_WIF_CREDENTIALS_NOT_FOUND,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
36
58
|
async def get_aws_region() -> str:
|
|
37
59
|
"""Get the current AWS workload's region."""
|
|
38
60
|
region = os.environ.get("AWS_REGION") or os.environ.get("AWS_DEFAULT_REGION")
|
|
@@ -283,73 +305,100 @@ async def create_azure_attestation(
|
|
|
283
305
|
|
|
284
306
|
If the application isn't running on Azure or no credentials were found, raises an error.
|
|
285
307
|
"""
|
|
286
|
-
|
|
287
|
-
|
|
308
|
+
# AKS Workload Identity path: the three env vars are injected by the AKS webhook,
|
|
309
|
+
# and the token file is mounted by the Azure Workload Identity webhook.
|
|
310
|
+
# Checking file existence (rather than KUBERNETES_SERVICE_HOST) correctly handles
|
|
311
|
+
# pods with enableServiceLinks=false and avoids false positives on non-AKS K8s.
|
|
312
|
+
_federated_token_file = os.environ.get("AZURE_FEDERATED_TOKEN_FILE", "")
|
|
313
|
+
is_aks = all(
|
|
314
|
+
[
|
|
315
|
+
os.environ.get("AZURE_CLIENT_ID"),
|
|
316
|
+
os.environ.get("AZURE_TENANT_ID"),
|
|
317
|
+
_federated_token_file,
|
|
318
|
+
os.path.exists(_federated_token_file),
|
|
319
|
+
]
|
|
320
|
+
)
|
|
321
|
+
if is_aks:
|
|
322
|
+
if impersonation_path:
|
|
288
323
|
raise ProgrammingError(
|
|
289
|
-
msg="
|
|
324
|
+
msg="workload_identity_impersonation_path is not supported on AKS.",
|
|
290
325
|
errno=ER_INVALID_WIF_SETTINGS,
|
|
291
326
|
)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
if impersonation_path
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
327
|
+
jwt_str = await get_azure_mi_token_via_aks(snowflake_entra_resource)
|
|
328
|
+
else:
|
|
329
|
+
if impersonation_path:
|
|
330
|
+
if len(impersonation_path) != 1:
|
|
331
|
+
raise ProgrammingError(
|
|
332
|
+
msg="Azure WIF impersonation only supports a single service principal (single-hop). impersonation_path must contain exactly one client_id.",
|
|
333
|
+
errno=ER_INVALID_WIF_SETTINGS,
|
|
334
|
+
)
|
|
335
|
+
resource = (
|
|
336
|
+
AZURE_WIF_FEDERATION_AUDIENCE
|
|
337
|
+
if impersonation_path
|
|
338
|
+
else snowflake_entra_resource
|
|
339
|
+
)
|
|
300
340
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
341
|
+
headers = {"Metadata": "true"}
|
|
342
|
+
url_without_query_string = (
|
|
343
|
+
"http://169.254.169.254/metadata/identity/oauth2/token"
|
|
344
|
+
)
|
|
345
|
+
query_params = f"api-version=2018-02-01&resource={resource}"
|
|
346
|
+
|
|
347
|
+
# Check if running in Azure Functions environment
|
|
348
|
+
identity_endpoint = os.environ.get("IDENTITY_ENDPOINT")
|
|
349
|
+
identity_header = os.environ.get("IDENTITY_HEADER")
|
|
350
|
+
is_azure_functions = identity_endpoint is not None
|
|
351
|
+
|
|
352
|
+
if is_azure_functions:
|
|
353
|
+
if not identity_header:
|
|
354
|
+
raise ProgrammingError(
|
|
355
|
+
msg="Managed identity is not enabled on this Azure function.",
|
|
356
|
+
errno=ER_WIF_CREDENTIALS_NOT_FOUND,
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
# Azure Functions uses a different endpoint, headers and API version.
|
|
360
|
+
url_without_query_string = identity_endpoint
|
|
361
|
+
headers = {"X-IDENTITY-HEADER": identity_header}
|
|
362
|
+
query_params = f"api-version=2019-08-01&resource={resource}"
|
|
363
|
+
|
|
364
|
+
# Allow configuring an explicit client ID, which may be used in Azure Functions,
|
|
365
|
+
# if there are user-assigned identities, or multiple managed identities available.
|
|
366
|
+
managed_identity_client_id = os.environ.get("MANAGED_IDENTITY_CLIENT_ID")
|
|
367
|
+
if managed_identity_client_id:
|
|
368
|
+
query_params += f"&client_id={managed_identity_client_id}"
|
|
369
|
+
|
|
370
|
+
response_text = None
|
|
371
|
+
try:
|
|
372
|
+
res = await session_manager.request(
|
|
373
|
+
method="GET",
|
|
374
|
+
url=f"{url_without_query_string}?{query_params}",
|
|
375
|
+
headers=headers,
|
|
376
|
+
)
|
|
305
377
|
|
|
306
|
-
|
|
307
|
-
|
|
378
|
+
content = await res.content.read()
|
|
379
|
+
response_text = content.decode("utf-8")
|
|
380
|
+
response_data = json.loads(response_text)
|
|
381
|
+
res.raise_for_status()
|
|
382
|
+
except Exception as e:
|
|
308
383
|
raise ProgrammingError(
|
|
309
|
-
msg="
|
|
384
|
+
msg=f"Error fetching Azure metadata: {e}. Response: {response_text}. Ensure the application is running on Azure.",
|
|
310
385
|
errno=ER_WIF_CREDENTIALS_NOT_FOUND,
|
|
311
386
|
)
|
|
312
387
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
# if there are user-assigned identities, or multiple managed identities available.
|
|
320
|
-
managed_identity_client_id = os.environ.get("MANAGED_IDENTITY_CLIENT_ID")
|
|
321
|
-
if managed_identity_client_id:
|
|
322
|
-
query_params += f"&client_id={managed_identity_client_id}"
|
|
323
|
-
|
|
324
|
-
response_text = None
|
|
325
|
-
try:
|
|
326
|
-
res = await session_manager.request(
|
|
327
|
-
method="GET",
|
|
328
|
-
url=f"{url_without_query_string}?{query_params}",
|
|
329
|
-
headers=headers,
|
|
330
|
-
)
|
|
331
|
-
|
|
332
|
-
content = await res.content.read()
|
|
333
|
-
response_text = content.decode("utf-8")
|
|
334
|
-
response_data = json.loads(response_text)
|
|
335
|
-
res.raise_for_status()
|
|
336
|
-
except Exception as e:
|
|
337
|
-
raise ProgrammingError(
|
|
338
|
-
msg=f"Error fetching Azure metadata: {e}. Response: {response_text}. Ensure the application is running on Azure.",
|
|
339
|
-
errno=ER_WIF_CREDENTIALS_NOT_FOUND,
|
|
340
|
-
)
|
|
341
|
-
|
|
342
|
-
jwt_str = response_data.get("access_token")
|
|
343
|
-
if not jwt_str:
|
|
344
|
-
raise ProgrammingError(
|
|
345
|
-
msg="No access token found in Azure metadata service response.",
|
|
346
|
-
errno=ER_WIF_CREDENTIALS_NOT_FOUND,
|
|
347
|
-
)
|
|
388
|
+
jwt_str = response_data.get("access_token")
|
|
389
|
+
if not jwt_str:
|
|
390
|
+
raise ProgrammingError(
|
|
391
|
+
msg="No access token found in Azure metadata service response.",
|
|
392
|
+
errno=ER_WIF_CREDENTIALS_NOT_FOUND,
|
|
393
|
+
)
|
|
348
394
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
395
|
+
if impersonation_path:
|
|
396
|
+
jwt_str = await get_azure_sp_token_via_impersonation(
|
|
397
|
+
jwt_str,
|
|
398
|
+
impersonation_path[0],
|
|
399
|
+
snowflake_entra_resource,
|
|
400
|
+
session_manager,
|
|
401
|
+
)
|
|
353
402
|
|
|
354
403
|
issuer, subject = extract_iss_and_sub_without_signature_verification(jwt_str)
|
|
355
404
|
return WorkloadIdentityAttestation(
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from logging import getLogger
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
|
+
from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePrivateKey
|
|
8
9
|
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey
|
|
9
10
|
|
|
10
11
|
from ...auth.keypair import AuthByKeyPair as AuthByKeyPairSync
|
|
@@ -16,11 +17,14 @@ logger = getLogger(__name__)
|
|
|
16
17
|
class AuthByKeyPair(AuthByPluginAsync, AuthByKeyPairSync):
|
|
17
18
|
def __init__(
|
|
18
19
|
self,
|
|
19
|
-
private_key: bytes | str | RSAPrivateKey,
|
|
20
|
+
private_key: bytes | str | RSAPrivateKey | EllipticCurvePrivateKey,
|
|
21
|
+
private_key_passphrase: bytes | None = None,
|
|
20
22
|
lifetime_in_seconds: int = AuthByKeyPairSync.LIFETIME,
|
|
21
23
|
**kwargs,
|
|
22
24
|
) -> None:
|
|
23
|
-
AuthByKeyPairSync.__init__(
|
|
25
|
+
AuthByKeyPairSync.__init__(
|
|
26
|
+
self, private_key, private_key_passphrase, lifetime_in_seconds, **kwargs
|
|
27
|
+
)
|
|
24
28
|
|
|
25
29
|
async def reset_secrets(self) -> None:
|
|
26
30
|
AuthByKeyPairSync.reset_secrets(self)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import asyncio
|
|
5
6
|
import logging
|
|
6
7
|
from typing import TYPE_CHECKING, Any
|
|
7
8
|
|
|
@@ -72,19 +73,14 @@ class AuthByOauthCode(AuthByPluginAsync, AuthByOauthCodeSync):
|
|
|
72
73
|
async def reauthenticate(
|
|
73
74
|
self, conn: SnowflakeConnection, **kwargs: Any
|
|
74
75
|
) -> dict[str, bool]:
|
|
75
|
-
|
|
76
|
-
#
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
# we treat conn as a sync connection here, but this method only reads data from the object - which should be fine.
|
|
84
|
-
self._do_refresh_token(conn=conn)
|
|
85
|
-
# Use async authenticate_with_retry
|
|
86
|
-
await conn.authenticate_with_retry(self)
|
|
87
|
-
return {"success": True}
|
|
76
|
+
# The sync reauthenticate path opens a browser, blocks on the local
|
|
77
|
+
# callback socket, and POSTs to the IdP via urllib3 - all of which
|
|
78
|
+
# would stall the asyncio event loop. Run it in a worker thread.
|
|
79
|
+
loop = asyncio.get_running_loop()
|
|
80
|
+
return await loop.run_in_executor(
|
|
81
|
+
None,
|
|
82
|
+
lambda: AuthByOauthCodeSync.reauthenticate(self, conn=conn, **kwargs),
|
|
83
|
+
)
|
|
88
84
|
|
|
89
85
|
async def update_body(self, body: dict[Any, Any]) -> None:
|
|
90
86
|
AuthByOauthCodeSync.update_body(self, body)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import asyncio
|
|
5
6
|
import logging
|
|
6
7
|
from typing import TYPE_CHECKING, Any
|
|
7
8
|
|
|
@@ -55,19 +56,15 @@ class AuthByOauthCredentials(AuthByPluginAsync, AuthByOauthCredentialsSync):
|
|
|
55
56
|
async def reauthenticate(
|
|
56
57
|
self, conn: SnowflakeConnection, **kwargs: Any
|
|
57
58
|
) -> dict[str, bool]:
|
|
58
|
-
|
|
59
|
-
#
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
self._do_refresh_token(conn=conn)
|
|
68
|
-
# Use async authenticate_with_retry
|
|
69
|
-
await conn.authenticate_with_retry(self)
|
|
70
|
-
return {"success": True}
|
|
59
|
+
# The sync reauthenticate path POSTs to the IdP via urllib3, which
|
|
60
|
+
# would stall the asyncio event loop. Run it in a worker thread.
|
|
61
|
+
loop = asyncio.get_running_loop()
|
|
62
|
+
return await loop.run_in_executor(
|
|
63
|
+
None,
|
|
64
|
+
lambda: AuthByOauthCredentialsSync.reauthenticate(
|
|
65
|
+
self, conn=conn, **kwargs
|
|
66
|
+
),
|
|
67
|
+
)
|
|
71
68
|
|
|
72
69
|
async def update_body(self, body: dict[Any, Any]) -> None:
|
|
73
70
|
AuthByOauthCredentialsSync.update_body(self, body)
|