snowflake-connector-python 3.10.1__tar.gz → 3.12.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.10.1 → snowflake_connector_python-3.12.0}/DESCRIPTION.md +19 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/PKG-INFO +21 -2
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/setup.cfg +1 -1
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/_query_context_cache.py +5 -3
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/_auth.py +20 -12
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/okta.py +3 -1
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/config_manager.py +8 -1
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/connection.py +57 -23
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/connection_diagnostic.py +15 -6
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/constants.py +13 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/cursor.py +26 -21
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/errors.py +3 -3
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/file_transfer_agent.py +18 -14
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/gcs_storage_client.py +10 -6
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/network.py +13 -4
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/ocsp_asn1crypto.py +2 -2
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/ocsp_snowflake.py +26 -11
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/result_batch.py +15 -5
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/result_set.py +57 -36
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/sf_dirs.py +1 -2
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/ssl_wrap_socket.py +1 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/storage_client.py +10 -3
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/telemetry.py +3 -3
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/telemetry_oob.py +21 -21
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/url_util.py +11 -1
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/util_text.py +6 -1
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/version.py +1 -1
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake_connector_python.egg-info/PKG-INFO +21 -2
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake_connector_python.egg-info/requires.txt +1 -1
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/CONTRIBUTING.md +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/LICENSE.txt +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/MANIFEST.in +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/NOTICE +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/README.md +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/SECURITY.md +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/pyproject.toml +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/setup.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/converter.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/description.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/file_util.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/local_storage_client.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/log_configuration.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/options.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/pandas_tools.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/secret_detector.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/test_util.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake_connector_python-3.10.1 → snowflake_connector_python-3.12.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -8,6 +8,25 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
8
8
|
|
|
9
9
|
# Release Notes
|
|
10
10
|
|
|
11
|
+
- v3.12.0(July 24,2024)
|
|
12
|
+
- Set default connection timeout of 10 seconds and socket read timeout of 10 minutes for HTTP calls in file transfer.
|
|
13
|
+
- Optimized `to_pandas()` performance by fully parallel downloading logic.
|
|
14
|
+
- Fixed a bug that specifying client_session_keep_alive_heartbeat_frequency in snowflake-sqlalchemy could crash the connector.
|
|
15
|
+
- Fixed incorrect type hint of connection parameter `private_key`.
|
|
16
|
+
- Added support for connectivity to multiple domains.
|
|
17
|
+
- Bumped keyring dependency from >=23.1.0,<25.0.0 to >=23.1.0,<26.0.0.
|
|
18
|
+
- Disabled OOB Telemetry.
|
|
19
|
+
|
|
20
|
+
- v3.11.0(June 17,2024)
|
|
21
|
+
- Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
|
|
22
|
+
- Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
|
|
23
|
+
- Added support for `disable_saml_url_check` connection parameter to disable SAML URL check in OKTA authentication.
|
|
24
|
+
- Fixed a bug that OCSP certificate signed using SHA384 algorithm cannot be verified.
|
|
25
|
+
- Fixed a bug that status code shown as uploaded when PUT command failed with 400 error.
|
|
26
|
+
- Fixed a bug that a PermissionError was raised when the current user does not have the right permission on parent directory of config file path.
|
|
27
|
+
- Fixed a bug that OCSP GET url is not encoded correctly when it contains a slash.
|
|
28
|
+
- Fixed a bug that an SSO URL didn't accept `:` in a query parameter, for instance, `https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/`.
|
|
29
|
+
|
|
11
30
|
- v3.10.1(May 21, 2024)
|
|
12
31
|
|
|
13
32
|
- Removed an incorrect error log message that could occur during arrow data conversion.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.12.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -73,7 +73,7 @@ Provides-Extra: pandas
|
|
|
73
73
|
Requires-Dist: pandas<3.0.0,>=1.0.0; extra == "pandas"
|
|
74
74
|
Requires-Dist: pyarrow; extra == "pandas"
|
|
75
75
|
Provides-Extra: secure-local-storage
|
|
76
|
-
Requires-Dist: keyring<
|
|
76
|
+
Requires-Dist: keyring<26.0.0,>=23.1.0; extra == "secure-local-storage"
|
|
77
77
|
|
|
78
78
|
This package includes the Snowflake Connector for Python, which conforms to the Python DB API 2.0 specification:
|
|
79
79
|
https://www.python.org/dev/peps/pep-0249/
|
|
@@ -85,6 +85,25 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
85
85
|
|
|
86
86
|
# Release Notes
|
|
87
87
|
|
|
88
|
+
- v3.12.0(July 24,2024)
|
|
89
|
+
- Set default connection timeout of 10 seconds and socket read timeout of 10 minutes for HTTP calls in file transfer.
|
|
90
|
+
- Optimized `to_pandas()` performance by fully parallel downloading logic.
|
|
91
|
+
- Fixed a bug that specifying client_session_keep_alive_heartbeat_frequency in snowflake-sqlalchemy could crash the connector.
|
|
92
|
+
- Fixed incorrect type hint of connection parameter `private_key`.
|
|
93
|
+
- Added support for connectivity to multiple domains.
|
|
94
|
+
- Bumped keyring dependency from >=23.1.0,<25.0.0 to >=23.1.0,<26.0.0.
|
|
95
|
+
- Disabled OOB Telemetry.
|
|
96
|
+
|
|
97
|
+
- v3.11.0(June 17,2024)
|
|
98
|
+
- Added support for `token_file_path` connection parameter to read an OAuth token from a file when connecting to Snowflake.
|
|
99
|
+
- Added support for `debug_arrow_chunk` connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.
|
|
100
|
+
- Added support for `disable_saml_url_check` connection parameter to disable SAML URL check in OKTA authentication.
|
|
101
|
+
- Fixed a bug that OCSP certificate signed using SHA384 algorithm cannot be verified.
|
|
102
|
+
- Fixed a bug that status code shown as uploaded when PUT command failed with 400 error.
|
|
103
|
+
- Fixed a bug that a PermissionError was raised when the current user does not have the right permission on parent directory of config file path.
|
|
104
|
+
- Fixed a bug that OCSP GET url is not encoded correctly when it contains a slash.
|
|
105
|
+
- Fixed a bug that an SSO URL didn't accept `:` in a query parameter, for instance, `https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/`.
|
|
106
|
+
|
|
88
107
|
- v3.10.1(May 21, 2024)
|
|
89
108
|
|
|
90
109
|
- Removed an incorrect error log message that could occur during arrow data conversion.
|
|
@@ -165,9 +165,11 @@ class QueryContextCache:
|
|
|
165
165
|
"id": qce.id,
|
|
166
166
|
"timestamp": qce.read_timestamp,
|
|
167
167
|
"priority": qce.priority,
|
|
168
|
-
"context":
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
"context": (
|
|
169
|
+
{"base64Data": qce.context}
|
|
170
|
+
if qce.context is not None
|
|
171
|
+
else {}
|
|
172
|
+
),
|
|
171
173
|
}
|
|
172
174
|
for qce in self._tree_set
|
|
173
175
|
]
|
|
@@ -417,27 +417,35 @@ class Auth:
|
|
|
417
417
|
else:
|
|
418
418
|
logger.debug(
|
|
419
419
|
"token = %s",
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
420
|
+
(
|
|
421
|
+
"******"
|
|
422
|
+
if ret["data"] and ret["data"].get("token") is not None
|
|
423
|
+
else "NULL"
|
|
424
|
+
),
|
|
423
425
|
)
|
|
424
426
|
logger.debug(
|
|
425
427
|
"master_token = %s",
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
428
|
+
(
|
|
429
|
+
"******"
|
|
430
|
+
if ret["data"] and ret["data"].get("masterToken") is not None
|
|
431
|
+
else "NULL"
|
|
432
|
+
),
|
|
429
433
|
)
|
|
430
434
|
logger.debug(
|
|
431
435
|
"id_token = %s",
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
436
|
+
(
|
|
437
|
+
"******"
|
|
438
|
+
if ret["data"] and ret["data"].get("idToken") is not None
|
|
439
|
+
else "NULL"
|
|
440
|
+
),
|
|
435
441
|
)
|
|
436
442
|
logger.debug(
|
|
437
443
|
"mfa_token = %s",
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
444
|
+
(
|
|
445
|
+
"******"
|
|
446
|
+
if ret["data"] and ret["data"].get("mfaToken") is not None
|
|
447
|
+
else "NULL"
|
|
448
|
+
),
|
|
441
449
|
)
|
|
442
450
|
if not ret["data"]:
|
|
443
451
|
Error.errorhandler_wrapper(
|
|
@@ -315,7 +315,9 @@ class AuthByOkta(AuthByPlugin):
|
|
|
315
315
|
host=conn._rest._host,
|
|
316
316
|
port=conn._rest._port,
|
|
317
317
|
)
|
|
318
|
-
if not
|
|
318
|
+
if not getattr(conn, "_disable_saml_url_check", False) and not _is_prefix_equal(
|
|
319
|
+
post_back_url, full_url
|
|
320
|
+
):
|
|
319
321
|
Error.errorhandler_wrapper(
|
|
320
322
|
conn._rest._connection,
|
|
321
323
|
None,
|
|
@@ -320,8 +320,15 @@ class ConfigManager:
|
|
|
320
320
|
):
|
|
321
321
|
if sliceoptions.only_in_slice:
|
|
322
322
|
del read_config_file[section]
|
|
323
|
-
|
|
323
|
+
try:
|
|
324
|
+
if not filep.exists():
|
|
325
|
+
continue
|
|
326
|
+
except PermissionError:
|
|
327
|
+
LOGGER.debug(
|
|
328
|
+
f"Fail to read configuration file from {str(filep)} due to no permission on its parent directory"
|
|
329
|
+
)
|
|
324
330
|
continue
|
|
331
|
+
|
|
325
332
|
if (
|
|
326
333
|
sliceoptions.check_permissions # Skip checking if this file couldn't hold sensitive information
|
|
327
334
|
# Same check as openssh does for permissions
|
|
@@ -52,6 +52,7 @@ from .compat import IS_LINUX, IS_WINDOWS, quote, urlencode
|
|
|
52
52
|
from .config_manager import CONFIG_MANAGER, _get_default_connection_params
|
|
53
53
|
from .connection_diagnostic import ConnectionDiagnostic
|
|
54
54
|
from .constants import (
|
|
55
|
+
_DOMAIN_NAME_MAP,
|
|
55
56
|
ENV_VAR_PARTNER,
|
|
56
57
|
PARAMETER_AUTOCOMMIT,
|
|
57
58
|
PARAMETER_CLIENT_PREFETCH_THREADS,
|
|
@@ -107,6 +108,7 @@ from .sqlstate import SQLSTATE_CONNECTION_NOT_EXISTS, SQLSTATE_FEATURE_NOT_SUPPO
|
|
|
107
108
|
from .telemetry import TelemetryClient, TelemetryData, TelemetryField
|
|
108
109
|
from .telemetry_oob import TelemetryService
|
|
109
110
|
from .time_util import HeartBeatTimer, get_time_millis
|
|
111
|
+
from .url_util import extract_top_level_domain_from_hostname
|
|
110
112
|
from .util_text import construct_hostname, parse_account, split_statements
|
|
111
113
|
|
|
112
114
|
DEFAULT_CLIENT_PREFETCH_THREADS = 4
|
|
@@ -181,7 +183,7 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
|
|
|
181
183
|
"backoff_policy": (DEFAULT_BACKOFF_POLICY, Callable),
|
|
182
184
|
"passcode_in_password": (False, bool), # Snowflake MFA
|
|
183
185
|
"passcode": (None, (type(None), str)), # Snowflake MFA
|
|
184
|
-
"private_key": (None, (type(None),
|
|
186
|
+
"private_key": (None, (type(None), bytes, RSAPrivateKey)),
|
|
185
187
|
"private_key_file": (None, (type(None), str)),
|
|
186
188
|
"private_key_file_pwd": (None, (type(None), str, bytes)),
|
|
187
189
|
"token": (None, (type(None), str)), # OAuth or JWT Token
|
|
@@ -190,6 +192,10 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
|
|
|
190
192
|
"password_callback": (None, (type(None), Callable)),
|
|
191
193
|
"auth_class": (None, (type(None), AuthByPlugin)),
|
|
192
194
|
"application": (CLIENT_NAME, (type(None), str)),
|
|
195
|
+
# internal_application_name/version is used to tell the server the type of client connecting to
|
|
196
|
+
# Snowflake. There are some functionalities (e.g., MFA, Arrow result format) that
|
|
197
|
+
# Snowflake server doesn't support for new client types, which requires developers to
|
|
198
|
+
# add the new client type to the server to support these features.
|
|
193
199
|
"internal_application_name": (CLIENT_NAME, (type(None), str)),
|
|
194
200
|
"internal_application_version": (CLIENT_VERSION, (type(None), str)),
|
|
195
201
|
"insecure_mode": (False, bool), # Error security fix requirement
|
|
@@ -281,6 +287,14 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
|
|
|
281
287
|
True,
|
|
282
288
|
bool,
|
|
283
289
|
), # Disable console login and fall back to getting SSO URL from GS
|
|
290
|
+
"debug_arrow_chunk": (
|
|
291
|
+
False,
|
|
292
|
+
bool,
|
|
293
|
+
), # log raw arrow chunk for debugging purpuse in case there is malformed arrow data
|
|
294
|
+
"disable_saml_url_check": (
|
|
295
|
+
False,
|
|
296
|
+
bool,
|
|
297
|
+
), # disable saml url check in okta authentication
|
|
284
298
|
}
|
|
285
299
|
|
|
286
300
|
APPLICATION_RE = re.compile(r"[\w\d_]+")
|
|
@@ -359,6 +373,7 @@ class SnowflakeConnection:
|
|
|
359
373
|
This parameter is only effective when the result format is JSON.
|
|
360
374
|
server_session_keep_alive: When true, the connector does not destroy the session on the Snowflake server side
|
|
361
375
|
before the connector shuts down. Default value is false.
|
|
376
|
+
token_file_path: The file path of the token file. If both token and token_file_path are provided, the token in token_file_path will be used.
|
|
362
377
|
"""
|
|
363
378
|
|
|
364
379
|
OCSP_ENV_LOCK = Lock()
|
|
@@ -713,9 +728,11 @@ class SnowflakeConnection:
|
|
|
713
728
|
account=self.account,
|
|
714
729
|
host=self.host,
|
|
715
730
|
connection_diag_log_path=self.connection_diag_log_path,
|
|
716
|
-
connection_diag_allowlist_path=
|
|
717
|
-
|
|
718
|
-
|
|
731
|
+
connection_diag_allowlist_path=(
|
|
732
|
+
self.connection_diag_allowlist_path
|
|
733
|
+
if self.connection_diag_allowlist_path is not None
|
|
734
|
+
else self.connection_diag_whitelist_path
|
|
735
|
+
),
|
|
719
736
|
proxy_host=self.proxy_host,
|
|
720
737
|
proxy_port=self.proxy_port,
|
|
721
738
|
proxy_user=self.proxy_user,
|
|
@@ -920,7 +937,7 @@ class SnowflakeConnection:
|
|
|
920
937
|
os.environ["SF_OCSP_RESPONSE_CACHE_SERVER_URL"],
|
|
921
938
|
)
|
|
922
939
|
|
|
923
|
-
if
|
|
940
|
+
if ".privatelink.snowflakecomputing." in self.host:
|
|
924
941
|
SnowflakeConnection.setup_ocsp_privatelink(self.application, self.host)
|
|
925
942
|
else:
|
|
926
943
|
if "SF_OCSP_RESPONSE_CACHE_SERVER_URL" in os.environ:
|
|
@@ -936,14 +953,14 @@ class SnowflakeConnection:
|
|
|
936
953
|
|
|
937
954
|
if self._validate_default_parameters:
|
|
938
955
|
# Snowflake will validate the requested database, schema, and warehouse
|
|
939
|
-
self._session_parameters[
|
|
940
|
-
|
|
941
|
-
|
|
956
|
+
self._session_parameters[PARAMETER_CLIENT_VALIDATE_DEFAULT_PARAMETERS] = (
|
|
957
|
+
True
|
|
958
|
+
)
|
|
942
959
|
|
|
943
960
|
if self.client_session_keep_alive is not None:
|
|
944
|
-
self._session_parameters[
|
|
945
|
-
|
|
946
|
-
|
|
961
|
+
self._session_parameters[PARAMETER_CLIENT_SESSION_KEEP_ALIVE] = (
|
|
962
|
+
self._client_session_keep_alive
|
|
963
|
+
)
|
|
947
964
|
|
|
948
965
|
if self.client_session_keep_alive_heartbeat_frequency is not None:
|
|
949
966
|
self._session_parameters[
|
|
@@ -951,9 +968,9 @@ class SnowflakeConnection:
|
|
|
951
968
|
] = self._validate_client_session_keep_alive_heartbeat_frequency()
|
|
952
969
|
|
|
953
970
|
if self.client_prefetch_threads:
|
|
954
|
-
self._session_parameters[
|
|
955
|
-
|
|
956
|
-
|
|
971
|
+
self._session_parameters[PARAMETER_CLIENT_PREFETCH_THREADS] = (
|
|
972
|
+
self._validate_client_prefetch_threads()
|
|
973
|
+
)
|
|
957
974
|
|
|
958
975
|
# Setup authenticator
|
|
959
976
|
auth = Auth(self.rest)
|
|
@@ -1119,11 +1136,13 @@ class SnowflakeConnection:
|
|
|
1119
1136
|
warnings.warn(
|
|
1120
1137
|
"'{}' connection parameter should be of type '{}', but is a '{}'".format(
|
|
1121
1138
|
name,
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1139
|
+
(
|
|
1140
|
+
str(tuple(e.__name__ for e in accepted_types)).replace(
|
|
1141
|
+
"'", ""
|
|
1142
|
+
)
|
|
1143
|
+
if isinstance(accepted_types, tuple)
|
|
1144
|
+
else accepted_types.__name__
|
|
1145
|
+
),
|
|
1127
1146
|
type(value).__name__,
|
|
1128
1147
|
),
|
|
1129
1148
|
# Raise warning from where class was initiated
|
|
@@ -1165,6 +1184,10 @@ class SnowflakeConnection:
|
|
|
1165
1184
|
if "protocol" not in kwargs:
|
|
1166
1185
|
self._protocol = "https"
|
|
1167
1186
|
|
|
1187
|
+
logger.info(
|
|
1188
|
+
f"Connecting to {_DOMAIN_NAME_MAP.get(extract_top_level_domain_from_hostname(self._host), 'GLOBAL')} Snowflake domain"
|
|
1189
|
+
)
|
|
1190
|
+
|
|
1168
1191
|
# If using a custom auth class, we should set the authenticator
|
|
1169
1192
|
# type to be the same as the custom auth class
|
|
1170
1193
|
if self._auth_class:
|
|
@@ -1182,6 +1205,12 @@ class SnowflakeConnection:
|
|
|
1182
1205
|
]:
|
|
1183
1206
|
self._authenticator = auth_tmp
|
|
1184
1207
|
|
|
1208
|
+
# read OAuth token from
|
|
1209
|
+
token_file_path = kwargs.get("token_file_path")
|
|
1210
|
+
if token_file_path:
|
|
1211
|
+
with open(token_file_path) as f:
|
|
1212
|
+
self._token = f.read()
|
|
1213
|
+
|
|
1185
1214
|
if not (self._master_token and self._session_token):
|
|
1186
1215
|
if not self.user and self._authenticator != OAUTH_AUTHENTICATOR:
|
|
1187
1216
|
# OAuth Authentication does not require a username
|
|
@@ -1268,6 +1297,7 @@ class SnowflakeConnection:
|
|
|
1268
1297
|
_update_current_object: bool = True,
|
|
1269
1298
|
_no_retry: bool = False,
|
|
1270
1299
|
timeout: int | None = None,
|
|
1300
|
+
dataframe_ast: str | None = None,
|
|
1271
1301
|
) -> dict[str, Any]:
|
|
1272
1302
|
"""Executes a query with a sequence counter."""
|
|
1273
1303
|
logger.debug("_cmd_query")
|
|
@@ -1277,6 +1307,8 @@ class SnowflakeConnection:
|
|
|
1277
1307
|
"sequenceId": sequence_counter,
|
|
1278
1308
|
"querySubmissionTime": get_time_millis(),
|
|
1279
1309
|
}
|
|
1310
|
+
if dataframe_ast is not None:
|
|
1311
|
+
data["dataframeAst"] = dataframe_ast
|
|
1280
1312
|
if statement_params is not None:
|
|
1281
1313
|
data["parameters"] = statement_params
|
|
1282
1314
|
if is_internal:
|
|
@@ -1651,6 +1683,12 @@ class SnowflakeConnection:
|
|
|
1651
1683
|
"""Validate and return heartbeat frequency in seconds."""
|
|
1652
1684
|
real_max = int(self.rest.master_validity_in_seconds / 4)
|
|
1653
1685
|
real_min = int(real_max / 4)
|
|
1686
|
+
|
|
1687
|
+
# ensure the type is integer
|
|
1688
|
+
self._client_session_keep_alive_heartbeat_frequency = int(
|
|
1689
|
+
self.client_session_keep_alive_heartbeat_frequency
|
|
1690
|
+
)
|
|
1691
|
+
|
|
1654
1692
|
if self.client_session_keep_alive_heartbeat_frequency is None:
|
|
1655
1693
|
# This is an unlikely scenario but covering it just in case.
|
|
1656
1694
|
self._client_session_keep_alive_heartbeat_frequency = real_min
|
|
@@ -1659,10 +1697,6 @@ class SnowflakeConnection:
|
|
|
1659
1697
|
elif self.client_session_keep_alive_heartbeat_frequency < real_min:
|
|
1660
1698
|
self._client_session_keep_alive_heartbeat_frequency = real_min
|
|
1661
1699
|
|
|
1662
|
-
# ensure the type is integer
|
|
1663
|
-
self._client_session_keep_alive_heartbeat_frequency = int(
|
|
1664
|
-
self.client_session_keep_alive_heartbeat_frequency
|
|
1665
|
-
)
|
|
1666
1700
|
return self.client_session_keep_alive_heartbeat_frequency
|
|
1667
1701
|
|
|
1668
1702
|
def _validate_client_prefetch_threads(self) -> int:
|
|
@@ -23,6 +23,7 @@ import OpenSSL
|
|
|
23
23
|
|
|
24
24
|
from .compat import IS_WINDOWS, urlparse
|
|
25
25
|
from .cursor import SnowflakeCursor
|
|
26
|
+
from .url_util import extract_top_level_domain_from_hostname
|
|
26
27
|
from .vendored import urllib3
|
|
27
28
|
|
|
28
29
|
logger = getLogger(__name__)
|
|
@@ -89,15 +90,21 @@ class ConnectionDiagnostic:
|
|
|
89
90
|
self.__append_message(
|
|
90
91
|
host_type, f"Host based on specified account: {self.host}"
|
|
91
92
|
)
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
top_level_domain = extract_top_level_domain_from_hostname(host)
|
|
95
|
+
if (
|
|
96
|
+
f".{top_level_domain}.snowflakecomputing.{top_level_domain}" in self.host
|
|
97
|
+
): # repeated domain name pattern
|
|
98
|
+
self.host = (
|
|
99
|
+
host.split(f".{top_level_domain}.snow", 1)[0] + f".{top_level_domain}"
|
|
100
|
+
)
|
|
94
101
|
logger.warning(
|
|
95
|
-
f"Account should not have snowflakecomputing.
|
|
102
|
+
f"Account should not have snowflakecomputing.{top_level_domain} in it. You provided {host}. "
|
|
96
103
|
f"Continuing with fixed host."
|
|
97
104
|
)
|
|
98
105
|
self.__append_message(
|
|
99
106
|
host_type,
|
|
100
|
-
f"We removed extra .snowflakecomputing.
|
|
107
|
+
f"We removed extra .snowflakecomputing.{top_level_domain} and will continue with host: "
|
|
101
108
|
f"{self.host}",
|
|
102
109
|
)
|
|
103
110
|
else:
|
|
@@ -175,13 +182,15 @@ class ConnectionDiagnostic:
|
|
|
175
182
|
)
|
|
176
183
|
self.full_connection_diag_allowlist_path = None
|
|
177
184
|
|
|
178
|
-
self.allowlist_sql: str =
|
|
185
|
+
self.allowlist_sql: str = (
|
|
186
|
+
"select /* snowflake-connector-python:connection_diagnostics */ system$allowlist();"
|
|
187
|
+
)
|
|
179
188
|
|
|
180
189
|
if self.__is_privatelink():
|
|
181
190
|
self.ocsp_urls.append(f"ocsp.{self.host}")
|
|
182
191
|
self.allowlist_sql = "select system$allowlist_privatelink();"
|
|
183
192
|
else:
|
|
184
|
-
self.ocsp_urls.append("ocsp.snowflakecomputing.
|
|
193
|
+
self.ocsp_urls.append(f"ocsp.snowflakecomputing.{top_level_domain}")
|
|
185
194
|
|
|
186
195
|
self.allowlist_retrieval_success: bool = False
|
|
187
196
|
self.cursor: SnowflakeCursor | None = None
|
|
@@ -36,6 +36,11 @@ DBAPI_TYPE_BINARY = 1
|
|
|
36
36
|
DBAPI_TYPE_NUMBER = 2
|
|
37
37
|
DBAPI_TYPE_TIMESTAMP = 3
|
|
38
38
|
|
|
39
|
+
_DEFAULT_HOSTNAME_TLD = "com"
|
|
40
|
+
_CHINA_HOSTNAME_TLD = "cn"
|
|
41
|
+
_TOP_LEVEL_DOMAIN_REGEX = r"\.[a-zA-Z]{1,63}$"
|
|
42
|
+
_SNOWFLAKE_HOST_SUFFIX_REGEX = r"snowflakecomputing(\.[a-zA-Z]{1,63}){1,2}$"
|
|
43
|
+
|
|
39
44
|
|
|
40
45
|
class FieldType(NamedTuple):
|
|
41
46
|
name: str
|
|
@@ -399,6 +404,7 @@ class IterUnit(Enum):
|
|
|
399
404
|
TABLE_UNIT = "table"
|
|
400
405
|
|
|
401
406
|
|
|
407
|
+
# File Transfer
|
|
402
408
|
# Amazon S3 multipart upload limits
|
|
403
409
|
# https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html
|
|
404
410
|
S3_DEFAULT_CHUNK_SIZE = 8 * 1024**2
|
|
@@ -410,8 +416,15 @@ S3_MAX_PARTS = 10000
|
|
|
410
416
|
S3_CHUNK_SIZE = 8388608 # boto3 default
|
|
411
417
|
AZURE_CHUNK_SIZE = 4 * megabyte
|
|
412
418
|
|
|
419
|
+
# https://requests.readthedocs.io/en/latest/user/advanced/#timeouts
|
|
420
|
+
REQUEST_CONNECTION_TIMEOUT = 10
|
|
421
|
+
REQUEST_READ_TIMEOUT = 600
|
|
422
|
+
|
|
413
423
|
DAY_IN_SECONDS = 60 * 60 * 24
|
|
414
424
|
|
|
415
425
|
# TODO: all env variables definitions should be here
|
|
416
426
|
ENV_VAR_PARTNER = "SF_PARTNER"
|
|
417
427
|
ENV_VAR_TEST_MODE = "SNOWFLAKE_TEST_MODE"
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
_DOMAIN_NAME_MAP = {_DEFAULT_HOSTNAME_TLD: "GLOBAL", _CHINA_HOSTNAME_TLD: "CHINA"}
|
|
@@ -149,9 +149,11 @@ class ResultMetadata(NamedTuple):
|
|
|
149
149
|
def from_column(cls, col: dict[str, Any]):
|
|
150
150
|
"""Initializes a ResultMetadata object from the column description in the query response."""
|
|
151
151
|
type_code = FIELD_NAME_TO_ID[
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
(
|
|
153
|
+
col["extTypeName"].upper()
|
|
154
|
+
if col.get("extTypeName")
|
|
155
|
+
else col["type"].upper()
|
|
156
|
+
)
|
|
155
157
|
]
|
|
156
158
|
|
|
157
159
|
return cls(
|
|
@@ -546,12 +548,10 @@ class SnowflakeCursor:
|
|
|
546
548
|
return None
|
|
547
549
|
|
|
548
550
|
@overload
|
|
549
|
-
def callproc(self, procname: str) -> tuple:
|
|
550
|
-
...
|
|
551
|
+
def callproc(self, procname: str) -> tuple: ...
|
|
551
552
|
|
|
552
553
|
@overload
|
|
553
|
-
def callproc(self, procname: str, args: T) -> T:
|
|
554
|
-
...
|
|
554
|
+
def callproc(self, procname: str, args: T) -> T: ...
|
|
555
555
|
|
|
556
556
|
def callproc(self, procname: str, args=tuple()):
|
|
557
557
|
"""Call a stored procedure.
|
|
@@ -601,6 +601,7 @@ class SnowflakeCursor:
|
|
|
601
601
|
_no_results: bool = False,
|
|
602
602
|
_is_put_get=None,
|
|
603
603
|
_no_retry: bool = False,
|
|
604
|
+
dataframe_ast: str | None = None,
|
|
604
605
|
) -> dict[str, Any]:
|
|
605
606
|
del self.messages[:]
|
|
606
607
|
|
|
@@ -630,9 +631,9 @@ class SnowflakeCursor:
|
|
|
630
631
|
if str(result_format_val).upper() == "ARROW":
|
|
631
632
|
self.check_can_use_arrow_resultset()
|
|
632
633
|
elif result_format_val is None:
|
|
633
|
-
statement_params[
|
|
634
|
-
|
|
635
|
-
|
|
634
|
+
statement_params[PARAMETER_PYTHON_CONNECTOR_QUERY_RESULT_FORMAT] = (
|
|
635
|
+
"JSON"
|
|
636
|
+
)
|
|
636
637
|
|
|
637
638
|
self._sequence_counter = self._connection._next_sequence_counter()
|
|
638
639
|
self._request_id = uuid.uuid4()
|
|
@@ -704,6 +705,7 @@ class SnowflakeCursor:
|
|
|
704
705
|
_no_results=_no_results,
|
|
705
706
|
_no_retry=_no_retry,
|
|
706
707
|
timeout=real_timeout,
|
|
708
|
+
dataframe_ast=dataframe_ast,
|
|
707
709
|
)
|
|
708
710
|
finally:
|
|
709
711
|
try:
|
|
@@ -758,9 +760,11 @@ class SnowflakeCursor:
|
|
|
758
760
|
if params is not None and len(params) == 0:
|
|
759
761
|
self._log_telemetry_job_data(
|
|
760
762
|
TelemetryField.EMPTY_SEQ_INTERPOLATION,
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
763
|
+
(
|
|
764
|
+
TelemetryData.TRUE
|
|
765
|
+
if self.connection._interpolate_empty_sequences
|
|
766
|
+
else TelemetryData.FALSE
|
|
767
|
+
),
|
|
764
768
|
)
|
|
765
769
|
if logger.getEffectiveLevel() <= logging.DEBUG:
|
|
766
770
|
logger.debug(
|
|
@@ -807,8 +811,8 @@ class SnowflakeCursor:
|
|
|
807
811
|
_skip_upload_on_content_match: bool = False,
|
|
808
812
|
file_stream: IO[bytes] | None = None,
|
|
809
813
|
num_statements: int | None = None,
|
|
810
|
-
|
|
811
|
-
|
|
814
|
+
_dataframe_ast: str | None = None,
|
|
815
|
+
) -> Self | None: ...
|
|
812
816
|
|
|
813
817
|
@overload
|
|
814
818
|
def execute(
|
|
@@ -837,8 +841,8 @@ class SnowflakeCursor:
|
|
|
837
841
|
_skip_upload_on_content_match: bool = False,
|
|
838
842
|
file_stream: IO[bytes] | None = None,
|
|
839
843
|
num_statements: int | None = None,
|
|
840
|
-
|
|
841
|
-
|
|
844
|
+
_dataframe_ast: str | None = None,
|
|
845
|
+
) -> dict[str, Any] | None: ...
|
|
842
846
|
|
|
843
847
|
def execute(
|
|
844
848
|
self,
|
|
@@ -866,6 +870,7 @@ class SnowflakeCursor:
|
|
|
866
870
|
_skip_upload_on_content_match: bool = False,
|
|
867
871
|
file_stream: IO[bytes] | None = None,
|
|
868
872
|
num_statements: int | None = None,
|
|
873
|
+
_dataframe_ast: str | None = None,
|
|
869
874
|
) -> Self | dict[str, Any] | None:
|
|
870
875
|
"""Executes a command/query.
|
|
871
876
|
|
|
@@ -900,6 +905,7 @@ class SnowflakeCursor:
|
|
|
900
905
|
file_stream: File-like object to be uploaded with PUT
|
|
901
906
|
num_statements: Query level parameter submitted in _statement_params constraining exact number of
|
|
902
907
|
statements being submitted (or 0 if submitting an uncounted number) when using a multi-statement query.
|
|
908
|
+
_dataframe_ast: Base64-encoded dataframe request abstract syntax tree.
|
|
903
909
|
|
|
904
910
|
Returns:
|
|
905
911
|
The cursor itself, or None if some error happened, or the response returned
|
|
@@ -941,6 +947,7 @@ class SnowflakeCursor:
|
|
|
941
947
|
"_no_results": _no_results,
|
|
942
948
|
"_is_put_get": _is_put_get,
|
|
943
949
|
"_no_retry": _no_retry,
|
|
950
|
+
"dataframe_ast": _dataframe_ast,
|
|
944
951
|
}
|
|
945
952
|
|
|
946
953
|
if self._connection.is_pyformat:
|
|
@@ -1278,12 +1285,10 @@ class SnowflakeCursor:
|
|
|
1278
1285
|
return self._result_set._fetch_arrow_batches()
|
|
1279
1286
|
|
|
1280
1287
|
@overload
|
|
1281
|
-
def fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None:
|
|
1282
|
-
...
|
|
1288
|
+
def fetch_arrow_all(self, force_return_table: Literal[False]) -> Table | None: ...
|
|
1283
1289
|
|
|
1284
1290
|
@overload
|
|
1285
|
-
def fetch_arrow_all(self, force_return_table: Literal[True]) -> Table:
|
|
1286
|
-
...
|
|
1291
|
+
def fetch_arrow_all(self, force_return_table: Literal[True]) -> Table: ...
|
|
1287
1292
|
|
|
1288
1293
|
def fetch_arrow_all(self, force_return_table: bool = False) -> Table | None:
|
|
1289
1294
|
"""
|
|
@@ -153,9 +153,9 @@ class Error(BASE_EXCEPTION_CLASS):
|
|
|
153
153
|
and not connection._telemetry.is_closed
|
|
154
154
|
):
|
|
155
155
|
# Send with in-band telemetry
|
|
156
|
-
telemetry_data[
|
|
157
|
-
TelemetryField.
|
|
158
|
-
|
|
156
|
+
telemetry_data[TelemetryField.KEY_TYPE.value] = (
|
|
157
|
+
TelemetryField.SQL_EXCEPTION.value
|
|
158
|
+
)
|
|
159
159
|
telemetry_data[TelemetryField.KEY_SOURCE.value] = connection.application
|
|
160
160
|
telemetry_data[TelemetryField.KEY_EXCEPTION.value] = self.__class__.__name__
|
|
161
161
|
ts = get_time_millis()
|