snowflake-connector-python 4.3.0__tar.gz → 4.4.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.3.0 → snowflake_connector_python-4.4.0}/CONTRIBUTING.md +2 -2
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/DESCRIPTION.md +15 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/PKG-INFO +21 -6
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/setup.cfg +5 -4
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_utils.py +4 -21
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_wif_util.py +1 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_auth.py +5 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_auth.py +9 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/azure_storage_client.py +3 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/config_manager.py +34 -3
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/connection.py +8 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/crl.py +1 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/platform_detection.py +1 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/result_batch.py +22 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/token_cache.py +1 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/util_text.py +18 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/wif_util.py +1 -1
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/PKG-INFO +21 -6
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/requires.txt +5 -5
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/LICENSE.txt +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/MANIFEST.in +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/NOTICE +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/README.md +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/SECURITY.md +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/pyproject.toml +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/setup.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/README.md +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_connection.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_cursor.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_description.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_network.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_result_set.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_session_manager.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_time_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth_code.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/crl_cache.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/cursor.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/interval_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/minicore/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/network.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/os_details.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/session_manager.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -30,8 +30,8 @@ dependencies installed with `snowflake-connector-python` installed as an editabl
|
|
|
30
30
|
Setting up a development environment is super easy with this [one simple tox command](https://tox.wiki/en/latest/example/devenv.html).
|
|
31
31
|
|
|
32
32
|
```shell
|
|
33
|
-
tox --devenv
|
|
34
|
-
.
|
|
33
|
+
tox --devenv venv39 -e py39
|
|
34
|
+
. venv39/bin/activate
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
Note: we suggest using the lowest supported Python version for development.
|
|
@@ -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.4.0(March 24,2026)
|
|
11
|
+
- Bump the lower boundary of cryptography to 46.0.5 due to CVE-2026-26007.
|
|
12
|
+
- Added support for Python 3.14.
|
|
13
|
+
- Removed pyOpenSSL upper bound dependency constraint to allow installation of pyOpenSSL 26.0.0+, which includes a fix for GHSA-vp96-hxj8-p424.
|
|
14
|
+
- Fixed Azure IMDS `Metadata` header to use lowercase `"true"` instead of `"True"`, which caused 400 errors during Azure Workload Identity Federation authentication.
|
|
15
|
+
- Fixed default `crl_download_max_size` to be 20MB instead of 200MB, as the previous value was set too high and could cause out-of-memory issues.
|
|
16
|
+
- Fixed a bug where Azure GET commands would incorrectly set the file status to UPLOADED instead of preserving the DOWNLOADED status during metadata retrieval.
|
|
17
|
+
- Renamed the environment variable for skipping config file permission warnings from `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` to `SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION`. The old variable is still supported but emits a deprecation warning.
|
|
18
|
+
- Fixed `unsafe_skip_file_permissions_check` flag not being respected when reading `connections.toml`.
|
|
19
|
+
- Fixed JSONDecodeError in result_batch._load() when fetching large result sets
|
|
20
|
+
|
|
10
21
|
- v4.3.0(February 12,2026)
|
|
11
22
|
- Ensured proper list conversion - the converter runs to_snowflake on all list elements.
|
|
12
23
|
- Made the parameter `server_session_keep_alive` in `SnowflakeConnection` skip checking for pending async queries, providing faster connection close times especially when many async queries are executed.
|
|
@@ -14,7 +25,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
14
25
|
- Log a warning when using http protocol for OAuth urls.
|
|
15
26
|
- Deprecated support for custom revocation error classes in OCSP response cache deserialization. By default, only `RevocationCheckError` exceptions are deserialized from OCSP cache. Custom exception classes can be temporarily enabled by setting the `SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS` environment variable to `true` or `1`, but this support will be removed in a future release.
|
|
16
27
|
- Bumped up vendored `urllib3` to `2.6.3`
|
|
17
|
-
- Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema
|
|
28
|
+
- Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema inconsistency between batches.
|
|
29
|
+
- Fixed a bug where tilde in path to `private_key_file` specified in the connection was not properly expanded
|
|
30
|
+
- Added `secondary_roles` connection parameter to control secondary role activation at session creation. Supports `ALL` or `NONE` or no value.
|
|
31
|
+
|
|
18
32
|
|
|
19
33
|
- v4.2.0(January 07,2026)
|
|
20
34
|
- Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -27,6 +27,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
27
27
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
28
|
Classifier: Programming Language :: Python :: 3.12
|
|
29
29
|
Classifier: Programming Language :: Python :: 3.13
|
|
30
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
30
31
|
Classifier: Programming Language :: SQL
|
|
31
32
|
Classifier: Topic :: Database
|
|
32
33
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
@@ -39,8 +40,8 @@ Description-Content-Type: text/markdown
|
|
|
39
40
|
License-File: LICENSE.txt
|
|
40
41
|
License-File: NOTICE
|
|
41
42
|
Requires-Dist: asn1crypto<2.0.0,>0.24.0
|
|
42
|
-
Requires-Dist: cryptography>=
|
|
43
|
-
Requires-Dist: pyOpenSSL
|
|
43
|
+
Requires-Dist: cryptography>=46.0.5
|
|
44
|
+
Requires-Dist: pyOpenSSL>=24.0.0
|
|
44
45
|
Requires-Dist: pyjwt<3.0.0,>=2.10.1
|
|
45
46
|
Requires-Dist: pytz
|
|
46
47
|
Requires-Dist: requests<3.0.0,>=2.32.4
|
|
@@ -62,9 +63,9 @@ Requires-Dist: botocore>=1.24; extra == "boto"
|
|
|
62
63
|
Provides-Extra: development
|
|
63
64
|
Requires-Dist: Cython; extra == "development"
|
|
64
65
|
Requires-Dist: coverage; extra == "development"
|
|
65
|
-
Requires-Dist: mitmproxy>=
|
|
66
|
+
Requires-Dist: mitmproxy>=12.0.0; python_version >= "3.12" and extra == "development"
|
|
66
67
|
Requires-Dist: more-itertools; extra == "development"
|
|
67
|
-
Requires-Dist: numpy<=2.
|
|
68
|
+
Requires-Dist: numpy<=2.4.3; extra == "development"
|
|
68
69
|
Requires-Dist: pendulum!=2.1.1; extra == "development"
|
|
69
70
|
Requires-Dist: pexpect; extra == "development"
|
|
70
71
|
Requires-Dist: pytest<7.5.0; extra == "development"
|
|
@@ -93,6 +94,17 @@ https://docs.snowflake.com/
|
|
|
93
94
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
94
95
|
|
|
95
96
|
# Release Notes
|
|
97
|
+
- v4.4.0(March 24,2026)
|
|
98
|
+
- Bump the lower boundary of cryptography to 46.0.5 due to CVE-2026-26007.
|
|
99
|
+
- Added support for Python 3.14.
|
|
100
|
+
- Removed pyOpenSSL upper bound dependency constraint to allow installation of pyOpenSSL 26.0.0+, which includes a fix for GHSA-vp96-hxj8-p424.
|
|
101
|
+
- Fixed Azure IMDS `Metadata` header to use lowercase `"true"` instead of `"True"`, which caused 400 errors during Azure Workload Identity Federation authentication.
|
|
102
|
+
- Fixed default `crl_download_max_size` to be 20MB instead of 200MB, as the previous value was set too high and could cause out-of-memory issues.
|
|
103
|
+
- Fixed a bug where Azure GET commands would incorrectly set the file status to UPLOADED instead of preserving the DOWNLOADED status during metadata retrieval.
|
|
104
|
+
- Renamed the environment variable for skipping config file permission warnings from `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` to `SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION`. The old variable is still supported but emits a deprecation warning.
|
|
105
|
+
- Fixed `unsafe_skip_file_permissions_check` flag not being respected when reading `connections.toml`.
|
|
106
|
+
- Fixed JSONDecodeError in result_batch._load() when fetching large result sets
|
|
107
|
+
|
|
96
108
|
- v4.3.0(February 12,2026)
|
|
97
109
|
- Ensured proper list conversion - the converter runs to_snowflake on all list elements.
|
|
98
110
|
- Made the parameter `server_session_keep_alive` in `SnowflakeConnection` skip checking for pending async queries, providing faster connection close times especially when many async queries are executed.
|
|
@@ -100,7 +112,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
100
112
|
- Log a warning when using http protocol for OAuth urls.
|
|
101
113
|
- Deprecated support for custom revocation error classes in OCSP response cache deserialization. By default, only `RevocationCheckError` exceptions are deserialized from OCSP cache. Custom exception classes can be temporarily enabled by setting the `SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS` environment variable to `true` or `1`, but this support will be removed in a future release.
|
|
102
114
|
- Bumped up vendored `urllib3` to `2.6.3`
|
|
103
|
-
- Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema
|
|
115
|
+
- Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema inconsistency between batches.
|
|
116
|
+
- Fixed a bug where tilde in path to `private_key_file` specified in the connection was not properly expanded
|
|
117
|
+
- Added `secondary_roles` connection parameter to control secondary role activation at session creation. Supports `ALL` or `NONE` or no value.
|
|
118
|
+
|
|
104
119
|
|
|
105
120
|
- v4.2.0(January 07,2026)
|
|
106
121
|
- Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
|
|
@@ -25,6 +25,7 @@ classifiers =
|
|
|
25
25
|
Programming Language :: Python :: 3.11
|
|
26
26
|
Programming Language :: Python :: 3.12
|
|
27
27
|
Programming Language :: Python :: 3.13
|
|
28
|
+
Programming Language :: Python :: 3.14
|
|
28
29
|
Programming Language :: SQL
|
|
29
30
|
Topic :: Database
|
|
30
31
|
Topic :: Scientific/Engineering :: Information Analysis
|
|
@@ -44,8 +45,8 @@ python_requires = >=3.9
|
|
|
44
45
|
packages = find_namespace:
|
|
45
46
|
install_requires =
|
|
46
47
|
asn1crypto>0.24.0,<2.0.0
|
|
47
|
-
cryptography>=
|
|
48
|
-
pyOpenSSL>=24.0.0
|
|
48
|
+
cryptography>=46.0.5
|
|
49
|
+
pyOpenSSL>=24.0.0
|
|
49
50
|
pyjwt>=2.10.1,<3.0.0
|
|
50
51
|
pytz
|
|
51
52
|
requests>=2.32.4,<3.0.0
|
|
@@ -89,9 +90,9 @@ boto =
|
|
|
89
90
|
development =
|
|
90
91
|
Cython
|
|
91
92
|
coverage
|
|
92
|
-
mitmproxy>=
|
|
93
|
+
mitmproxy>=12.0.0; python_version >= '3.12'
|
|
93
94
|
more-itertools
|
|
94
|
-
numpy<=2.
|
|
95
|
+
numpy<=2.4.3
|
|
95
96
|
pendulum!=2.1.1
|
|
96
97
|
pexpect
|
|
97
98
|
pytest<7.5.0
|
|
@@ -10,7 +10,6 @@ import threading
|
|
|
10
10
|
import time
|
|
11
11
|
from enum import Enum
|
|
12
12
|
from inspect import stack
|
|
13
|
-
from pathlib import Path
|
|
14
13
|
from random import choice
|
|
15
14
|
from threading import Timer
|
|
16
15
|
from uuid import UUID
|
|
@@ -188,26 +187,10 @@ class _CoreLoader:
|
|
|
188
187
|
@staticmethod
|
|
189
188
|
def _detect_libc() -> str:
|
|
190
189
|
"""Detect libc type on Linux (glibc vs musl)."""
|
|
191
|
-
|
|
192
|
-
if
|
|
193
|
-
return "
|
|
194
|
-
|
|
195
|
-
# Check for musl by looking at the libc library
|
|
196
|
-
try:
|
|
197
|
-
import subprocess
|
|
198
|
-
|
|
199
|
-
result = subprocess.run(
|
|
200
|
-
["ldd", "--version"],
|
|
201
|
-
capture_output=True,
|
|
202
|
-
text=True,
|
|
203
|
-
)
|
|
204
|
-
if "musl" in result.stdout.lower() or "musl" in result.stderr.lower():
|
|
205
|
-
return "musl"
|
|
206
|
-
except Exception:
|
|
207
|
-
pass
|
|
208
|
-
|
|
209
|
-
# Default to glibc
|
|
210
|
-
return "glibc"
|
|
190
|
+
lib, _ = platform.libc_ver()
|
|
191
|
+
if lib == "glibc":
|
|
192
|
+
return "glibc"
|
|
193
|
+
return "musl"
|
|
211
194
|
|
|
212
195
|
@staticmethod
|
|
213
196
|
def _get_platform_subdir() -> str:
|
|
@@ -235,7 +235,7 @@ async def create_azure_attestation(
|
|
|
235
235
|
|
|
236
236
|
If the application isn't running on Azure or no credentials were found, raises an error.
|
|
237
237
|
"""
|
|
238
|
-
headers = {"Metadata": "
|
|
238
|
+
headers = {"Metadata": "true"}
|
|
239
239
|
url_without_query_string = "http://169.254.169.254/metadata/identity/oauth2/token"
|
|
240
240
|
query_params = f"api-version=2018-02-01&resource={snowflake_entra_resource}"
|
|
241
241
|
|
|
@@ -146,6 +146,11 @@ class Auth(AuthSync):
|
|
|
146
146
|
if session_parameters:
|
|
147
147
|
body["data"]["SESSION_PARAMETERS"] = session_parameters
|
|
148
148
|
|
|
149
|
+
# Add secondary_roles connection parameter if specified
|
|
150
|
+
secondary_roles = getattr(self._rest._connection, "_secondary_roles", None)
|
|
151
|
+
if secondary_roles and isinstance(secondary_roles, str):
|
|
152
|
+
body["data"]["SECONDARY_ROLES"] = secondary_roles.upper()
|
|
153
|
+
|
|
149
154
|
logger.debug(
|
|
150
155
|
"body['data']: %s",
|
|
151
156
|
{
|
|
@@ -63,6 +63,7 @@ from ..session_manager import SessionManager as SyncSessionManager
|
|
|
63
63
|
from ..session_manager import SessionManagerFactory
|
|
64
64
|
from ..sqlstate import SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED
|
|
65
65
|
from ..token_cache import TokenCache, TokenKey, TokenType
|
|
66
|
+
from ..util_text import expand_tilde
|
|
66
67
|
from ..version import VERSION
|
|
67
68
|
from .no_auth import AuthNoAuth
|
|
68
69
|
from .oauth import AuthByOAuth
|
|
@@ -88,6 +89,7 @@ AUTHENTICATION_REQUEST_KEY_WHITELIST = {
|
|
|
88
89
|
"CLIENT_ENVIRONMENT",
|
|
89
90
|
"EXT_AUTHN_DUO_METHOD",
|
|
90
91
|
"LOGIN_NAME",
|
|
92
|
+
"SECONDARY_ROLES",
|
|
91
93
|
"SESSION_PARAMETERS",
|
|
92
94
|
"SVN_REVISION",
|
|
93
95
|
}
|
|
@@ -261,6 +263,11 @@ class Auth:
|
|
|
261
263
|
if session_parameters:
|
|
262
264
|
body["data"]["SESSION_PARAMETERS"] = session_parameters
|
|
263
265
|
|
|
266
|
+
# Add secondary_roles connection parameter if specified
|
|
267
|
+
secondary_roles = getattr(self._rest._connection, "_secondary_roles", None)
|
|
268
|
+
if secondary_roles and isinstance(secondary_roles, str):
|
|
269
|
+
body["data"]["SECONDARY_ROLES"] = secondary_roles.upper()
|
|
270
|
+
|
|
264
271
|
logger.debug(
|
|
265
272
|
"body['data']: %s",
|
|
266
273
|
{
|
|
@@ -643,6 +650,8 @@ def get_token_from_private_key(
|
|
|
643
650
|
|
|
644
651
|
def get_public_key_fingerprint(private_key_file: str, password: str) -> str:
|
|
645
652
|
"""Helper function to generate the public key fingerprint from the private key file"""
|
|
653
|
+
private_key_file = expand_tilde(private_key_file)
|
|
654
|
+
|
|
646
655
|
with open(private_key_file, "rb") as key:
|
|
647
656
|
p_key = load_pem_private_key(
|
|
648
657
|
key.read(), password=password.encode(), backend=default_backend()
|
|
@@ -124,7 +124,9 @@ class SnowflakeAzureRestClient(SnowflakeStorageClient):
|
|
|
124
124
|
self.retry_count[retry_id] = 0
|
|
125
125
|
r = self._send_request_with_authentication_and_retry("HEAD", url, retry_id)
|
|
126
126
|
if r.status_code == 200:
|
|
127
|
-
|
|
127
|
+
# If we are in download path, do not update to UPLOADED
|
|
128
|
+
if meta.result_status != ResultStatus.DOWNLOADED:
|
|
129
|
+
meta.result_status = ResultStatus.UPLOADED
|
|
128
130
|
enc_data_str = r.headers.get(ENCRYPTION_DATA)
|
|
129
131
|
encryption_data = None if enc_data_str is None else json.loads(enc_data_str)
|
|
130
132
|
encryption_metadata = (
|
|
@@ -29,12 +29,21 @@ LOGGER = logging.getLogger(__name__)
|
|
|
29
29
|
READABLE_BY_OTHERS = stat.S_IRGRP | stat.S_IROTH
|
|
30
30
|
WRITABLE_BY_OTHERS = stat.S_IWGRP | stat.S_IWOTH
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
DEPRECATED_SKIP_WARNING_ENV_VAR = "SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE"
|
|
33
|
+
SKIP_WARNING_ENV_VAR = "SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION"
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
def _should_skip_warning_for_read_permissions_on_config_file() -> bool:
|
|
36
37
|
"""Check if the warning should be skipped based on environment variable."""
|
|
37
|
-
|
|
38
|
+
if SKIP_WARNING_ENV_VAR in os.environ:
|
|
39
|
+
return os.getenv(SKIP_WARNING_ENV_VAR, "false").lower() == "true"
|
|
40
|
+
# Else fallback to old value
|
|
41
|
+
if DEPRECATED_SKIP_WARNING_ENV_VAR in os.environ:
|
|
42
|
+
warn(
|
|
43
|
+
f"{DEPRECATED_SKIP_WARNING_ENV_VAR} is deprecated. Please use {SKIP_WARNING_ENV_VAR} instead."
|
|
44
|
+
)
|
|
45
|
+
return os.getenv(DEPRECATED_SKIP_WARNING_ENV_VAR, "false").lower() == "true"
|
|
46
|
+
return False
|
|
38
47
|
|
|
39
48
|
|
|
40
49
|
class ConfigSliceOptions(NamedTuple):
|
|
@@ -324,14 +333,36 @@ class ConfigManager:
|
|
|
324
333
|
)
|
|
325
334
|
for filep, sliceoptions, section in itertools.chain(
|
|
326
335
|
((self.file_path, config_slice_options, None),),
|
|
327
|
-
|
|
336
|
+
(
|
|
337
|
+
(
|
|
338
|
+
s.path,
|
|
339
|
+
(
|
|
340
|
+
s.options._replace(
|
|
341
|
+
check_permissions=not skip_file_permissions_check
|
|
342
|
+
)
|
|
343
|
+
if skip_file_permissions_check
|
|
344
|
+
else s.options
|
|
345
|
+
),
|
|
346
|
+
s.section,
|
|
347
|
+
)
|
|
348
|
+
for s in self._slices
|
|
349
|
+
),
|
|
328
350
|
):
|
|
329
351
|
if sliceoptions.only_in_slice:
|
|
330
352
|
del read_config_file[section]
|
|
331
353
|
try:
|
|
332
354
|
if not filep.exists():
|
|
355
|
+
# Python 3.14+ (cpython#118243): Path.exists() suppresses
|
|
356
|
+
# PermissionError and returns False instead of raising, so
|
|
357
|
+
# we explicitly check parent directory access.
|
|
358
|
+
if not os.access(filep.parent, os.R_OK | os.X_OK):
|
|
359
|
+
LOGGER.debug(
|
|
360
|
+
f"Fail to read configuration file from {str(filep)} due to no permission on its parent directory"
|
|
361
|
+
)
|
|
333
362
|
continue
|
|
334
363
|
except PermissionError:
|
|
364
|
+
# Python < 3.14: Path.exists() raises PermissionError when
|
|
365
|
+
# the parent directory is not accessible.
|
|
335
366
|
LOGGER.debug(
|
|
336
367
|
f"Fail to read configuration file from {str(filep)} due to no permission on its parent directory"
|
|
337
368
|
)
|
|
@@ -142,7 +142,7 @@ from .sqlstate import SQLSTATE_CONNECTION_NOT_EXISTS, SQLSTATE_FEATURE_NOT_SUPPO
|
|
|
142
142
|
from .telemetry import TelemetryClient, TelemetryData, TelemetryField
|
|
143
143
|
from .time_util import HeartBeatTimer, get_time_millis
|
|
144
144
|
from .url_util import extract_top_level_domain_from_hostname
|
|
145
|
-
from .util_text import construct_hostname, parse_account, split_statements
|
|
145
|
+
from .util_text import construct_hostname, expand_tilde, parse_account, split_statements
|
|
146
146
|
from .wif_util import AttestationProvider
|
|
147
147
|
|
|
148
148
|
if sys.version_info >= (3, 13) or typing.TYPE_CHECKING:
|
|
@@ -173,6 +173,9 @@ def _get_private_bytes_from_file(
|
|
|
173
173
|
) -> bytes:
|
|
174
174
|
if private_key_file_pwd is not None and isinstance(private_key_file_pwd, str):
|
|
175
175
|
private_key_file_pwd = private_key_file_pwd.encode("utf-8")
|
|
176
|
+
|
|
177
|
+
private_key_file = expand_tilde(private_key_file)
|
|
178
|
+
|
|
176
179
|
with open(private_key_file, "rb") as key:
|
|
177
180
|
private_key = serialization.load_pem_private_key(
|
|
178
181
|
key.read(),
|
|
@@ -483,6 +486,10 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
|
|
|
483
486
|
None,
|
|
484
487
|
(type(None), int),
|
|
485
488
|
), # Maximum CRL file size in bytes
|
|
489
|
+
"secondary_roles": (
|
|
490
|
+
None,
|
|
491
|
+
(type(None), str),
|
|
492
|
+
), # Secondary roles mode: ALL or NONE or no value
|
|
486
493
|
}
|
|
487
494
|
|
|
488
495
|
APPLICATION_RE = re.compile(r"[\w\d_]+")
|
{snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/crl.py
RENAMED
|
@@ -64,7 +64,7 @@ class CRLConfig:
|
|
|
64
64
|
crl_cache_removal_delay_days: int = 7
|
|
65
65
|
crl_cache_cleanup_interval_hours: int = 1
|
|
66
66
|
crl_cache_start_cleanup: bool = False
|
|
67
|
-
crl_download_max_size: int =
|
|
67
|
+
crl_download_max_size: int = 20 * 1024 * 1024 # 20 MB
|
|
68
68
|
unsafe_skip_file_permissions_check: bool = False
|
|
69
69
|
|
|
70
70
|
@classmethod
|
|
@@ -195,7 +195,7 @@ def is_azure_vm(
|
|
|
195
195
|
try:
|
|
196
196
|
token_resp = session_manager.get(
|
|
197
197
|
"http://169.254.169.254/metadata/instance?api-version=2021-02-01",
|
|
198
|
-
headers={"Metadata": "
|
|
198
|
+
headers={"Metadata": "true"},
|
|
199
199
|
timeout=platform_detection_timeout_seconds,
|
|
200
200
|
)
|
|
201
201
|
return (
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import abc
|
|
4
|
+
import gzip
|
|
4
5
|
import json
|
|
5
6
|
import time
|
|
6
7
|
from base64 import b64decode
|
|
@@ -52,6 +53,25 @@ SSE_C_ALGORITHM = "x-amz-server-side-encryption-customer-algorithm"
|
|
|
52
53
|
SSE_C_KEY = "x-amz-server-side-encryption-customer-key"
|
|
53
54
|
SSE_C_AES = "AES256"
|
|
54
55
|
|
|
56
|
+
_GZIP_MAGIC = b"\x1f\x8b"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _ensure_decompressed(response: Response) -> None:
|
|
60
|
+
"""Decompress the response body if HTTP-level gzip decompression was skipped.
|
|
61
|
+
|
|
62
|
+
Cloud storage (S3/GCS/Azure) may serve result-set chunks as raw gzip blobs
|
|
63
|
+
without a ``Content-Encoding: gzip`` header, in which case urllib3's
|
|
64
|
+
transparent decompression never activates. Detect this by inspecting the
|
|
65
|
+
cached *response.content* for the gzip magic number and decompress in-place.
|
|
66
|
+
"""
|
|
67
|
+
content = response.content
|
|
68
|
+
if isinstance(content, bytes) and content[:2] == _GZIP_MAGIC:
|
|
69
|
+
logger.debug(
|
|
70
|
+
"Response body starts with gzip magic number but was not "
|
|
71
|
+
"decompressed by the HTTP stack; decompressing explicitly."
|
|
72
|
+
)
|
|
73
|
+
response._content = gzip.decompress(content)
|
|
74
|
+
|
|
55
75
|
|
|
56
76
|
def _create_nanoarrow_iterator(
|
|
57
77
|
data: bytes,
|
|
@@ -418,6 +438,8 @@ class ResultBatch(abc.ABC):
|
|
|
418
438
|
self._metrics[DownloadMetrics.download.value] = (
|
|
419
439
|
download_metric.get_timing_millis()
|
|
420
440
|
)
|
|
441
|
+
|
|
442
|
+
_ensure_decompressed(response)
|
|
421
443
|
return response
|
|
422
444
|
|
|
423
445
|
@abc.abstractmethod
|
|
@@ -69,7 +69,7 @@ class TokenCache(ABC):
|
|
|
69
69
|
|
|
70
70
|
Platform-specific implementations:
|
|
71
71
|
- macOS/Windows: Uses OS keyring (Keychain/Credential Manager) via 'keyring' library
|
|
72
|
-
- Linux: Uses
|
|
72
|
+
- Linux: Uses JSON file in ~/.cache/snowflake/ with 0o600 permissions
|
|
73
73
|
- Fallback: NoopTokenCache (no caching) if secure storage unavailable
|
|
74
74
|
|
|
75
75
|
Tokens are keyed by (host, user, token_type) to support multiple accounts.
|
|
@@ -8,7 +8,8 @@ import random
|
|
|
8
8
|
import re
|
|
9
9
|
import string
|
|
10
10
|
from io import StringIO
|
|
11
|
-
from
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Any, Sequence
|
|
12
13
|
|
|
13
14
|
COMMENT_PATTERN_RE = re.compile(r"^\s*\-\-")
|
|
14
15
|
EMPTY_LINE_RE = re.compile(r"^\s*$")
|
|
@@ -301,3 +302,19 @@ def get_md5_for_integrity(text: str | bytes) -> bytes:
|
|
|
301
302
|
md5 = hashlib.md5(usedforsecurity=False)
|
|
302
303
|
md5.update(text)
|
|
303
304
|
return md5.digest()
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def expand_tilde(path_to_expand: Any) -> Any:
|
|
308
|
+
try:
|
|
309
|
+
path_to_expand = (
|
|
310
|
+
str(Path(path_to_expand).expanduser())
|
|
311
|
+
if isinstance(path_to_expand, str)
|
|
312
|
+
else path_to_expand
|
|
313
|
+
)
|
|
314
|
+
except Exception as e:
|
|
315
|
+
# user home could not be resolved
|
|
316
|
+
_logger.debug(
|
|
317
|
+
"User home could not be determined, not expanding tilde. Exception: %s", e
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
return path_to_expand
|
|
@@ -331,7 +331,7 @@ def create_azure_attestation(
|
|
|
331
331
|
|
|
332
332
|
If the application isn't running on Azure or no credentials were found, raises an error.
|
|
333
333
|
"""
|
|
334
|
-
headers = {"Metadata": "
|
|
334
|
+
headers = {"Metadata": "true"}
|
|
335
335
|
url_without_query_string = "http://169.254.169.254/metadata/identity/oauth2/token"
|
|
336
336
|
query_params = f"api-version=2018-02-01&resource={snowflake_entra_resource}"
|
|
337
337
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -27,6 +27,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
27
27
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
28
|
Classifier: Programming Language :: Python :: 3.12
|
|
29
29
|
Classifier: Programming Language :: Python :: 3.13
|
|
30
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
30
31
|
Classifier: Programming Language :: SQL
|
|
31
32
|
Classifier: Topic :: Database
|
|
32
33
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
@@ -39,8 +40,8 @@ Description-Content-Type: text/markdown
|
|
|
39
40
|
License-File: LICENSE.txt
|
|
40
41
|
License-File: NOTICE
|
|
41
42
|
Requires-Dist: asn1crypto<2.0.0,>0.24.0
|
|
42
|
-
Requires-Dist: cryptography>=
|
|
43
|
-
Requires-Dist: pyOpenSSL
|
|
43
|
+
Requires-Dist: cryptography>=46.0.5
|
|
44
|
+
Requires-Dist: pyOpenSSL>=24.0.0
|
|
44
45
|
Requires-Dist: pyjwt<3.0.0,>=2.10.1
|
|
45
46
|
Requires-Dist: pytz
|
|
46
47
|
Requires-Dist: requests<3.0.0,>=2.32.4
|
|
@@ -62,9 +63,9 @@ Requires-Dist: botocore>=1.24; extra == "boto"
|
|
|
62
63
|
Provides-Extra: development
|
|
63
64
|
Requires-Dist: Cython; extra == "development"
|
|
64
65
|
Requires-Dist: coverage; extra == "development"
|
|
65
|
-
Requires-Dist: mitmproxy>=
|
|
66
|
+
Requires-Dist: mitmproxy>=12.0.0; python_version >= "3.12" and extra == "development"
|
|
66
67
|
Requires-Dist: more-itertools; extra == "development"
|
|
67
|
-
Requires-Dist: numpy<=2.
|
|
68
|
+
Requires-Dist: numpy<=2.4.3; extra == "development"
|
|
68
69
|
Requires-Dist: pendulum!=2.1.1; extra == "development"
|
|
69
70
|
Requires-Dist: pexpect; extra == "development"
|
|
70
71
|
Requires-Dist: pytest<7.5.0; extra == "development"
|
|
@@ -93,6 +94,17 @@ https://docs.snowflake.com/
|
|
|
93
94
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
94
95
|
|
|
95
96
|
# Release Notes
|
|
97
|
+
- v4.4.0(March 24,2026)
|
|
98
|
+
- Bump the lower boundary of cryptography to 46.0.5 due to CVE-2026-26007.
|
|
99
|
+
- Added support for Python 3.14.
|
|
100
|
+
- Removed pyOpenSSL upper bound dependency constraint to allow installation of pyOpenSSL 26.0.0+, which includes a fix for GHSA-vp96-hxj8-p424.
|
|
101
|
+
- Fixed Azure IMDS `Metadata` header to use lowercase `"true"` instead of `"True"`, which caused 400 errors during Azure Workload Identity Federation authentication.
|
|
102
|
+
- Fixed default `crl_download_max_size` to be 20MB instead of 200MB, as the previous value was set too high and could cause out-of-memory issues.
|
|
103
|
+
- Fixed a bug where Azure GET commands would incorrectly set the file status to UPLOADED instead of preserving the DOWNLOADED status during metadata retrieval.
|
|
104
|
+
- Renamed the environment variable for skipping config file permission warnings from `SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE` to `SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION`. The old variable is still supported but emits a deprecation warning.
|
|
105
|
+
- Fixed `unsafe_skip_file_permissions_check` flag not being respected when reading `connections.toml`.
|
|
106
|
+
- Fixed JSONDecodeError in result_batch._load() when fetching large result sets
|
|
107
|
+
|
|
96
108
|
- v4.3.0(February 12,2026)
|
|
97
109
|
- Ensured proper list conversion - the converter runs to_snowflake on all list elements.
|
|
98
110
|
- Made the parameter `server_session_keep_alive` in `SnowflakeConnection` skip checking for pending async queries, providing faster connection close times especially when many async queries are executed.
|
|
@@ -100,7 +112,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
100
112
|
- Log a warning when using http protocol for OAuth urls.
|
|
101
113
|
- Deprecated support for custom revocation error classes in OCSP response cache deserialization. By default, only `RevocationCheckError` exceptions are deserialized from OCSP cache. Custom exception classes can be temporarily enabled by setting the `SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS` environment variable to `true` or `1`, but this support will be removed in a future release.
|
|
102
114
|
- Bumped up vendored `urllib3` to `2.6.3`
|
|
103
|
-
- Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema
|
|
115
|
+
- Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema inconsistency between batches.
|
|
116
|
+
- Fixed a bug where tilde in path to `private_key_file` specified in the connection was not properly expanded
|
|
117
|
+
- Added `secondary_roles` connection parameter to control secondary role activation at session creation. Supports `ALL` or `NONE` or no value.
|
|
118
|
+
|
|
104
119
|
|
|
105
120
|
- v4.2.0(January 07,2026)
|
|
106
121
|
- Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
asn1crypto<2.0.0,>0.24.0
|
|
2
|
-
cryptography>=
|
|
3
|
-
pyOpenSSL
|
|
2
|
+
cryptography>=46.0.5
|
|
3
|
+
pyOpenSSL>=24.0.0
|
|
4
4
|
pyjwt<3.0.0,>=2.10.1
|
|
5
5
|
pytz
|
|
6
6
|
requests<3.0.0,>=2.32.4
|
|
@@ -27,7 +27,7 @@ botocore>=1.24
|
|
|
27
27
|
Cython
|
|
28
28
|
coverage
|
|
29
29
|
more-itertools
|
|
30
|
-
numpy<=2.
|
|
30
|
+
numpy<=2.4.3
|
|
31
31
|
pendulum!=2.1.1
|
|
32
32
|
pexpect
|
|
33
33
|
pytest<7.5.0
|
|
@@ -39,8 +39,8 @@ pytest-xdist
|
|
|
39
39
|
pytzdata
|
|
40
40
|
responses
|
|
41
41
|
|
|
42
|
-
[development:python_version >= "3.
|
|
43
|
-
mitmproxy>=
|
|
42
|
+
[development:python_version >= "3.12"]
|
|
43
|
+
mitmproxy>=12.0.0
|
|
44
44
|
|
|
45
45
|
[pandas]
|
|
46
46
|
pyarrow>=14.0.1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|