snowflake-connector-python 4.2.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.2.0 → snowflake_connector_python-4.4.0}/CONTRIBUTING.md +2 -2
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/DESCRIPTION.md +25 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/MANIFEST.in +1 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/PKG-INFO +31 -6
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/README.md +3 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/setup.cfg +5 -4
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_utils.py +64 -23
- snowflake_connector_python-4.4.0/src/snowflake/connector/aio/README.md +88 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/__init__.py +0 -4
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_connection.py +25 -13
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_wif_util.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_auth.py +5 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/arrow_context.py +8 -4
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_auth.py +13 -2
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_oauth_base.py +21 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/keypair.py +5 -2
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth_code.py +5 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth_credentials.py +3 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/azure_storage_client.py +3 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/config_manager.py +34 -3
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/connection.py +45 -11
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/constants.py +1 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter.py +3 -2
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/crl.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/cursor.py +51 -9
- snowflake_connector_python-4.4.0/src/snowflake/connector/interval_util.py +26 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +14 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +13 -7
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +4 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +3 -3
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +2 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +9 -3
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ocsp_asn1crypto.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ocsp_snowflake.py +36 -11
- snowflake_connector_python-4.4.0/src/snowflake/connector/os_details.py +88 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/platform_detection.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/result_batch.py +90 -13
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/result_set.py +26 -5
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/telemetry.py +1 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/test_util.py +2 -2
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/token_cache.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/util_text.py +18 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_collections.py +8 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_version.py +16 -3
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/connection.py +6 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +1 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +6 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +8 -8
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +6 -8
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +2 -2
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +2 -2
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +4 -4
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +9 -11
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/response.py +276 -103
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/request.py +11 -14
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +16 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +11 -8
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/wif_util.py +1 -1
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/PKG-INFO +31 -6
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +2 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/requires.txt +5 -5
- snowflake_connector_python-4.2.0/src/snowflake/connector/interval_util.py +0 -17
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/LICENSE.txt +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/NOTICE +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/SECURITY.md +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/pyproject.toml +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/setup.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_cursor.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_description.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_network.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_result_set.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_session_manager.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_time_util.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/crl_cache.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/minicore/__init__.py +0 -0
- {snowflake_connector_python-4.2.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.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/network.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/session_manager.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-4.2.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-4.2.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,10 +7,34 @@ 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
|
+
|
|
21
|
+
- v4.3.0(February 12,2026)
|
|
22
|
+
- Ensured proper list conversion - the converter runs to_snowflake on all list elements.
|
|
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.
|
|
24
|
+
- Fix string representation of INTERVAL YEAR and INTERVAL MONTH types.
|
|
25
|
+
- Log a warning when using http protocol for OAuth urls.
|
|
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.
|
|
27
|
+
- Bumped up vendored `urllib3` to `2.6.3`
|
|
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
|
+
|
|
32
|
+
|
|
10
33
|
- v4.2.0(January 07,2026)
|
|
11
34
|
- Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
|
|
12
35
|
- Added support for injecting SPCS service identifier token (`SPCS_TOKEN`) into login requests when present in SPCS containers.
|
|
13
|
-
- Introduced shared library for extended telemetry to identify and prepare testing platform for native rust extensions.
|
|
36
|
+
- Introduced shared library([source code](https://github.com/snowflakedb/universal-driver/tree/main/sf_mini_core)) for extended telemetry to identify and prepare testing platform for native rust extensions.
|
|
37
|
+
- Added `private_key_passphrase` connection parameter for key pair authentication with encrypted private keys.
|
|
14
38
|
|
|
15
39
|
- v4.1.1(December 12,2025)
|
|
16
40
|
- Relaxed pandas dependency requirements for Python below 3.12.
|
|
@@ -4,6 +4,7 @@ include LICENSE.txt
|
|
|
4
4
|
include NOTICE
|
|
5
5
|
include pyproject.toml
|
|
6
6
|
include src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt
|
|
7
|
+
include src/snowflake/connector/aio/README.md
|
|
7
8
|
recursive-include src/snowflake/connector py.typed *.py *.pyx *.js
|
|
8
9
|
recursive-include src/snowflake/connector/vendored LICENSE*
|
|
9
10
|
|
|
@@ -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,10 +94,34 @@ 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
|
+
|
|
108
|
+
- v4.3.0(February 12,2026)
|
|
109
|
+
- Ensured proper list conversion - the converter runs to_snowflake on all list elements.
|
|
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.
|
|
111
|
+
- Fix string representation of INTERVAL YEAR and INTERVAL MONTH types.
|
|
112
|
+
- Log a warning when using http protocol for OAuth urls.
|
|
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.
|
|
114
|
+
- Bumped up vendored `urllib3` to `2.6.3`
|
|
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
|
+
|
|
119
|
+
|
|
96
120
|
- v4.2.0(January 07,2026)
|
|
97
121
|
- Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
|
|
98
122
|
- Added support for injecting SPCS service identifier token (`SPCS_TOKEN`) into login requests when present in SPCS containers.
|
|
99
|
-
- Introduced shared library for extended telemetry to identify and prepare testing platform for native rust extensions.
|
|
123
|
+
- Introduced shared library([source code](https://github.com/snowflakedb/universal-driver/tree/main/sf_mini_core)) for extended telemetry to identify and prepare testing platform for native rust extensions.
|
|
124
|
+
- Added `private_key_passphrase` connection parameter for key pair authentication with encrypted private keys.
|
|
100
125
|
|
|
101
126
|
- v4.1.1(December 12,2025)
|
|
102
127
|
- Relaxed pandas dependency requirements for Python below 3.12.
|
|
@@ -103,6 +103,8 @@ To ensure the authenticity and integrity of the Python package, follow the steps
|
|
|
103
103
|
Verified OK
|
|
104
104
|
````
|
|
105
105
|
|
|
106
|
-
##
|
|
106
|
+
## Notes
|
|
107
107
|
|
|
108
108
|
This library currently does not support GCP regional endpoints. Please ensure that any workloads using through this library do not require support for regional endpoints on GCP. If you have questions about this, please contact [Snowflake Support](https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge).
|
|
109
|
+
|
|
110
|
+
The driver uses Rust library called sf_mini_core, you can find its source code [here](https://github.com/snowflakedb/universal-driver/tree/main/sf_mini_core)
|
|
@@ -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
|
|
@@ -7,9 +7,9 @@ import os
|
|
|
7
7
|
import platform
|
|
8
8
|
import string
|
|
9
9
|
import threading
|
|
10
|
+
import time
|
|
10
11
|
from enum import Enum
|
|
11
12
|
from inspect import stack
|
|
12
|
-
from pathlib import Path
|
|
13
13
|
from random import choice
|
|
14
14
|
from threading import Timer
|
|
15
15
|
from uuid import UUID
|
|
@@ -136,11 +136,23 @@ def get_spcs_token() -> str | None:
|
|
|
136
136
|
return None
|
|
137
137
|
|
|
138
138
|
|
|
139
|
+
class _NanoarrowLoader:
|
|
140
|
+
def __init__(self):
|
|
141
|
+
self._error: Exception | None = None
|
|
142
|
+
|
|
143
|
+
def set_load_error(self, err: Exception):
|
|
144
|
+
self._error = err
|
|
145
|
+
|
|
146
|
+
def get_load_error(self) -> str:
|
|
147
|
+
return str(self._error)
|
|
148
|
+
|
|
149
|
+
|
|
139
150
|
class _CoreLoader:
|
|
140
151
|
def __init__(self):
|
|
141
152
|
self._version: bytes | None = None
|
|
142
153
|
self._error: Exception | None = None
|
|
143
154
|
self._path: str | None = None
|
|
155
|
+
self._load_time: float | None = None
|
|
144
156
|
|
|
145
157
|
@staticmethod
|
|
146
158
|
def _detect_os() -> str:
|
|
@@ -175,26 +187,10 @@ class _CoreLoader:
|
|
|
175
187
|
@staticmethod
|
|
176
188
|
def _detect_libc() -> str:
|
|
177
189
|
"""Detect libc type on Linux (glibc vs musl)."""
|
|
178
|
-
|
|
179
|
-
if
|
|
180
|
-
return "
|
|
181
|
-
|
|
182
|
-
# Check for musl by looking at the libc library
|
|
183
|
-
try:
|
|
184
|
-
import subprocess
|
|
185
|
-
|
|
186
|
-
result = subprocess.run(
|
|
187
|
-
["ldd", "--version"],
|
|
188
|
-
capture_output=True,
|
|
189
|
-
text=True,
|
|
190
|
-
)
|
|
191
|
-
if "musl" in result.stdout.lower() or "musl" in result.stderr.lower():
|
|
192
|
-
return "musl"
|
|
193
|
-
except Exception:
|
|
194
|
-
pass
|
|
195
|
-
|
|
196
|
-
# Default to glibc
|
|
197
|
-
return "glibc"
|
|
190
|
+
lib, _ = platform.libc_ver()
|
|
191
|
+
if lib == "glibc":
|
|
192
|
+
return "glibc"
|
|
193
|
+
return "musl"
|
|
198
194
|
|
|
199
195
|
@staticmethod
|
|
200
196
|
def _get_platform_subdir() -> str:
|
|
@@ -229,7 +225,7 @@ class _CoreLoader:
|
|
|
229
225
|
return "libsf_mini_core.so"
|
|
230
226
|
|
|
231
227
|
@staticmethod
|
|
232
|
-
def _get_core_path()
|
|
228
|
+
def _get_core_path():
|
|
233
229
|
"""Get the path to the minicore library for the current platform."""
|
|
234
230
|
subdir = _CoreLoader._get_platform_subdir()
|
|
235
231
|
lib_name = _CoreLoader._get_lib_name()
|
|
@@ -253,20 +249,49 @@ class _CoreLoader:
|
|
|
253
249
|
core = ctypes.CDLL(str(lib_path))
|
|
254
250
|
return core
|
|
255
251
|
|
|
252
|
+
def get_present_binaries(self) -> str:
|
|
253
|
+
present_binaries = []
|
|
254
|
+
try:
|
|
255
|
+
minicore_files = importlib.resources.files("snowflake.connector.minicore")
|
|
256
|
+
# Iterate through all items in the minicore module
|
|
257
|
+
for item in minicore_files.iterdir():
|
|
258
|
+
# Skip non-platform directories like __pycache__
|
|
259
|
+
if item.is_dir() and not item.name.startswith("__"):
|
|
260
|
+
# This is a platform subdirectory
|
|
261
|
+
platform_name = item.name
|
|
262
|
+
try:
|
|
263
|
+
# List all files in this subdirectory
|
|
264
|
+
for binary_file in item.iterdir():
|
|
265
|
+
if binary_file.is_file():
|
|
266
|
+
# Store as "platform/filename"
|
|
267
|
+
present_binaries.append(
|
|
268
|
+
f"{platform_name}/{binary_file.name}"
|
|
269
|
+
)
|
|
270
|
+
except Exception as e:
|
|
271
|
+
logger.debug(f"Error listing binaries in {platform_name}: {e}")
|
|
272
|
+
except Exception as e:
|
|
273
|
+
logger.debug(f"Error populating present binaries: {e}")
|
|
274
|
+
|
|
275
|
+
return ",".join(present_binaries)
|
|
276
|
+
|
|
256
277
|
def _is_core_disabled(self) -> bool:
|
|
257
278
|
value = str(os.getenv("SNOWFLAKE_DISABLE_MINICORE", None)).lower()
|
|
258
279
|
return value in ["1", "true"]
|
|
259
280
|
|
|
260
281
|
def _load(self) -> None:
|
|
282
|
+
start_time = time.perf_counter()
|
|
261
283
|
try:
|
|
262
284
|
path = self._get_core_path()
|
|
285
|
+
self._path = str(path)
|
|
263
286
|
core = self._load_minicore(path)
|
|
264
287
|
self._register_functions(core)
|
|
265
288
|
self._version = core.sf_core_full_version()
|
|
266
289
|
self._error = None
|
|
267
|
-
self._path = str(path)
|
|
268
290
|
except Exception as err:
|
|
269
291
|
self._error = err
|
|
292
|
+
end_time = time.perf_counter()
|
|
293
|
+
# Store load time in milliseconds (with sub-millisecond precision)
|
|
294
|
+
self._load_time = (end_time - start_time) * 1000
|
|
270
295
|
|
|
271
296
|
def load(self):
|
|
272
297
|
"""Spawn a separate thread to load the minicore library (non-blocking)."""
|
|
@@ -291,8 +316,13 @@ class _CoreLoader:
|
|
|
291
316
|
def get_file_name(self) -> str:
|
|
292
317
|
return self._path
|
|
293
318
|
|
|
319
|
+
def get_load_time(self) -> float | None:
|
|
320
|
+
"""Return the time it took to load the minicore binary in milliseconds."""
|
|
321
|
+
return self._load_time
|
|
322
|
+
|
|
294
323
|
|
|
295
324
|
_core_loader = _CoreLoader()
|
|
325
|
+
_nanoarrow_loader = _NanoarrowLoader()
|
|
296
326
|
|
|
297
327
|
|
|
298
328
|
def build_minicore_usage_for_session() -> dict[str, str | None]:
|
|
@@ -308,5 +338,16 @@ def build_minicore_usage_for_telemetry() -> dict[str, str | None]:
|
|
|
308
338
|
"OS": OPERATING_SYSTEM,
|
|
309
339
|
"OS_VERSION": OS_VERSION,
|
|
310
340
|
"CORE_LOAD_ERROR": _core_loader.get_load_error(),
|
|
341
|
+
"CORE_BINARIES_PRESENT": _core_loader.get_present_binaries(),
|
|
342
|
+
"CORE_LOAD_TIME": _core_loader.get_load_time(),
|
|
311
343
|
**build_minicore_usage_for_session(),
|
|
312
344
|
}
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def build_nanoarrow_usage_for_telemetry() -> dict[str, str | None]:
|
|
348
|
+
return {
|
|
349
|
+
"OS": OPERATING_SYSTEM,
|
|
350
|
+
"OS_VERSION": OS_VERSION,
|
|
351
|
+
"NANOARROW_LOAD_ERROR": _nanoarrow_loader.get_load_error(),
|
|
352
|
+
"ISA": ISA,
|
|
353
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Notice
|
|
2
|
+
|
|
3
|
+
**This component is a Preview feature provided for experimental purposes only.
|
|
4
|
+
It is provided "AS IS" and without warranty of any kind. This module is not
|
|
5
|
+
supported by Snowflake Support. Use of this code is at your own risk and it
|
|
6
|
+
is not intended for production environments.**
|
|
7
|
+
|
|
8
|
+
## Features NOT Supported
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
- ❌ `conn.errorhandler` (get/set) - no support for async errorhandlers
|
|
12
|
+
- ❌ `enable_connection_diag=True` - no connection diagnostic
|
|
13
|
+
- ❌ `authenticator='PAT_WITH_EXTERNAL_SESSION'` - not supported
|
|
14
|
+
- ❌ `mfa_callback` / `password_callback` - not supported
|
|
15
|
+
- ❌ `_probe_connection=True` - no connection diagnostic
|
|
16
|
+
- ❌ Raw binary response handling - not supported
|
|
17
|
+
- ❌ CRL (Certificate Revocation List) - not supported (only OCSP is supported)
|
|
18
|
+
|
|
19
|
+
## Installation & Import
|
|
20
|
+
|
|
21
|
+
Using aio version requires additional installation of `aiohttp` dependency.
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
# Same package, different import
|
|
25
|
+
from snowflake.connector.aio import connect, SnowflakeConnection, DictCursor
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## Connection Patterns
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
# Pattern 1: Async context manager (recommended)
|
|
34
|
+
async with connect(user='...', password='...', account='...') as conn:
|
|
35
|
+
# Use connection
|
|
36
|
+
pass
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# Pattern 2: Direct await
|
|
40
|
+
conn = await connect(user='...', password='...', account='...')
|
|
41
|
+
await conn.close()
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Pattern 3: Manual
|
|
45
|
+
conn = SnowflakeConnection(user='...', password='...', account='...')
|
|
46
|
+
await conn.connect()
|
|
47
|
+
await conn.close()
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## Basic Operations Comparison
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
| Operation | Sync | Async |
|
|
55
|
+
|-----------|------|-------|
|
|
56
|
+
| **Connect** | `conn = connect(...)` | `conn = await connect(...)` |
|
|
57
|
+
| **Create cursor** | `cur = conn.cursor()` | `cur = conn.cursor()` *(same)* |
|
|
58
|
+
| **Execute** | `cur.execute(sql)` | `await cur.execute(sql)` |
|
|
59
|
+
| **Fetch one** | `cur.fetchone()` | `await cur.fetchone()` |
|
|
60
|
+
| **Fetch many** | `cur.fetchmany(n)` | `await cur.fetchmany(n)` |
|
|
61
|
+
| **Fetch all** | `cur.fetchall()` | `await cur.fetchall()` |
|
|
62
|
+
| **Iterate** | `for row in cur:` | `async for row in cur:` |
|
|
63
|
+
| **Commit** | `conn.commit()` | `await conn.commit()` |
|
|
64
|
+
| **Rollback** | `conn.rollback()` | `await conn.rollback()` |
|
|
65
|
+
| **Close** | `conn.close()` | `await conn.close()` |
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## Quick Examples
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
### Simple Query
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
import asyncio
|
|
76
|
+
from snowflake.connector.aio import connect
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
async def query_data():
|
|
80
|
+
async with connect(user='...', password='...', account='...') as conn:
|
|
81
|
+
async with conn.cursor() as cur:
|
|
82
|
+
await cur.execute("SELECT * FROM table WHERE id < %s", (100,))
|
|
83
|
+
async for row in cur:
|
|
84
|
+
print(row)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
asyncio.run(query_data())
|
|
88
|
+
```
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
# temporarily disable aio - SNOW-2905263
|
|
4
|
-
raise ImportError("aio is not supported in this version of the connector")
|
|
5
|
-
|
|
6
|
-
|
|
7
3
|
from functools import wraps
|
|
8
4
|
from typing import Any, Coroutine, Generator, Protocol, TypeVar, runtime_checkable
|
|
9
5
|
|
|
@@ -343,6 +343,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
343
343
|
|
|
344
344
|
elif self._authenticator == KEY_PAIR_AUTHENTICATOR:
|
|
345
345
|
private_key = self._private_key
|
|
346
|
+
private_key_passphrase = self._private_key_passphrase
|
|
346
347
|
|
|
347
348
|
if self._private_key_file:
|
|
348
349
|
private_key = _get_private_bytes_from_file(
|
|
@@ -352,6 +353,7 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
352
353
|
|
|
353
354
|
self.auth_class = AuthByKeyPair(
|
|
354
355
|
private_key=private_key,
|
|
356
|
+
private_key_passphrase=private_key_passphrase,
|
|
355
357
|
timeout=self.login_timeout,
|
|
356
358
|
backoff_generator=self._backoff_generator,
|
|
357
359
|
)
|
|
@@ -930,22 +932,32 @@ class SnowflakeConnection(SnowflakeConnectionSync):
|
|
|
930
932
|
|
|
931
933
|
if self.telemetry_enabled:
|
|
932
934
|
await self._telemetry.close(retry=retry)
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
):
|
|
937
|
-
logger.debug("No async queries seem to be running, deleting session")
|
|
938
|
-
try:
|
|
939
|
-
await self.rest.delete_session(retry=retry)
|
|
940
|
-
except Exception as e:
|
|
935
|
+
|
|
936
|
+
if not self._server_session_keep_alive:
|
|
937
|
+
if await self._all_async_queries_finished():
|
|
941
938
|
logger.debug(
|
|
942
|
-
"
|
|
939
|
+
"No async queries seem to be running, deleting session"
|
|
943
940
|
)
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
941
|
+
try:
|
|
942
|
+
await self.rest.delete_session(retry=retry)
|
|
943
|
+
except Exception as e:
|
|
944
|
+
logger.debug(
|
|
945
|
+
"Exception encountered in deleting session. ignoring...: %s",
|
|
946
|
+
e,
|
|
947
|
+
)
|
|
948
|
+
else:
|
|
949
|
+
logger.debug(
|
|
950
|
+
"There are {} async queries still running, not deleting session".format(
|
|
951
|
+
len(self._async_sfqids)
|
|
952
|
+
)
|
|
948
953
|
)
|
|
954
|
+
else:
|
|
955
|
+
logger.info(
|
|
956
|
+
"Parameter server_session_keep_alive was set to True - skipping session logout. "
|
|
957
|
+
"If there are any not-finished queries in the current session (session_id: %s) - "
|
|
958
|
+
"they will continue to live in Snowflake and consume credits until they finish. "
|
|
959
|
+
"To cancel them use Monitoring tab in Snowsight or plain SQL.",
|
|
960
|
+
self.session_id,
|
|
949
961
|
)
|
|
950
962
|
await self.rest.close()
|
|
951
963
|
self._rest = None
|
|
@@ -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
|
{
|
|
@@ -165,10 +165,14 @@ class ArrowConverterContext:
|
|
|
165
165
|
def DECFLOAT_to_numpy_float64(self, exponent: int, significand: bytes) -> float64:
|
|
166
166
|
return numpy.float64(self.DECFLOAT_to_decimal(exponent, significand))
|
|
167
167
|
|
|
168
|
-
def INTERVAL_YEAR_MONTH_to_str(self, months: int) -> str:
|
|
169
|
-
return interval_year_month_to_string(months)
|
|
170
|
-
|
|
171
|
-
def INTERVAL_YEAR_MONTH_to_numpy_timedelta(
|
|
168
|
+
def INTERVAL_YEAR_MONTH_to_str(self, months: int, scale: int) -> str:
|
|
169
|
+
return interval_year_month_to_string(months, scale)
|
|
170
|
+
|
|
171
|
+
def INTERVAL_YEAR_MONTH_to_numpy_timedelta(
|
|
172
|
+
self, months: int, scale: int
|
|
173
|
+
) -> timedelta64:
|
|
174
|
+
if scale == 1: # interval year
|
|
175
|
+
return numpy.timedelta64(months // 12, "Y")
|
|
172
176
|
return numpy.timedelta64(months, "M")
|
|
173
177
|
|
|
174
178
|
def INTERVAL_DAY_TIME_int_to_numpy_timedelta(self, nanos: int) -> timedelta64:
|
|
@@ -56,12 +56,14 @@ from ..network import (
|
|
|
56
56
|
PYTHON_CONNECTOR_USER_AGENT,
|
|
57
57
|
ReauthenticationRequest,
|
|
58
58
|
)
|
|
59
|
+
from ..os_details import get_os_details
|
|
59
60
|
from ..platform_detection import detect_platforms
|
|
60
61
|
from ..session_manager import BaseHttpConfig, HttpConfig
|
|
61
62
|
from ..session_manager import SessionManager as SyncSessionManager
|
|
62
63
|
from ..session_manager import SessionManagerFactory
|
|
63
64
|
from ..sqlstate import SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED
|
|
64
65
|
from ..token_cache import TokenCache, TokenKey, TokenType
|
|
66
|
+
from ..util_text import expand_tilde
|
|
65
67
|
from ..version import VERSION
|
|
66
68
|
from .no_auth import AuthNoAuth
|
|
67
69
|
from .oauth import AuthByOAuth
|
|
@@ -87,6 +89,7 @@ AUTHENTICATION_REQUEST_KEY_WHITELIST = {
|
|
|
87
89
|
"CLIENT_ENVIRONMENT",
|
|
88
90
|
"EXT_AUTHN_DUO_METHOD",
|
|
89
91
|
"LOGIN_NAME",
|
|
92
|
+
"SECONDARY_ROLES",
|
|
90
93
|
"SESSION_PARAMETERS",
|
|
91
94
|
"SVN_REVISION",
|
|
92
95
|
}
|
|
@@ -159,6 +162,7 @@ class Auth:
|
|
|
159
162
|
platform_detection_timeout_seconds=platform_detection_timeout_seconds,
|
|
160
163
|
session_manager=session_manager.clone(max_retries=0),
|
|
161
164
|
),
|
|
165
|
+
"OS_DETAILS": get_os_details(),
|
|
162
166
|
**build_minicore_usage_for_session(),
|
|
163
167
|
},
|
|
164
168
|
},
|
|
@@ -259,6 +263,11 @@ class Auth:
|
|
|
259
263
|
if session_parameters:
|
|
260
264
|
body["data"]["SESSION_PARAMETERS"] = session_parameters
|
|
261
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
|
+
|
|
262
271
|
logger.debug(
|
|
263
272
|
"body['data']: %s",
|
|
264
273
|
{
|
|
@@ -633,14 +642,16 @@ def get_token_from_private_key(
|
|
|
633
642
|
from . import AuthByKeyPair
|
|
634
643
|
|
|
635
644
|
auth_instance = AuthByKeyPair(
|
|
636
|
-
private_key,
|
|
637
|
-
DAY_IN_SECONDS,
|
|
645
|
+
private_key=private_key,
|
|
646
|
+
lifetime_in_seconds=DAY_IN_SECONDS,
|
|
638
647
|
) # token valid for 24 hours
|
|
639
648
|
return auth_instance.prepare(account=account, user=user)
|
|
640
649
|
|
|
641
650
|
|
|
642
651
|
def get_public_key_fingerprint(private_key_file: str, password: str) -> str:
|
|
643
652
|
"""Helper function to generate the public key fingerprint from the private key file"""
|
|
653
|
+
private_key_file = expand_tilde(private_key_file)
|
|
654
|
+
|
|
644
655
|
with open(private_key_file, "rb") as key:
|
|
645
656
|
p_key = load_pem_private_key(
|
|
646
657
|
key.read(), password=password.encode(), backend=default_backend()
|
|
@@ -428,6 +428,27 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
|
|
|
428
428
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
|
429
429
|
}
|
|
430
430
|
|
|
431
|
+
@staticmethod
|
|
432
|
+
def _log_if_http_in_use(url: str) -> None:
|
|
433
|
+
"""Log a warning if the URL uses insecure HTTP protocol.
|
|
434
|
+
|
|
435
|
+
Args:
|
|
436
|
+
url: The URL to check for HTTP usage
|
|
437
|
+
"""
|
|
438
|
+
try:
|
|
439
|
+
parsed_url = urllib.parse.urlparse(url)
|
|
440
|
+
if parsed_url.scheme == "http":
|
|
441
|
+
logger.warning(
|
|
442
|
+
"OAuth URL uses insecure HTTP protocol: %s",
|
|
443
|
+
SecretDetector.mask_secrets(url),
|
|
444
|
+
)
|
|
445
|
+
except Exception as e:
|
|
446
|
+
logger.warning(
|
|
447
|
+
"Cannot parse URL: %s. %s",
|
|
448
|
+
SecretDetector.mask_secrets(url),
|
|
449
|
+
e,
|
|
450
|
+
)
|
|
451
|
+
|
|
431
452
|
@staticmethod
|
|
432
453
|
def _resolve_proxy_url(
|
|
433
454
|
connection: SnowflakeConnection, request_url: str
|
|
@@ -40,6 +40,7 @@ class AuthByKeyPair(AuthByPlugin):
|
|
|
40
40
|
def __init__(
|
|
41
41
|
self,
|
|
42
42
|
private_key: bytes | str | RSAPrivateKey,
|
|
43
|
+
private_key_passphrase: bytes | None = None,
|
|
43
44
|
lifetime_in_seconds: int = LIFETIME,
|
|
44
45
|
**kwargs,
|
|
45
46
|
) -> None:
|
|
@@ -72,6 +73,7 @@ class AuthByKeyPair(AuthByPlugin):
|
|
|
72
73
|
)
|
|
73
74
|
|
|
74
75
|
self._private_key: bytes | str | RSAPrivateKey | None = private_key
|
|
76
|
+
self._private_key_passphrase: bytes | None = private_key_passphrase
|
|
75
77
|
self._jwt_token = ""
|
|
76
78
|
self._jwt_token_exp = 0
|
|
77
79
|
self._lifetime = timedelta(
|
|
@@ -116,13 +118,14 @@ class AuthByKeyPair(AuthByPlugin):
|
|
|
116
118
|
try:
|
|
117
119
|
private_key = load_der_private_key(
|
|
118
120
|
data=self._private_key,
|
|
119
|
-
password=
|
|
121
|
+
password=self._private_key_passphrase,
|
|
120
122
|
backend=default_backend(),
|
|
121
123
|
)
|
|
122
124
|
except Exception as e:
|
|
123
125
|
raise ProgrammingError(
|
|
124
126
|
msg=f"Failed to load private key: {e}\nPlease provide a valid "
|
|
125
|
-
"
|
|
127
|
+
"rsa private key in DER format as bytes object. If the key is "
|
|
128
|
+
"encrypted, provide the passphrase via private_key_passphrase",
|
|
126
129
|
errno=ER_INVALID_PRIVATE_KEY,
|
|
127
130
|
)
|
|
128
131
|
|