snowflake-connector-python 3.14.1__tar.gz → 3.16.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-3.14.1 → snowflake_connector_python-3.16.0}/DESCRIPTION.md +22 -2
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/MANIFEST.in +1 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/PKG-INFO +26 -6
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/setup.cfg +3 -3
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/setup.py +1 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/arrow_context.py +39 -1
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/_oauth_base.py +34 -1
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/by_plugin.py +1 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/oauth_code.py +96 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/oauth_credentials.py +2 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/webbrowser.py +4 -3
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/bind_upload_agent.py +6 -2
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/connection.py +61 -56
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/connection_diagnostic.py +1 -1
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/cursor.py +6 -2
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/direct_file_operation_utils.py +31 -3
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/errorcode.py +1 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_transfer_agent.py +20 -8
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/gcs_storage_client.py +1 -1
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +31 -0
- snowflake_connector_python-3.16.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +71 -0
- snowflake_connector_python-3.16.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +56 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +2 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +2 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/network.py +62 -4
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ocsp_asn1crypto.py +10 -3
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/pandas_tools.py +57 -44
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/result_batch.py +40 -7
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/result_set.py +40 -8
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/dump_ocsp_response.py +38 -21
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/wif_util.py +84 -4
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/PKG-INFO +26 -6
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +2 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/requires.txt +3 -3
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/LICENSE.txt +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/NOTICE +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/README.md +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/SECURITY.md +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/pyproject.toml +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/_utils.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/_http_server.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/no_auth.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/pat.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/constants.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/errors.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_lock.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/token_cache.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/url_util.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/util_text.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-3.14.1 → snowflake_connector_python-3.16.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -7,8 +7,28 @@ 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
|
-
- v3.
|
|
11
|
-
-
|
|
10
|
+
- v3.16.0(July 04,2025)
|
|
11
|
+
- Bumped numpy dependency from <2.1.0 to <=2.2.4.
|
|
12
|
+
- Added Windows support for Python 3.13.
|
|
13
|
+
- Added `bulk_upload_chunks` parameter to `write_pandas` function. Setting this parameter to True changes the behaviour of write_pandas function to first write all the data chunks to the local disk and then perform the wildcard upload of the chunks folder to the stage. In default behaviour the chunks are being saved, uploaded and deleted one by one.
|
|
14
|
+
- Added support for new authentication mechanism PAT with external session ID.
|
|
15
|
+
- Added `client_fetch_use_mp` parameter that enables multiprocessed fetching of result batches.
|
|
16
|
+
- Added basic arrow support for Interval types.
|
|
17
|
+
- Fixed `write_pandas` special characters usage in the location name.
|
|
18
|
+
- Fixed usage of `use_virtual_url` when building the location for gcs storage client.
|
|
19
|
+
- Added support for Snowflake OAuth for local applications.
|
|
20
|
+
|
|
21
|
+
- v3.15.0(Apr 29,2025)
|
|
22
|
+
- Bumped up min boto and botocore version to 1.24.
|
|
23
|
+
- OCSP: terminate certificates chain traversal if a trusted certificate already reached.
|
|
24
|
+
- Added new authentication methods support for programmatic access tokens (PATs), OAuth 2.0 Authorization Code Flow, OAuth 2.0 Client Credentials Flow, and OAuth Token caching.
|
|
25
|
+
- For OAuth 2.0 Authorization Code Flow:
|
|
26
|
+
- Added the `oauth_client_id`, `oauth_client_secret`, `oauth_authorization_url`, `oauth_token_request_url`, `oauth_redirect_uri`, `oauth_scope`, `oauth_disable_pkce`, `oauth_enable_refresh_tokens` and `oauth_enable_single_use_refresh_tokens` parameters.
|
|
27
|
+
- Added the `OAUTH_AUTHORIZATION_CODE` value for the parameter authenticator.
|
|
28
|
+
- For OAuth 2.0 Client Credentials Flow:
|
|
29
|
+
- Added the `oauth_client_id`, `oauth_client_secret`, `oauth_token_request_url`, and `oauth_scope` parameters.
|
|
30
|
+
- Added the `OAUTH_CLIENT_CREDENTIALS` value for the parameter authenticator.
|
|
31
|
+
- For OAuth Token caching: Passing a username to driver configuration is required, and the `client_store_temporary_credential property` is to be set to `true`.
|
|
12
32
|
|
|
13
33
|
- v3.14.1(April 21, 2025)
|
|
14
34
|
- Added support for Python 3.13.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.16.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -39,8 +39,8 @@ Description-Content-Type: text/markdown
|
|
|
39
39
|
License-File: LICENSE.txt
|
|
40
40
|
License-File: NOTICE
|
|
41
41
|
Requires-Dist: asn1crypto<2.0.0,>0.24.0
|
|
42
|
-
Requires-Dist: boto3>=1.
|
|
43
|
-
Requires-Dist: botocore>=1.
|
|
42
|
+
Requires-Dist: boto3>=1.24
|
|
43
|
+
Requires-Dist: botocore>=1.24
|
|
44
44
|
Requires-Dist: cffi<2.0.0,>=1.9
|
|
45
45
|
Requires-Dist: cryptography>=3.1.0
|
|
46
46
|
Requires-Dist: pyOpenSSL<26.0.0,>=22.0.0
|
|
@@ -61,7 +61,7 @@ Provides-Extra: development
|
|
|
61
61
|
Requires-Dist: Cython; extra == "development"
|
|
62
62
|
Requires-Dist: coverage; extra == "development"
|
|
63
63
|
Requires-Dist: more-itertools; extra == "development"
|
|
64
|
-
Requires-Dist: numpy
|
|
64
|
+
Requires-Dist: numpy<=2.2.4; extra == "development"
|
|
65
65
|
Requires-Dist: pendulum!=2.1.1; extra == "development"
|
|
66
66
|
Requires-Dist: pexpect; extra == "development"
|
|
67
67
|
Requires-Dist: pytest<7.5.0; extra == "development"
|
|
@@ -86,8 +86,28 @@ https://docs.snowflake.com/
|
|
|
86
86
|
Source code is also available at: https://github.com/snowflakedb/snowflake-connector-python
|
|
87
87
|
|
|
88
88
|
# Release Notes
|
|
89
|
-
- v3.
|
|
90
|
-
-
|
|
89
|
+
- v3.16.0(July 04,2025)
|
|
90
|
+
- Bumped numpy dependency from <2.1.0 to <=2.2.4.
|
|
91
|
+
- Added Windows support for Python 3.13.
|
|
92
|
+
- Added `bulk_upload_chunks` parameter to `write_pandas` function. Setting this parameter to True changes the behaviour of write_pandas function to first write all the data chunks to the local disk and then perform the wildcard upload of the chunks folder to the stage. In default behaviour the chunks are being saved, uploaded and deleted one by one.
|
|
93
|
+
- Added support for new authentication mechanism PAT with external session ID.
|
|
94
|
+
- Added `client_fetch_use_mp` parameter that enables multiprocessed fetching of result batches.
|
|
95
|
+
- Added basic arrow support for Interval types.
|
|
96
|
+
- Fixed `write_pandas` special characters usage in the location name.
|
|
97
|
+
- Fixed usage of `use_virtual_url` when building the location for gcs storage client.
|
|
98
|
+
- Added support for Snowflake OAuth for local applications.
|
|
99
|
+
|
|
100
|
+
- v3.15.0(Apr 29,2025)
|
|
101
|
+
- Bumped up min boto and botocore version to 1.24.
|
|
102
|
+
- OCSP: terminate certificates chain traversal if a trusted certificate already reached.
|
|
103
|
+
- Added new authentication methods support for programmatic access tokens (PATs), OAuth 2.0 Authorization Code Flow, OAuth 2.0 Client Credentials Flow, and OAuth Token caching.
|
|
104
|
+
- For OAuth 2.0 Authorization Code Flow:
|
|
105
|
+
- Added the `oauth_client_id`, `oauth_client_secret`, `oauth_authorization_url`, `oauth_token_request_url`, `oauth_redirect_uri`, `oauth_scope`, `oauth_disable_pkce`, `oauth_enable_refresh_tokens` and `oauth_enable_single_use_refresh_tokens` parameters.
|
|
106
|
+
- Added the `OAUTH_AUTHORIZATION_CODE` value for the parameter authenticator.
|
|
107
|
+
- For OAuth 2.0 Client Credentials Flow:
|
|
108
|
+
- Added the `oauth_client_id`, `oauth_client_secret`, `oauth_token_request_url`, and `oauth_scope` parameters.
|
|
109
|
+
- Added the `OAUTH_CLIENT_CREDENTIALS` value for the parameter authenticator.
|
|
110
|
+
- For OAuth Token caching: Passing a username to driver configuration is required, and the `client_store_temporary_credential property` is to be set to `true`.
|
|
91
111
|
|
|
92
112
|
- v3.14.1(April 21, 2025)
|
|
93
113
|
- Added support for Python 3.13.
|
|
@@ -44,8 +44,8 @@ python_requires = >=3.9
|
|
|
44
44
|
packages = find_namespace:
|
|
45
45
|
install_requires =
|
|
46
46
|
asn1crypto>0.24.0,<2.0.0
|
|
47
|
-
boto3>=1.
|
|
48
|
-
botocore>=1.
|
|
47
|
+
boto3>=1.24
|
|
48
|
+
botocore>=1.24
|
|
49
49
|
cffi>=1.9,<2.0.0
|
|
50
50
|
cryptography>=3.1.0
|
|
51
51
|
pyOpenSSL>=22.0.0,<26.0.0
|
|
@@ -83,7 +83,7 @@ development =
|
|
|
83
83
|
Cython
|
|
84
84
|
coverage
|
|
85
85
|
more-itertools
|
|
86
|
-
numpy
|
|
86
|
+
numpy<=2.2.4
|
|
87
87
|
pendulum!=2.1.1
|
|
88
88
|
pexpect
|
|
89
89
|
pytest<7.5.0
|
|
@@ -103,6 +103,7 @@ if _ABLE_TO_COMPILE_EXTENSIONS and not SNOWFLAKE_DISABLE_COMPILE_ARROW_EXTENSION
|
|
|
103
103
|
"FixedSizeListConverter.cpp",
|
|
104
104
|
"FloatConverter.cpp",
|
|
105
105
|
"IntConverter.cpp",
|
|
106
|
+
"IntervalConverter.cpp",
|
|
106
107
|
"MapConverter.cpp",
|
|
107
108
|
"ObjectConverter.cpp",
|
|
108
109
|
"SnowflakeType.cpp",
|
|
@@ -15,7 +15,7 @@ from .constants import PARAMETER_TIMEZONE
|
|
|
15
15
|
from .converter import _generate_tzinfo_from_tzoffset
|
|
16
16
|
|
|
17
17
|
if TYPE_CHECKING:
|
|
18
|
-
from numpy import datetime64, float64, int64
|
|
18
|
+
from numpy import datetime64, float64, int64, timedelta64
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
try:
|
|
@@ -163,3 +163,41 @@ class ArrowConverterContext:
|
|
|
163
163
|
|
|
164
164
|
def DECFLOAT_to_numpy_float64(self, exponent: int, significand: bytes) -> float64:
|
|
165
165
|
return numpy.float64(self.DECFLOAT_to_decimal(exponent, significand))
|
|
166
|
+
|
|
167
|
+
def INTERVAL_YEAR_MONTH_to_numpy_timedelta(self, months: int) -> timedelta64:
|
|
168
|
+
return numpy.timedelta64(months, "M")
|
|
169
|
+
|
|
170
|
+
def INTERVAL_DAY_TIME_int_to_numpy_timedelta(self, nanos: int) -> timedelta64:
|
|
171
|
+
return numpy.timedelta64(nanos, "ns")
|
|
172
|
+
|
|
173
|
+
def INTERVAL_DAY_TIME_int_to_timedelta(self, nanos: int) -> timedelta:
|
|
174
|
+
# Python timedelta only supports microsecond precision. We receive value in
|
|
175
|
+
# nanoseconds.
|
|
176
|
+
return timedelta(microseconds=nanos // 1000)
|
|
177
|
+
|
|
178
|
+
def INTERVAL_DAY_TIME_decimal_to_numpy_timedelta(self, value: bytes) -> timedelta64:
|
|
179
|
+
# Snowflake supports up to 9 digits leading field precision for the day-time
|
|
180
|
+
# interval. That when represented in nanoseconds can not be stored in a 64-bit
|
|
181
|
+
# integer. So we send these as Decimal128 from server to client.
|
|
182
|
+
# Arrow uses little-endian by default.
|
|
183
|
+
# https://arrow.apache.org/docs/format/Columnar.html#byte-order-endianness
|
|
184
|
+
nanos = int.from_bytes(value, byteorder="little", signed=True)
|
|
185
|
+
# Numpy timedelta only supports up to 64-bit integers, so we need to change the
|
|
186
|
+
# unit to milliseconds to avoid overflow.
|
|
187
|
+
# Max value received from server
|
|
188
|
+
# = 10**9 * NANOS_PER_DAY - 1
|
|
189
|
+
# = 86399999999999999999999 nanoseconds
|
|
190
|
+
# = 86399999999999999 milliseconds
|
|
191
|
+
# math.log2(86399999999999999) = 56.3 < 64
|
|
192
|
+
return numpy.timedelta64(nanos // 1_000_000, "ms")
|
|
193
|
+
|
|
194
|
+
def INTERVAL_DAY_TIME_decimal_to_timedelta(self, value: bytes) -> timedelta:
|
|
195
|
+
# Snowflake supports up to 9 digits leading field precision for the day-time
|
|
196
|
+
# interval. That when represented in nanoseconds can not be stored in a 64-bit
|
|
197
|
+
# integer. So we send these as Decimal128 from server to client.
|
|
198
|
+
# Arrow uses little-endian by default.
|
|
199
|
+
# https://arrow.apache.org/docs/format/Columnar.html#byte-order-endianness
|
|
200
|
+
nanos = int.from_bytes(value, byteorder="little", signed=True)
|
|
201
|
+
# Python timedelta only supports microsecond precision. We receive value in
|
|
202
|
+
# nanoseconds.
|
|
203
|
+
return timedelta(microseconds=nanos // 1000)
|
|
@@ -12,7 +12,13 @@ from abc import ABC, abstractmethod
|
|
|
12
12
|
from typing import TYPE_CHECKING, Any
|
|
13
13
|
from urllib.error import HTTPError, URLError
|
|
14
14
|
|
|
15
|
-
from ..errorcode import
|
|
15
|
+
from ..errorcode import (
|
|
16
|
+
ER_FAILED_TO_REQUEST,
|
|
17
|
+
ER_IDP_CONNECTION_ERROR,
|
|
18
|
+
ER_NO_CLIENT_ID,
|
|
19
|
+
ER_NO_CLIENT_SECRET,
|
|
20
|
+
)
|
|
21
|
+
from ..errors import Error, ProgrammingError
|
|
16
22
|
from ..network import OAUTH_AUTHENTICATOR
|
|
17
23
|
from ..secret_detector import SecretDetector
|
|
18
24
|
from ..token_cache import TokenCache, TokenKey, TokenType
|
|
@@ -185,6 +191,33 @@ class AuthByOAuthBase(AuthByPlugin, _OAuthTokensMixin, ABC):
|
|
|
185
191
|
"""Returns the token."""
|
|
186
192
|
return self._access_token or ""
|
|
187
193
|
|
|
194
|
+
@staticmethod
|
|
195
|
+
def _validate_client_credentials_present(
|
|
196
|
+
client_id: str, client_secret: str, connection: SnowflakeConnection
|
|
197
|
+
) -> tuple[str, str]:
|
|
198
|
+
if client_id is None or client_id == "":
|
|
199
|
+
Error.errorhandler_wrapper(
|
|
200
|
+
connection,
|
|
201
|
+
None,
|
|
202
|
+
ProgrammingError,
|
|
203
|
+
{
|
|
204
|
+
"msg": "Oauth code flow requirement 'client_id' is empty",
|
|
205
|
+
"errno": ER_NO_CLIENT_ID,
|
|
206
|
+
},
|
|
207
|
+
)
|
|
208
|
+
if client_secret is None or client_secret == "":
|
|
209
|
+
Error.errorhandler_wrapper(
|
|
210
|
+
connection,
|
|
211
|
+
None,
|
|
212
|
+
ProgrammingError,
|
|
213
|
+
{
|
|
214
|
+
"msg": "Oauth code flow requirement 'client_secret' is empty",
|
|
215
|
+
"errno": ER_NO_CLIENT_SECRET,
|
|
216
|
+
},
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
return client_id, client_secret
|
|
220
|
+
|
|
188
221
|
def reauthenticate(
|
|
189
222
|
self,
|
|
190
223
|
*,
|
|
@@ -18,11 +18,13 @@ from typing import TYPE_CHECKING, Any
|
|
|
18
18
|
from ..compat import parse_qs, urlparse, urlsplit
|
|
19
19
|
from ..constants import OAUTH_TYPE_AUTHORIZATION_CODE
|
|
20
20
|
from ..errorcode import (
|
|
21
|
+
ER_INVALID_VALUE,
|
|
21
22
|
ER_OAUTH_CALLBACK_ERROR,
|
|
22
23
|
ER_OAUTH_SERVER_TIMEOUT,
|
|
23
24
|
ER_OAUTH_STATE_CHANGED,
|
|
24
25
|
ER_UNABLE_TO_OPEN_BROWSER,
|
|
25
26
|
)
|
|
27
|
+
from ..errors import Error, ProgrammingError
|
|
26
28
|
from ..token_cache import TokenCache
|
|
27
29
|
from ._http_server import AuthHttpServer
|
|
28
30
|
from ._oauth_base import AuthByOAuthBase
|
|
@@ -45,6 +47,8 @@ def _get_query_params(
|
|
|
45
47
|
class AuthByOauthCode(AuthByOAuthBase):
|
|
46
48
|
"""Authenticates user by OAuth code flow."""
|
|
47
49
|
|
|
50
|
+
_LOCAL_APPLICATION_CLIENT_CREDENTIALS = "LOCAL_APPLICATION"
|
|
51
|
+
|
|
48
52
|
def __init__(
|
|
49
53
|
self,
|
|
50
54
|
application: str,
|
|
@@ -54,12 +58,27 @@ class AuthByOauthCode(AuthByOAuthBase):
|
|
|
54
58
|
token_request_url: str,
|
|
55
59
|
redirect_uri: str,
|
|
56
60
|
scope: str,
|
|
61
|
+
host: str,
|
|
57
62
|
pkce_enabled: bool = True,
|
|
58
63
|
token_cache: TokenCache | None = None,
|
|
59
64
|
refresh_token_enabled: bool = False,
|
|
60
65
|
external_browser_timeout: int | None = None,
|
|
66
|
+
enable_single_use_refresh_tokens: bool = False,
|
|
67
|
+
connection: SnowflakeConnection | None = None,
|
|
61
68
|
**kwargs,
|
|
62
69
|
) -> None:
|
|
70
|
+
authentication_url, redirect_uri = self._validate_oauth_code_uris(
|
|
71
|
+
authentication_url, redirect_uri, connection
|
|
72
|
+
)
|
|
73
|
+
client_id, client_secret = self._validate_client_credentials_with_defaults(
|
|
74
|
+
client_id,
|
|
75
|
+
client_secret,
|
|
76
|
+
authentication_url,
|
|
77
|
+
token_request_url,
|
|
78
|
+
host,
|
|
79
|
+
connection,
|
|
80
|
+
)
|
|
81
|
+
|
|
63
82
|
super().__init__(
|
|
64
83
|
client_id=client_id,
|
|
65
84
|
client_secret=client_secret,
|
|
@@ -81,6 +100,7 @@ class AuthByOauthCode(AuthByOAuthBase):
|
|
|
81
100
|
logger.debug("oauth pkce is going to be used")
|
|
82
101
|
self._verifier: str | None = None
|
|
83
102
|
self._external_browser_timeout = external_browser_timeout
|
|
103
|
+
self._enable_single_use_refresh_tokens = enable_single_use_refresh_tokens
|
|
84
104
|
|
|
85
105
|
def _get_oauth_type_id(self) -> str:
|
|
86
106
|
return OAUTH_TYPE_AUTHORIZATION_CODE
|
|
@@ -296,6 +316,8 @@ You can close this window now and go back where you started from.
|
|
|
296
316
|
"code": code,
|
|
297
317
|
"redirect_uri": callback_server.url,
|
|
298
318
|
}
|
|
319
|
+
if self._enable_single_use_refresh_tokens:
|
|
320
|
+
fields["enable_single_use_refresh_tokens"] = "true"
|
|
299
321
|
if self._pkce_enabled:
|
|
300
322
|
assert self._verifier is not None
|
|
301
323
|
fields["code_verifier"] = self._verifier
|
|
@@ -381,3 +403,77 @@ You can close this window now and go back where you started from.
|
|
|
381
403
|
},
|
|
382
404
|
)
|
|
383
405
|
return parsed.get("code", [None])[0], parsed.get("state", [None])[0]
|
|
406
|
+
|
|
407
|
+
@staticmethod
|
|
408
|
+
def _is_snowflake_as_idp(
|
|
409
|
+
authentication_url: str, token_request_url: str, host: str
|
|
410
|
+
) -> bool:
|
|
411
|
+
return (authentication_url == "" or host in authentication_url) and (
|
|
412
|
+
token_request_url == "" or host in token_request_url
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
def _eligible_for_default_client_credentials(
|
|
416
|
+
self,
|
|
417
|
+
client_id: str,
|
|
418
|
+
client_secret: str,
|
|
419
|
+
authorization_url: str,
|
|
420
|
+
token_request_url: str,
|
|
421
|
+
host: str,
|
|
422
|
+
) -> bool:
|
|
423
|
+
return (
|
|
424
|
+
(client_id == "" or client_secret is None)
|
|
425
|
+
and (client_secret == "" or client_secret is None)
|
|
426
|
+
and self.__class__._is_snowflake_as_idp(
|
|
427
|
+
authorization_url, token_request_url, host
|
|
428
|
+
)
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
def _validate_client_credentials_with_defaults(
|
|
432
|
+
self,
|
|
433
|
+
client_id: str,
|
|
434
|
+
client_secret: str,
|
|
435
|
+
authorization_url: str,
|
|
436
|
+
token_request_url: str,
|
|
437
|
+
host: str,
|
|
438
|
+
connection: SnowflakeConnection,
|
|
439
|
+
) -> tuple[str, str] | None:
|
|
440
|
+
if self._eligible_for_default_client_credentials(
|
|
441
|
+
client_id, client_secret, authorization_url, token_request_url, host
|
|
442
|
+
):
|
|
443
|
+
return (
|
|
444
|
+
self.__class__._LOCAL_APPLICATION_CLIENT_CREDENTIALS,
|
|
445
|
+
self.__class__._LOCAL_APPLICATION_CLIENT_CREDENTIALS,
|
|
446
|
+
)
|
|
447
|
+
else:
|
|
448
|
+
self._validate_client_credentials_present(
|
|
449
|
+
client_id, client_secret, connection
|
|
450
|
+
)
|
|
451
|
+
return client_id, client_secret
|
|
452
|
+
|
|
453
|
+
@staticmethod
|
|
454
|
+
def _validate_oauth_code_uris(
|
|
455
|
+
authorization_url: str, redirect_uri: str, connection: SnowflakeConnection
|
|
456
|
+
) -> tuple[str, str]:
|
|
457
|
+
if authorization_url and not authorization_url.startswith("https://"):
|
|
458
|
+
Error.errorhandler_wrapper(
|
|
459
|
+
connection,
|
|
460
|
+
None,
|
|
461
|
+
ProgrammingError,
|
|
462
|
+
{
|
|
463
|
+
"msg": "OAuth supports only authorization urls that use 'https' scheme",
|
|
464
|
+
"errno": ER_INVALID_VALUE,
|
|
465
|
+
},
|
|
466
|
+
)
|
|
467
|
+
if redirect_uri and not (
|
|
468
|
+
redirect_uri.startswith("http://") or redirect_uri.startswith("https://")
|
|
469
|
+
):
|
|
470
|
+
Error.errorhandler_wrapper(
|
|
471
|
+
connection,
|
|
472
|
+
None,
|
|
473
|
+
ProgrammingError,
|
|
474
|
+
{
|
|
475
|
+
"msg": "OAuth supports only authorization urls that use 'http(s)' scheme",
|
|
476
|
+
"errno": ER_INVALID_VALUE,
|
|
477
|
+
},
|
|
478
|
+
)
|
|
479
|
+
return authorization_url, redirect_uri
|
|
@@ -29,8 +29,10 @@ class AuthByOauthCredentials(AuthByOAuthBase):
|
|
|
29
29
|
scope: str,
|
|
30
30
|
token_cache: TokenCache | None = None,
|
|
31
31
|
refresh_token_enabled: bool = False,
|
|
32
|
+
connection: SnowflakeConnection | None = None,
|
|
32
33
|
**kwargs,
|
|
33
34
|
) -> None:
|
|
35
|
+
self._validate_client_credentials_present(client_id, client_secret, connection)
|
|
34
36
|
super().__init__(
|
|
35
37
|
client_id=client_id,
|
|
36
38
|
client_secret=client_secret,
|
|
@@ -124,18 +124,19 @@ class AuthByWebBrowser(AuthByPlugin):
|
|
|
124
124
|
socket_connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
|
|
125
125
|
|
|
126
126
|
try:
|
|
127
|
+
hostname = os.getenv("SF_AUTH_SOCKET_ADDR", "localhost")
|
|
127
128
|
try:
|
|
128
129
|
socket_connection.bind(
|
|
129
130
|
(
|
|
130
|
-
|
|
131
|
+
hostname,
|
|
131
132
|
int(os.getenv("SF_AUTH_SOCKET_PORT", 0)),
|
|
132
133
|
)
|
|
133
134
|
)
|
|
134
135
|
except socket.gaierror as ex:
|
|
135
136
|
if ex.args[0] == socket.EAI_NONAME:
|
|
136
137
|
raise OperationalError(
|
|
137
|
-
msg="
|
|
138
|
-
"
|
|
138
|
+
msg=f"{hostname} is not found. Ensure /etc/hosts has "
|
|
139
|
+
f"{hostname} entry.",
|
|
139
140
|
errno=ER_NO_HOSTNAME_FOUND,
|
|
140
141
|
)
|
|
141
142
|
else:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
|
+
import os
|
|
4
5
|
import uuid
|
|
5
6
|
from io import BytesIO
|
|
6
7
|
from logging import getLogger
|
|
@@ -76,8 +77,11 @@ class BindUploadAgent:
|
|
|
76
77
|
if row_idx >= len(self.rows) or size >= self._stream_buffer_size:
|
|
77
78
|
break
|
|
78
79
|
try:
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
f.seek(0)
|
|
81
|
+
self.cursor._upload_stream(
|
|
82
|
+
input_stream=f,
|
|
83
|
+
stage_location=os.path.join(self.stage_path, f"{row_idx}.csv"),
|
|
84
|
+
options={"source_compression": "auto_detect"},
|
|
81
85
|
)
|
|
82
86
|
except Error as err:
|
|
83
87
|
logger.debug("Failed to upload the bindings file to stage.")
|