snowflake-connector-python 4.5.0__tar.gz → 4.6.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.5.0 → snowflake_connector_python-4.6.0}/CONTRIBUTING.md +2 -2
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/DESCRIPTION.md +7 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/PKG-INFO +9 -4
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/README.md +2 -2
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/setup.cfg +1 -3
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/setup.py +66 -0
- snowflake_connector_python-4.6.0/src/snowflake/connector/_connection_identifier_shape.py +136 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_connection.py +42 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_session_manager.py +0 -9
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/connection.py +66 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/telemetry.py +16 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +3 -1
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -1
- snowflake_connector_python-4.6.0/src/snowflake/connector/vendored/urllib3/_version.py +24 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/connection.py +4 -4
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +23 -10
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +5 -1
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +7 -8
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +1 -1
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +2 -2
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/fields.py +14 -14
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +8 -6
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/response.py +35 -22
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +8 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +11 -61
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +5 -11
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake_connector_python.egg-info/PKG-INFO +9 -4
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +1 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake_connector_python.egg-info/requires.txt +0 -3
- snowflake_connector_python-4.5.0/src/snowflake/connector/vendored/urllib3/_version.py +0 -34
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/LICENSE.txt +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/MANIFEST.in +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/NOTICE +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/SECURITY.md +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/pyproject.toml +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/_utils.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/README.md +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_cursor.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_description.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_network.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_result_set.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_time_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/_wif_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_auth.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/oauth_code.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/crl.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/crl_cache.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/cursor.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/interval_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/minicore/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/network.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/os_details.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/platform_detection.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/result_set.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/session_manager.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/token_cache.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake/connector/wif_util.py +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-4.5.0 → snowflake_connector_python-4.6.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/legacy/example/devenv.html).
|
|
31
31
|
|
|
32
32
|
```shell
|
|
33
|
-
tox --devenv
|
|
34
|
-
.
|
|
33
|
+
tox --devenv venv310 -e py310
|
|
34
|
+
. venv310/bin/activate
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
Note: we suggest using the lowest supported Python version for development.
|
|
@@ -7,8 +7,15 @@ 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.6.0(May 28,2026)
|
|
11
|
+
- Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
|
|
12
|
+
- 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.
|
|
13
|
+
- Added one in-band telemetry record per successful login describing which connection-identifier fields the user supplied (`account_provided`, `account_with_region`, `account_org_provided`, `region_provided`, `host_provided`). No hostname or account value is included. This is gated by the existing server-side `CLIENT_TELEMETRY_ENABLED` parameter and can additionally be disabled locally by setting `SF_TELEMETRY_DISABLE_CONNECTION_SHAPE=true`. The telemetry collection is time-boxed and will be removed in a future release.
|
|
14
|
+
- Bumped up vendored `urllib3` to `2.7.0`
|
|
15
|
+
|
|
10
16
|
- v4.5.0(May 12,2026)
|
|
11
17
|
- Fixed `write_pandas` temp stage name collisions (SNOW-3481510). The old PRNG could produce identical name sequences in forked processes (e.g. Notebook kernels), causing `CREATE TEMPORARY STAGE` to fail with "Object already exists".
|
|
18
|
+
- Replaced third-party download URLs in CI scripts and Dockerfiles with Snowflake Artifactory to improve supply-chain security.
|
|
12
19
|
- Fixed a security bug in Okta SAML authentication where `_is_prefix_equal()` compared `url1`'s port against itself instead of `url2`'s port, allowing an attacker to redirect credentials to a different port on the same hostname. Also fixed the default port fallback to use `int` instead of `str` for correct comparison when one URL omits the port.
|
|
13
20
|
- Fixed `executemany` with `paramstyle="pyformat"` to correctly locate the VALUES clause using a balanced-parentheses parser instead of a greedy regex. This fixes incorrect behaviour with nested function calls such as SQLAlchemy `@compiles VARIANT` patterns (e.g. `PARSE_JSON(%(col)s)`) and subquery-form INSERTs (SNOW-298756).
|
|
14
21
|
- Added ECDSA key support (ES256, ES384, ES512) for key-pair authentication.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.6.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -22,7 +22,6 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
22
22
|
Classifier: Operating System :: OS Independent
|
|
23
23
|
Classifier: Programming Language :: Python :: 3
|
|
24
24
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.10
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
27
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -35,7 +34,7 @@ Classifier: Topic :: Software Development
|
|
|
35
34
|
Classifier: Topic :: Software Development :: Libraries
|
|
36
35
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
37
36
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
38
|
-
Requires-Python: >=3.
|
|
37
|
+
Requires-Python: >=3.10
|
|
39
38
|
Description-Content-Type: text/markdown
|
|
40
39
|
License-File: LICENSE.txt
|
|
41
40
|
License-File: NOTICE
|
|
@@ -48,7 +47,6 @@ Requires-Dist: requests<3.0.0,>=2.32.4
|
|
|
48
47
|
Requires-Dist: packaging
|
|
49
48
|
Requires-Dist: charset_normalizer<4,>=2
|
|
50
49
|
Requires-Dist: idna<4,>=3.7
|
|
51
|
-
Requires-Dist: urllib3<2.0.0,>=1.26.5; python_version < "3.10"
|
|
52
50
|
Requires-Dist: certifi>=2024.7.4
|
|
53
51
|
Requires-Dist: typing_extensions<5,>=4.3
|
|
54
52
|
Requires-Dist: filelock<4,>=3.5
|
|
@@ -94,8 +92,15 @@ https://docs.snowflake.com/
|
|
|
94
92
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
95
93
|
|
|
96
94
|
# Release Notes
|
|
95
|
+
- v4.6.0(May 28,2026)
|
|
96
|
+
- Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
|
|
97
|
+
- 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.
|
|
98
|
+
- Added one in-band telemetry record per successful login describing which connection-identifier fields the user supplied (`account_provided`, `account_with_region`, `account_org_provided`, `region_provided`, `host_provided`). No hostname or account value is included. This is gated by the existing server-side `CLIENT_TELEMETRY_ENABLED` parameter and can additionally be disabled locally by setting `SF_TELEMETRY_DISABLE_CONNECTION_SHAPE=true`. The telemetry collection is time-boxed and will be removed in a future release.
|
|
99
|
+
- Bumped up vendored `urllib3` to `2.7.0`
|
|
100
|
+
|
|
97
101
|
- v4.5.0(May 12,2026)
|
|
98
102
|
- Fixed `write_pandas` temp stage name collisions (SNOW-3481510). The old PRNG could produce identical name sequences in forked processes (e.g. Notebook kernels), causing `CREATE TEMPORARY STAGE` to fail with "Object already exists".
|
|
103
|
+
- Replaced third-party download URLs in CI scripts and Dockerfiles with Snowflake Artifactory to improve supply-chain security.
|
|
99
104
|
- Fixed a security bug in Okta SAML authentication where `_is_prefix_equal()` compared `url1`'s port against itself instead of `url2`'s port, allowing an attacker to redirect credentials to a different port on the same hostname. Also fixed the default port fallback to use `int` instead of `str` for correct comparison when one URL omits the port.
|
|
100
105
|
- Fixed `executemany` with `paramstyle="pyformat"` to correctly locate the VALUES clause using a balanced-parentheses parser instead of a greedy regex. This fixes incorrect behaviour with nested function calls such as SQLAlchemy `@compiles VARIANT` patterns (e.g. `PARSE_JSON(%(col)s)`) and subquery-form INSERTs (SNOW-298756).
|
|
101
106
|
- Added ECDSA key support (ES256, ES384, ES512) for key-pair authentication.
|
|
@@ -15,7 +15,7 @@ using the Snowflake JDBC or ODBC drivers.
|
|
|
15
15
|
|
|
16
16
|
The connector has **no** dependencies on JDBC or ODBC.
|
|
17
17
|
It can be installed using ``pip`` on Linux, Mac OSX, and Windows platforms
|
|
18
|
-
where Python 3.
|
|
18
|
+
where Python 3.10.0 (or higher) is installed.
|
|
19
19
|
|
|
20
20
|
Snowflake Documentation is available at:
|
|
21
21
|
https://docs.snowflake.com/
|
|
@@ -42,7 +42,7 @@ Find the `snowflake_connector_python*.whl` package in the `./dist` directory.
|
|
|
42
42
|
### In Docker
|
|
43
43
|
Or use our Dockerized build script `ci/build_docker.sh` and find the built wheel files in `dist/repaired_wheels`.
|
|
44
44
|
|
|
45
|
-
Note: `ci/build_docker.sh` can be used to compile only certain versions, like this: `ci/build_docker.sh "3.
|
|
45
|
+
Note: `ci/build_docker.sh` can be used to compile only certain versions, like this: `ci/build_docker.sh "3.10 3.11"`
|
|
46
46
|
|
|
47
47
|
## Code hygiene and other utilities
|
|
48
48
|
These tools are integrated into `tox` to allow us to easily set them up universally on any computer.
|
|
@@ -20,7 +20,6 @@ classifiers =
|
|
|
20
20
|
Operating System :: OS Independent
|
|
21
21
|
Programming Language :: Python :: 3
|
|
22
22
|
Programming Language :: Python :: 3 :: Only
|
|
23
|
-
Programming Language :: Python :: 3.9
|
|
24
23
|
Programming Language :: Python :: 3.10
|
|
25
24
|
Programming Language :: Python :: 3.11
|
|
26
25
|
Programming Language :: Python :: 3.12
|
|
@@ -41,7 +40,7 @@ project_urls =
|
|
|
41
40
|
Changelog=https://github.com/snowflakedb/snowflake-connector-python/blob/main/DESCRIPTION.md
|
|
42
41
|
|
|
43
42
|
[options]
|
|
44
|
-
python_requires = >=3.
|
|
43
|
+
python_requires = >=3.10
|
|
45
44
|
packages = find_namespace:
|
|
46
45
|
install_requires =
|
|
47
46
|
asn1crypto>0.24.0,<2.0.0
|
|
@@ -53,7 +52,6 @@ install_requires =
|
|
|
53
52
|
packaging
|
|
54
53
|
charset_normalizer>=2,<4
|
|
55
54
|
idna>=3.7,<4
|
|
56
|
-
urllib3>=1.26.5,<2.0.0; python_version < '3.10'
|
|
57
55
|
certifi>=2024.7.4
|
|
58
56
|
typing_extensions>=4.3,<5
|
|
59
57
|
filelock>=3.5,<4
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
+
import platform
|
|
5
|
+
import shutil
|
|
4
6
|
import sys
|
|
5
7
|
import warnings
|
|
6
8
|
|
|
7
9
|
from setuptools import Extension, setup
|
|
10
|
+
from setuptools.command.build_py import build_py
|
|
8
11
|
from setuptools.command.egg_info import egg_info
|
|
9
12
|
|
|
10
13
|
CONNECTOR_SRC_DIR = os.path.join("src", "snowflake", "connector")
|
|
@@ -192,8 +195,71 @@ class SetDefaultInstallationExtras(egg_info):
|
|
|
192
195
|
self.distribution.install_requires += boto_extras
|
|
193
196
|
|
|
194
197
|
|
|
198
|
+
def _minicore_native_subdir():
|
|
199
|
+
"""Return the minicore/<platform> subdir matching the current interpreter.
|
|
200
|
+
|
|
201
|
+
Mirrors snowflake.connector._utils._CoreLoader._get_platform_subdir so the
|
|
202
|
+
build-time pruner and the runtime loader always agree on the layout.
|
|
203
|
+
Returns None when the platform is not recognised (leave tree untouched).
|
|
204
|
+
"""
|
|
205
|
+
system = platform.system().lower()
|
|
206
|
+
machine = platform.machine().lower()
|
|
207
|
+
if machine in ("x86_64", "amd64"):
|
|
208
|
+
arch = "x86_64"
|
|
209
|
+
elif machine in ("aarch64", "arm64"):
|
|
210
|
+
arch = "aarch64"
|
|
211
|
+
elif machine == "ppc64":
|
|
212
|
+
arch = "ppc64"
|
|
213
|
+
else:
|
|
214
|
+
return None
|
|
215
|
+
|
|
216
|
+
if system == "linux":
|
|
217
|
+
libc, _ = platform.libc_ver()
|
|
218
|
+
libc_family = "glibc" if libc == "glibc" else "musl"
|
|
219
|
+
return f"linux_{arch}_{libc_family}"
|
|
220
|
+
if system == "darwin":
|
|
221
|
+
return f"macos_{arch}"
|
|
222
|
+
if system == "windows":
|
|
223
|
+
return f"windows_{arch}"
|
|
224
|
+
if system == "aix":
|
|
225
|
+
return f"aix_{arch}"
|
|
226
|
+
return None
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
class PlatformBuildPy(build_py):
|
|
230
|
+
"""Strip non-native minicore/<platform>/ dirs from the built distribution.
|
|
231
|
+
|
|
232
|
+
The sdist ships minicore binaries for every supported platform. At
|
|
233
|
+
build-time we keep only the one matching the current interpreter so wheels
|
|
234
|
+
and downstream sdist consumers (pip install, Homebrew, conda-forge,
|
|
235
|
+
nixpkgs) end up with a clean single-platform layout.
|
|
236
|
+
"""
|
|
237
|
+
|
|
238
|
+
def run(self):
|
|
239
|
+
super().run()
|
|
240
|
+
self._prune_minicore()
|
|
241
|
+
|
|
242
|
+
def _prune_minicore(self):
|
|
243
|
+
minicore_build_dir = os.path.join(
|
|
244
|
+
self.build_lib, "snowflake", "connector", "minicore"
|
|
245
|
+
)
|
|
246
|
+
if not os.path.isdir(minicore_build_dir):
|
|
247
|
+
return
|
|
248
|
+
keep = _minicore_native_subdir()
|
|
249
|
+
if keep is None:
|
|
250
|
+
return
|
|
251
|
+
for entry in os.listdir(minicore_build_dir):
|
|
252
|
+
full = os.path.join(minicore_build_dir, entry)
|
|
253
|
+
if not os.path.isdir(full) or entry.startswith("__"):
|
|
254
|
+
continue
|
|
255
|
+
if entry == keep:
|
|
256
|
+
continue
|
|
257
|
+
shutil.rmtree(full)
|
|
258
|
+
|
|
259
|
+
|
|
195
260
|
# Update command classes
|
|
196
261
|
cmd_class["egg_info"] = SetDefaultInstallationExtras
|
|
262
|
+
cmd_class["build_py"] = PlatformBuildPy
|
|
197
263
|
|
|
198
264
|
setup(
|
|
199
265
|
version=version,
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Capture user-supplied connection-identifier provenance for in-band telemetry.
|
|
3
|
+
|
|
4
|
+
The shape captured here is consumed by ``SnowflakeConnection._log_connection_identifier_shape``
|
|
5
|
+
and emitted as a single ``client_connection_identifier_shape`` telemetry event
|
|
6
|
+
per successful login. The capture function inspects the raw kwargs passed to
|
|
7
|
+
``SnowflakeConnection.__config`` before any normalization (host inference,
|
|
8
|
+
account stripping of ``.global``, region extraction from dotted account) runs,
|
|
9
|
+
so the shape reflects user intent rather than the final post-normalization
|
|
10
|
+
state of the connection.
|
|
11
|
+
|
|
12
|
+
Removal of this module and the emission it backs is tracked in SNOW-3548350
|
|
13
|
+
(target: 2026-11-30).
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from dataclasses import dataclass
|
|
18
|
+
from typing import Any, Mapping
|
|
19
|
+
|
|
20
|
+
from .telemetry import TelemetryField
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass(frozen=True)
|
|
24
|
+
class ConnectionIdentifierShape:
|
|
25
|
+
"""Provenance of connection-identifier fields the user supplied.
|
|
26
|
+
|
|
27
|
+
All fields describe what the user supplied at the moment of input — they
|
|
28
|
+
reflect intent, not the final post-normalization state of the connection.
|
|
29
|
+
|
|
30
|
+
- ``account_provided``: the user explicitly set the ``account`` parameter
|
|
31
|
+
(via ``connect(account=...)``, kwargs, or ``connections.toml`` merged
|
|
32
|
+
into kwargs before ``__config`` runs).
|
|
33
|
+
- ``account_with_region``: the raw account string the user typed contained
|
|
34
|
+
a dot (e.g. ``"myacct.us-east-1"``), signaling the deprecated
|
|
35
|
+
``account.region`` embedded form. Set only on the raw input.
|
|
36
|
+
- ``account_org_provided``: the raw account string carried a dash in its
|
|
37
|
+
account portion (e.g. ``"myorg-myacct"``), signaling the org-prefixed
|
|
38
|
+
form. Region-portion dashes (e.g. the ``-east-`` in
|
|
39
|
+
``"myacct.us-east-1"``) are intentionally not counted; only the portion
|
|
40
|
+
before the first ``.`` is examined.
|
|
41
|
+
- ``region_provided``: the user explicitly set the ``region`` parameter as
|
|
42
|
+
a distinct kwarg. A region embedded inside a dotted account string is
|
|
43
|
+
NOT ``region_provided``; that's ``account_with_region``.
|
|
44
|
+
- ``host_provided``: the user explicitly set the ``host`` parameter.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
account_provided: bool = False
|
|
48
|
+
account_with_region: bool = False
|
|
49
|
+
account_org_provided: bool = False
|
|
50
|
+
region_provided: bool = False
|
|
51
|
+
host_provided: bool = False
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _is_user_supplied_string(value: Any) -> bool:
|
|
55
|
+
"""A kwarg counts as user-supplied iff it's a non-empty string. Non-string
|
|
56
|
+
truthy values (e.g. an accidentally-passed ``True`` / ``int``) are not
|
|
57
|
+
treated as provided here — the regular ``__config`` validation will warn
|
|
58
|
+
or error on them later, and shape capture is best kept conservative."""
|
|
59
|
+
return isinstance(value, str) and value != ""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def record_input_shape(kwargs: Mapping[str, Any]) -> ConnectionIdentifierShape:
|
|
63
|
+
"""Capture the connection-identifier shape from the raw kwargs that
|
|
64
|
+
``SnowflakeConnection.__config`` receives.
|
|
65
|
+
|
|
66
|
+
Must be invoked before any normalization (the ``setattr`` loop in
|
|
67
|
+
``__config``, the ``construct_hostname`` call for host inference, or any
|
|
68
|
+
``parse_account`` stripping) — otherwise inferred values are
|
|
69
|
+
indistinguishable from user-supplied ones and ``host_provided`` /
|
|
70
|
+
``account_provided`` are no longer trustworthy.
|
|
71
|
+
"""
|
|
72
|
+
account = kwargs.get("account")
|
|
73
|
+
region = kwargs.get("region")
|
|
74
|
+
host = kwargs.get("host")
|
|
75
|
+
|
|
76
|
+
account_provided = _is_user_supplied_string(account)
|
|
77
|
+
account_with_region = False
|
|
78
|
+
account_org_provided = False
|
|
79
|
+
if account_provided:
|
|
80
|
+
# Only a dot at position > 0 splits the string into account / region;
|
|
81
|
+
# a leading dot (pathological input like ``.us-east-1``) leaves the
|
|
82
|
+
# whole string as the account portion. Mirrors gosnowflake's
|
|
83
|
+
# ``recordAccountShape`` (internal/config/dsn.go), which gates on
|
|
84
|
+
# ``i > 0`` so the dash search runs against the full raw value when
|
|
85
|
+
# there is no real account/region split.
|
|
86
|
+
dot_index = account.find(".")
|
|
87
|
+
if dot_index > 0:
|
|
88
|
+
account_with_region = True
|
|
89
|
+
account_portion = account[:dot_index]
|
|
90
|
+
else:
|
|
91
|
+
account_portion = account
|
|
92
|
+
# ``Contains(accountPortion, "-")`` in Go — any dash anywhere in the
|
|
93
|
+
# account portion (including position 0) flips the flag. The
|
|
94
|
+
# region-tail dashes are excluded by virtue of being outside
|
|
95
|
+
# ``account_portion``, not by a position check.
|
|
96
|
+
account_org_provided = "-" in account_portion
|
|
97
|
+
|
|
98
|
+
return ConnectionIdentifierShape(
|
|
99
|
+
account_provided=account_provided,
|
|
100
|
+
account_with_region=account_with_region,
|
|
101
|
+
account_org_provided=account_org_provided,
|
|
102
|
+
region_provided=_is_user_supplied_string(region),
|
|
103
|
+
host_provided=_is_user_supplied_string(host),
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def build_shape_telemetry_message(shape: ConnectionIdentifierShape) -> dict[str, str]:
|
|
108
|
+
"""Build the wire-format payload for the ``client_connection_identifier_shape``
|
|
109
|
+
in-band telemetry event from a captured ``ConnectionIdentifierShape``.
|
|
110
|
+
|
|
111
|
+
Hoisted out of the sync / async ``_log_connection_identifier_shape``
|
|
112
|
+
emitters so both branches stay in lockstep — the five payload keys
|
|
113
|
+
(``account_provided``, ``account_with_region``, ``account_org_provided``,
|
|
114
|
+
``region_provided``, ``host_provided``) and their stringified-lowercase
|
|
115
|
+
boolean values are byte-identical across sibling drivers and must remain
|
|
116
|
+
so. Changing this builder is the only place that affects the wire format.
|
|
117
|
+
|
|
118
|
+
Booleans are stringified as lowercase ``"true"`` / ``"false"`` (matching
|
|
119
|
+
JSON-style boolean text) for cross-driver parity with gosnowflake's
|
|
120
|
+
``strconv.FormatBool`` and the JDBC / Node.js siblings.
|
|
121
|
+
|
|
122
|
+
TODO(SNOW-3548350): remove with the telemetry emission
|
|
123
|
+
(target: 2026-11-30).
|
|
124
|
+
"""
|
|
125
|
+
return {
|
|
126
|
+
TelemetryField.KEY_TYPE.value: TelemetryField.CONNECTION_IDENTIFIER_SHAPE.value,
|
|
127
|
+
TelemetryField.KEY_ACCOUNT_PROVIDED.value: str(shape.account_provided).lower(),
|
|
128
|
+
TelemetryField.KEY_ACCOUNT_WITH_REGION.value: str(
|
|
129
|
+
shape.account_with_region
|
|
130
|
+
).lower(),
|
|
131
|
+
TelemetryField.KEY_ACCOUNT_ORG_PROVIDED.value: str(
|
|
132
|
+
shape.account_org_provided
|
|
133
|
+
).lower(),
|
|
134
|
+
TelemetryField.KEY_REGION_PROVIDED.value: str(shape.region_provided).lower(),
|
|
135
|
+
TelemetryField.KEY_HOST_PROVIDED.value: str(shape.host_provided).lower(),
|
|
136
|
+
}
|
|
@@ -24,9 +24,14 @@ from snowflake.connector import (
|
|
|
24
24
|
ProgrammingError,
|
|
25
25
|
)
|
|
26
26
|
|
|
27
|
+
from .._connection_identifier_shape import (
|
|
28
|
+
ConnectionIdentifierShape,
|
|
29
|
+
build_shape_telemetry_message,
|
|
30
|
+
)
|
|
27
31
|
from .._query_context_cache import QueryContextCache
|
|
28
32
|
from ..compat import IS_LINUX, quote, urlencode
|
|
29
33
|
from ..config_manager import CONFIG_MANAGER, _get_default_connection_params
|
|
34
|
+
from ..connection import _DISABLE_CONNECTION_SHAPE_ENV
|
|
30
35
|
from ..connection import DEFAULT_CONFIGURATION as DEFAULT_CONFIGURATION_SYNC
|
|
31
36
|
from ..connection import SnowflakeConnection as SnowflakeConnectionSync
|
|
32
37
|
from ..connection import _get_private_bytes_from_file
|
|
@@ -783,6 +788,42 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
783
788
|
)
|
|
784
789
|
)
|
|
785
790
|
|
|
791
|
+
async def _log_connection_identifier_shape(self) -> None:
|
|
792
|
+
"""Async counterpart to ``SnowflakeConnectionSync._log_connection_identifier_shape``.
|
|
793
|
+
|
|
794
|
+
The sync implementation reaches for ``self._log_telemetry`` directly,
|
|
795
|
+
which is overridden as an awaitable on the async class — so the sync
|
|
796
|
+
method's call to ``self._log_telemetry(...)`` would return an
|
|
797
|
+
unawaited coroutine here. This override mirrors the sync logic and
|
|
798
|
+
awaits the emission instead.
|
|
799
|
+
|
|
800
|
+
TODO(SNOW-3548350): remove with the telemetry emission
|
|
801
|
+
(target: 2026-11-30).
|
|
802
|
+
"""
|
|
803
|
+
# See sync sibling for the strict (no ``strip``) semantics.
|
|
804
|
+
if os.environ.get(_DISABLE_CONNECTION_SHAPE_ENV, "").lower() == "true":
|
|
805
|
+
logger.debug(
|
|
806
|
+
"connection-identifier-shape telemetry disabled via %s",
|
|
807
|
+
_DISABLE_CONNECTION_SHAPE_ENV,
|
|
808
|
+
)
|
|
809
|
+
return
|
|
810
|
+
shape: ConnectionIdentifierShape | None = getattr(
|
|
811
|
+
self, "_connection_identifier_shape", None
|
|
812
|
+
)
|
|
813
|
+
if shape is None:
|
|
814
|
+
logger.debug(
|
|
815
|
+
"connection-identifier-shape telemetry skipped: shape not captured"
|
|
816
|
+
)
|
|
817
|
+
return
|
|
818
|
+
ts = get_time_millis()
|
|
819
|
+
await self._log_telemetry(
|
|
820
|
+
TelemetryData.from_telemetry_data_dict(
|
|
821
|
+
from_dict=build_shape_telemetry_message(shape),
|
|
822
|
+
timestamp=ts,
|
|
823
|
+
connection=self,
|
|
824
|
+
)
|
|
825
|
+
)
|
|
826
|
+
|
|
786
827
|
async def _next_sequence_counter(self) -> int:
|
|
787
828
|
"""Gets next sequence counter. Used internally."""
|
|
788
829
|
async with self._lock_sequence_counter:
|
|
@@ -1099,6 +1140,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
1099
1140
|
await self.__open_connection()
|
|
1100
1141
|
self._telemetry = TelemetryClient(self._rest)
|
|
1101
1142
|
await self._log_telemetry_imported_packages()
|
|
1143
|
+
await self._log_connection_identifier_shape()
|
|
1102
1144
|
|
|
1103
1145
|
def cursor(self, cursor_class: type[CursorCls] = SnowflakeCursor) -> CursorCls:
|
|
1104
1146
|
logger.debug("cursor")
|
|
@@ -55,15 +55,6 @@ class SnowflakeSSLConnector(aiohttp.TCPConnector):
|
|
|
55
55
|
)
|
|
56
56
|
session_manager = SessionManagerFactory.get_manager()
|
|
57
57
|
self._session_manager = session_manager
|
|
58
|
-
if self._snowflake_ocsp_mode == OCSPMode.FAIL_OPEN and sys.version_info < (
|
|
59
|
-
3,
|
|
60
|
-
10,
|
|
61
|
-
):
|
|
62
|
-
raise RuntimeError(
|
|
63
|
-
"Async Snowflake Python Connector requires Python 3.10+ for OCSP validation related features. "
|
|
64
|
-
"Please open a feature request issue in github if your want to use Python 3.9 or lower: "
|
|
65
|
-
"https://github.com/snowflakedb/snowflake-connector-python/issues/new/choose."
|
|
66
|
-
)
|
|
67
58
|
|
|
68
59
|
super().__init__(*args, **kwargs)
|
|
69
60
|
|
|
@@ -38,6 +38,11 @@ from cryptography.hazmat.primitives import serialization
|
|
|
38
38
|
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey
|
|
39
39
|
|
|
40
40
|
from . import errors
|
|
41
|
+
from ._connection_identifier_shape import (
|
|
42
|
+
ConnectionIdentifierShape,
|
|
43
|
+
build_shape_telemetry_message,
|
|
44
|
+
record_input_shape,
|
|
45
|
+
)
|
|
41
46
|
from ._query_context_cache import QueryContextCache
|
|
42
47
|
from ._utils import (
|
|
43
48
|
_DEFAULT_VALUE_SERVER_DOP_CAP_FOR_FILE_TRANSFER,
|
|
@@ -161,6 +166,13 @@ MAX_CLIENT_PREFETCH_THREADS = 10
|
|
|
161
166
|
MAX_CLIENT_FETCH_THREADS = 1024
|
|
162
167
|
DEFAULT_BACKOFF_POLICY = exponential_backoff()
|
|
163
168
|
|
|
169
|
+
# Local kill switch for the client_connection_identifier_shape in-band
|
|
170
|
+
# telemetry event (case-insensitive "true" disables emission). Sibling
|
|
171
|
+
# drivers use the same env-var name for the same purpose.
|
|
172
|
+
# TODO(SNOW-3548350): remove together with the telemetry emission
|
|
173
|
+
# (target: 2026-11-30).
|
|
174
|
+
_DISABLE_CONNECTION_SHAPE_ENV = "SF_TELEMETRY_DISABLE_CONNECTION_SHAPE"
|
|
175
|
+
|
|
164
176
|
|
|
165
177
|
def DefaultConverterClass() -> type:
|
|
166
178
|
if IS_WINDOWS:
|
|
@@ -699,6 +711,7 @@ class SnowflakeConnection:
|
|
|
699
711
|
self._log_telemetry_imported_packages()
|
|
700
712
|
self._log_nanoarrow_import()
|
|
701
713
|
self._log_minicore_import()
|
|
714
|
+
self._log_connection_identifier_shape()
|
|
702
715
|
# check SNOW-1218851 for long term improvement plan to refactor ocsp code
|
|
703
716
|
atexit.register(self._close_at_exit)
|
|
704
717
|
|
|
@@ -1655,6 +1668,18 @@ class SnowflakeConnection:
|
|
|
1655
1668
|
def __config(self, **kwargs):
|
|
1656
1669
|
"""Sets up parameters in the connection object."""
|
|
1657
1670
|
logger.debug("__config")
|
|
1671
|
+
# Capture connection-identifier shape from the raw user-supplied kwargs
|
|
1672
|
+
# before any normalization (the setattr loop below, construct_hostname
|
|
1673
|
+
# at "account" handling, or parse_account further down) runs.
|
|
1674
|
+
# Idempotent: only set on the first __config call so the original
|
|
1675
|
+
# user intent isn't overwritten by a later reconfigure with derived
|
|
1676
|
+
# values. Consumed by _log_connection_identifier_shape.
|
|
1677
|
+
# TODO(SNOW-3548350): remove with the telemetry emission
|
|
1678
|
+
# (target: 2026-11-30).
|
|
1679
|
+
if getattr(self, "_connection_identifier_shape", None) is None:
|
|
1680
|
+
self._connection_identifier_shape: ConnectionIdentifierShape = (
|
|
1681
|
+
record_input_shape(kwargs)
|
|
1682
|
+
)
|
|
1658
1683
|
# Handle special cases first
|
|
1659
1684
|
if "sequence_counter" in kwargs:
|
|
1660
1685
|
self.sequence_counter = kwargs["sequence_counter"]
|
|
@@ -2588,6 +2613,47 @@ class SnowflakeConnection:
|
|
|
2588
2613
|
)
|
|
2589
2614
|
)
|
|
2590
2615
|
|
|
2616
|
+
def _log_connection_identifier_shape(self):
|
|
2617
|
+
"""Emit a single client_connection_identifier_shape in-band telemetry
|
|
2618
|
+
record describing which connection-identifier fields the user supplied.
|
|
2619
|
+
|
|
2620
|
+
Honors a local environment kill switch
|
|
2621
|
+
``SF_TELEMETRY_DISABLE_CONNECTION_SHAPE`` (case-insensitive ``"true"``)
|
|
2622
|
+
and the post-login ``CLIENT_TELEMETRY_ENABLED`` server parameter (via
|
|
2623
|
+
``self.telemetry_enabled`` consulted inside ``_log_telemetry``).
|
|
2624
|
+
|
|
2625
|
+
TODO(SNOW-3548350): remove together with the supporting
|
|
2626
|
+
``ConnectionIdentifierShape`` capture (target: 2026-11-30).
|
|
2627
|
+
"""
|
|
2628
|
+
# Mirrors gosnowflake's ``strings.EqualFold(os.Getenv(...), "true")``:
|
|
2629
|
+
# case-insensitive ``"true"`` only, with NO surrounding-whitespace
|
|
2630
|
+
# tolerance. Keeping the comparison strict here means a shell
|
|
2631
|
+
# accidentally exporting ``" true "`` (with stray whitespace) leaves
|
|
2632
|
+
# the emission enabled instead of silently disabling it, matching the
|
|
2633
|
+
# Go / Node.js / JDBC siblings byte-for-byte.
|
|
2634
|
+
if os.environ.get(_DISABLE_CONNECTION_SHAPE_ENV, "").lower() == "true":
|
|
2635
|
+
logger.debug(
|
|
2636
|
+
"connection-identifier-shape telemetry disabled via %s",
|
|
2637
|
+
_DISABLE_CONNECTION_SHAPE_ENV,
|
|
2638
|
+
)
|
|
2639
|
+
return
|
|
2640
|
+
shape: ConnectionIdentifierShape | None = getattr(
|
|
2641
|
+
self, "_connection_identifier_shape", None
|
|
2642
|
+
)
|
|
2643
|
+
if shape is None:
|
|
2644
|
+
logger.debug(
|
|
2645
|
+
"connection-identifier-shape telemetry skipped: shape not captured"
|
|
2646
|
+
)
|
|
2647
|
+
return
|
|
2648
|
+
ts = get_time_millis()
|
|
2649
|
+
self._log_telemetry(
|
|
2650
|
+
TelemetryData.from_telemetry_data_dict(
|
|
2651
|
+
from_dict=build_shape_telemetry_message(shape),
|
|
2652
|
+
timestamp=ts,
|
|
2653
|
+
connection=self,
|
|
2654
|
+
)
|
|
2655
|
+
)
|
|
2656
|
+
|
|
2591
2657
|
def _log_telemetry_imported_packages(self) -> None:
|
|
2592
2658
|
if self._log_imported_packages_in_telemetry:
|
|
2593
2659
|
# filter out duplicates caused by submodules
|
|
@@ -44,6 +44,11 @@ class TelemetryField(Enum):
|
|
|
44
44
|
NANOARROW_IMPORT = "nanoarrow_import"
|
|
45
45
|
# multi-statement usage
|
|
46
46
|
MULTI_STATEMENT = "client_multi_statement_query"
|
|
47
|
+
# Connection-identifier shape (see connection_identifier_shape.py).
|
|
48
|
+
# TODO(SNOW-3548350): remove this event type and the five KEY_*_PROVIDED /
|
|
49
|
+
# KEY_ACCOUNT_WITH_REGION keys below together with the emission
|
|
50
|
+
# (target: 2026-11-30).
|
|
51
|
+
CONNECTION_IDENTIFIER_SHAPE = "client_connection_identifier_shape"
|
|
47
52
|
# Keys for telemetry data sent through either in-band or out-of-band telemetry
|
|
48
53
|
KEY_TYPE = "type"
|
|
49
54
|
KEY_SOURCE = "source"
|
|
@@ -54,6 +59,17 @@ class TelemetryField(Enum):
|
|
|
54
59
|
KEY_REASON = "reason"
|
|
55
60
|
KEY_VALUE = "value"
|
|
56
61
|
KEY_EXCEPTION = "exception"
|
|
62
|
+
# Payload keys for the client_connection_identifier_shape event. Values
|
|
63
|
+
# are stringified booleans ("true" / "false") to match the existing
|
|
64
|
+
# in-band telemetry style used by sibling drivers (Go / JDBC). See the
|
|
65
|
+
# docstring on ConnectionIdentifierShape for the semantic meaning.
|
|
66
|
+
# TODO(SNOW-3548350): remove together with CONNECTION_IDENTIFIER_SHAPE
|
|
67
|
+
# above (target: 2026-11-30).
|
|
68
|
+
KEY_ACCOUNT_PROVIDED = "account_provided"
|
|
69
|
+
KEY_ACCOUNT_WITH_REGION = "account_with_region"
|
|
70
|
+
KEY_ACCOUNT_ORG_PROVIDED = "account_org_provided"
|
|
71
|
+
KEY_REGION_PROVIDED = "region_provided"
|
|
72
|
+
KEY_HOST_PROVIDED = "host_provided"
|
|
57
73
|
# Reserved UpperCamelName keys
|
|
58
74
|
KEY_ERROR_NUMBER = "ErrorNumber"
|
|
59
75
|
KEY_ERROR_MESSAGE = "ErrorMessage"
|
|
@@ -6,7 +6,9 @@ from .util.connection import _TYPE_SOCKET_OPTIONS
|
|
|
6
6
|
from .util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT
|
|
7
7
|
from .util.url import Url
|
|
8
8
|
|
|
9
|
-
_TYPE_BODY = typing.Union[
|
|
9
|
+
_TYPE_BODY = typing.Union[
|
|
10
|
+
bytes, typing.IO[typing.Any], typing.Iterable[bytes | str], str
|
|
11
|
+
]
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
class ProxyConfig(typing.NamedTuple):
|
|
@@ -356,7 +356,6 @@ class HTTPHeaderDict(typing.MutableMapping[str, str]):
|
|
|
356
356
|
for key, val in other.items():
|
|
357
357
|
self.add(key, val)
|
|
358
358
|
elif isinstance(other, typing.Iterable):
|
|
359
|
-
other = typing.cast(typing.Iterable[tuple[str, str]], other)
|
|
360
359
|
for key, value in other:
|
|
361
360
|
self.add(key, value)
|
|
362
361
|
elif hasattr(other, "keys") and hasattr(other, "__getitem__"):
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# file generated by vcs-versioning
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"__version__",
|
|
7
|
+
"__version_tuple__",
|
|
8
|
+
"version",
|
|
9
|
+
"version_tuple",
|
|
10
|
+
"__commit_id__",
|
|
11
|
+
"commit_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
version: str
|
|
15
|
+
__version__: str
|
|
16
|
+
__version_tuple__: tuple[int | str, ...]
|
|
17
|
+
version_tuple: tuple[int | str, ...]
|
|
18
|
+
commit_id: str | None
|
|
19
|
+
__commit_id__: str | None
|
|
20
|
+
|
|
21
|
+
__version__ = version = '2.7.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 7, 0)
|
|
23
|
+
|
|
24
|
+
__commit_id__ = commit_id = None
|
|
@@ -540,8 +540,8 @@ class HTTPConnection(_HTTPConnection):
|
|
|
540
540
|
"""
|
|
541
541
|
warnings.warn(
|
|
542
542
|
"HTTPConnection.request_chunked() is deprecated and will be removed "
|
|
543
|
-
"in urllib3
|
|
544
|
-
category=
|
|
543
|
+
"in urllib3 v3.0. Instead use HTTPConnection.request(..., chunked=True).",
|
|
544
|
+
category=FutureWarning,
|
|
545
545
|
stacklevel=2,
|
|
546
546
|
)
|
|
547
547
|
self.request(method, url, body=body, headers=headers, chunked=True)
|
|
@@ -706,9 +706,9 @@ class HTTPSConnection(HTTPConnection):
|
|
|
706
706
|
"""
|
|
707
707
|
warnings.warn(
|
|
708
708
|
"HTTPSConnection.set_cert() is deprecated and will be removed "
|
|
709
|
-
"in urllib3
|
|
709
|
+
"in urllib3 v3.0. Instead provide the parameters to the "
|
|
710
710
|
"HTTPSConnection constructor.",
|
|
711
|
-
category=
|
|
711
|
+
category=FutureWarning,
|
|
712
712
|
stacklevel=2,
|
|
713
713
|
)
|
|
714
714
|
|