snowflake-connector-python 3.7.0__tar.gz → 3.8.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.7.0 → snowflake-connector-python-3.8.0}/DESCRIPTION.md +31 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/PKG-INFO +37 -6
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/setup.cfg +5 -5
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/setup.py +3 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/webbrowser.py +69 -4
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/connection.py +39 -11
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/connection_diagnostic.py +106 -64
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/constants.py +68 -34
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/cursor.py +25 -81
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/local_storage_client.py +8 -3
- snowflake-connector-python-3.8.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +64 -0
- snowflake-connector-python-3.8.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +33 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +62 -4
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +1 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +12 -2
- snowflake-connector-python-3.8.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +79 -0
- snowflake-connector-python-3.8.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +34 -0
- snowflake-connector-python-3.8.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +50 -0
- snowflake-connector-python-3.8.0/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +32 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +1 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +2 -1
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/options.py +5 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/pandas_tools.py +17 -10
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/secret_detector.py +1 -1
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/version.py +1 -1
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake_connector_python.egg-info/PKG-INFO +37 -6
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +6 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake_connector_python.egg-info/requires.txt +5 -5
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/CONTRIBUTING.md +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/LICENSE.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/MANIFEST.in +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/NOTICE +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/README.md +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/SECURITY.md +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/pyproject.toml +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/_query_context_cache.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/_sql_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/arrow_context.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/_auth.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/default.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/idtoken.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/keypair.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/oauth.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/okta.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/azure_storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/backoff_policies.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/cache.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/compat.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/config_manager.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/converter.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/converter_issue23517.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/converter_null.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/converter_snowsql.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/dbapi.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/description.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/encryption_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/errorcode.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/errors.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/feature.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/file_compression_type.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/file_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/gzip_decoder.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/network.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/proxy.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/py.typed +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/result_batch.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/result_set.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/s3_storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/sf_dirs.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/sfdatetime.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/snow_logging.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/sqlstate.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/storage_client.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/telemetry.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/telemetry_oob.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/test_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/time_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/tool/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/url_util.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/util_text.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/_appengine_environ.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/bindings.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/_securetransport/low_level.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/appengine.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/ntlmpool.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/securetransport.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/packages/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/packages/backports/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/packages/backports/makefile.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/packages/backports/weakref_finalize.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/packages/six.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/request.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/queue.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
- {snowflake-connector-python-3.7.0 → snowflake-connector-python-3.8.0}/src/snowflake_connector_python.egg-info/top_level.txt +0 -0
|
@@ -8,6 +8,35 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
8
8
|
|
|
9
9
|
# Release Notes
|
|
10
10
|
|
|
11
|
+
- v3.8.0(April 04,2024)
|
|
12
|
+
|
|
13
|
+
- Improved `externalbrowser` auth in containerized environments
|
|
14
|
+
- Instruct browser to not fetch `/favicon` on success page
|
|
15
|
+
- Simple retry strategy on empty socket.recv
|
|
16
|
+
- Add `SNOWFLAKE_AUTH_SOCKET_REUSE_PORT` flag (usage: `SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true`) to set the underlying socket's `SO_REUSEPORT` flag (described in the [socket man page](https://man7.org/linux/man-pages/man7/socket.7.html))
|
|
17
|
+
- Useful when the randomized port used in the localhost callback url is being followed before the container engine completes port forwarding to host
|
|
18
|
+
- Statically map a port between your host and container and allow that port to be reused in rapid succession with:
|
|
19
|
+
`SF_AUTH_SOCKET_PORT=3037 SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true poetry run python somescript.py`
|
|
20
|
+
- Add `SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT` flag (usage: `SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT=true`) to make a non-blocking socket.recv call and retry on Error
|
|
21
|
+
- Consider using this if running in a containerized environment and externalbrowser auth frequently hangs while waiting for callback
|
|
22
|
+
- NOTE: this has not been tested extensively, but has been shown to improve the experience when using WSL
|
|
23
|
+
- Added support for parsing structured type information in schema queries.
|
|
24
|
+
- Bumped platformdirs from >=2.6.0,<4.0.0 to >=2.6.0,<5.0.0
|
|
25
|
+
- Updated diagnostics to use system$allowlist instead of system$whitelist.
|
|
26
|
+
- Updated `write_pandas` to skip TABLE IF NOT EXISTS in truncate mode.
|
|
27
|
+
- Improved cleanup logic for connection to rely on interpreter shutdown instead of the `__del__` method.
|
|
28
|
+
- Updated the logging level from INFO to DEBUG when logging the executed query using `SnowflakeCursor.execute`.
|
|
29
|
+
- Fixed a bug that the truncated password in log is not masked.
|
|
30
|
+
|
|
31
|
+
- v3.7.1(February 21, 2024)
|
|
32
|
+
|
|
33
|
+
- Bumped pandas dependency from >=1.0.0,<2.2.0 to >=1.0.0,<3.0.0.
|
|
34
|
+
- Bumped cryptography dependency from <42.0.0,>=3.1.0 to >=3.1.0,<43.0.0.
|
|
35
|
+
- Bumped pyOpenSSL dependency from >=16.2.0,<24.0.0 to >=16.2.0,<25.0.0.
|
|
36
|
+
- Fixed a memory leak in decimal data conversion.
|
|
37
|
+
- Fixed a bug where `write_pandas` wasn't truncating the target table.
|
|
38
|
+
- Bumped keyring dependency lower bound to 23.1.0 to address security vulnerability.
|
|
39
|
+
|
|
11
40
|
- v3.7.0(January 25,2024)
|
|
12
41
|
|
|
13
42
|
- Added a new boolean parameter `force_return_table` to `SnowflakeCursor.fetch_arrow_all` to force returning `pyarrow.Table` in case of zero rows.
|
|
@@ -17,6 +46,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
17
46
|
- Fixed PyArrow Table type hinting
|
|
18
47
|
- Added support for connecting using an existing connection via the session and master token.
|
|
19
48
|
- Added support for connecting to Snowflake by authenticating with multiple SAML IDP using external browser.
|
|
49
|
+
- Added support for structured types (OBJECT, MAP, ARRAY) to nanoarrow converters.
|
|
20
50
|
- Fixed compilation issue due to missing cstdint header on gcc13.
|
|
21
51
|
- Improved config permissions warning message.
|
|
22
52
|
|
|
@@ -52,6 +82,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
52
82
|
- Added the `socket_timeout` argument to `snowflake.connector.connect` specifying socket read and connect timeout.
|
|
53
83
|
- Fixed `login_timeout` and `network_timeout` behaviour. Retries of login and network requests are now properly halted after these timeouts expire.
|
|
54
84
|
- Fixed bug for issue https://github.com/urllib3/urllib3/issues/1878 in vendored `urllib`.
|
|
85
|
+
- Add User-Agent header for diagnostic report for tracking.
|
|
55
86
|
|
|
56
87
|
- v3.3.1(October 16,2023)
|
|
57
88
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: snowflake-connector-python
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.8.0
|
|
4
4
|
Summary: Snowflake Connector for Python
|
|
5
5
|
Home-page: https://www.snowflake.com/
|
|
6
6
|
Author: Snowflake, Inc
|
|
@@ -40,8 +40,8 @@ License-File: LICENSE.txt
|
|
|
40
40
|
License-File: NOTICE
|
|
41
41
|
Requires-Dist: asn1crypto<2.0.0,>0.24.0
|
|
42
42
|
Requires-Dist: cffi<2.0.0,>=1.9
|
|
43
|
-
Requires-Dist: cryptography<
|
|
44
|
-
Requires-Dist: pyOpenSSL<
|
|
43
|
+
Requires-Dist: cryptography<43.0.0,>=3.1.0
|
|
44
|
+
Requires-Dist: pyOpenSSL<25.0.0,>=16.2.0
|
|
45
45
|
Requires-Dist: pyjwt<3.0.0
|
|
46
46
|
Requires-Dist: pytz
|
|
47
47
|
Requires-Dist: requests<3.0.0
|
|
@@ -54,7 +54,7 @@ Requires-Dist: certifi>=2017.4.17
|
|
|
54
54
|
Requires-Dist: typing_extensions<5,>=4.3
|
|
55
55
|
Requires-Dist: filelock<4,>=3.5
|
|
56
56
|
Requires-Dist: sortedcontainers>=2.4.0
|
|
57
|
-
Requires-Dist: platformdirs<
|
|
57
|
+
Requires-Dist: platformdirs<5.0.0,>=2.6.0
|
|
58
58
|
Requires-Dist: tomlkit
|
|
59
59
|
Provides-Extra: development
|
|
60
60
|
Requires-Dist: Cython; extra == "development"
|
|
@@ -70,10 +70,10 @@ Requires-Dist: pytest-timeout; extra == "development"
|
|
|
70
70
|
Requires-Dist: pytest-xdist; extra == "development"
|
|
71
71
|
Requires-Dist: pytzdata; extra == "development"
|
|
72
72
|
Provides-Extra: pandas
|
|
73
|
-
Requires-Dist: pandas<
|
|
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<25.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,35 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
85
85
|
|
|
86
86
|
# Release Notes
|
|
87
87
|
|
|
88
|
+
- v3.8.0(April 04,2024)
|
|
89
|
+
|
|
90
|
+
- Improved `externalbrowser` auth in containerized environments
|
|
91
|
+
- Instruct browser to not fetch `/favicon` on success page
|
|
92
|
+
- Simple retry strategy on empty socket.recv
|
|
93
|
+
- Add `SNOWFLAKE_AUTH_SOCKET_REUSE_PORT` flag (usage: `SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true`) to set the underlying socket's `SO_REUSEPORT` flag (described in the [socket man page](https://man7.org/linux/man-pages/man7/socket.7.html))
|
|
94
|
+
- Useful when the randomized port used in the localhost callback url is being followed before the container engine completes port forwarding to host
|
|
95
|
+
- Statically map a port between your host and container and allow that port to be reused in rapid succession with:
|
|
96
|
+
`SF_AUTH_SOCKET_PORT=3037 SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true poetry run python somescript.py`
|
|
97
|
+
- Add `SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT` flag (usage: `SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT=true`) to make a non-blocking socket.recv call and retry on Error
|
|
98
|
+
- Consider using this if running in a containerized environment and externalbrowser auth frequently hangs while waiting for callback
|
|
99
|
+
- NOTE: this has not been tested extensively, but has been shown to improve the experience when using WSL
|
|
100
|
+
- Added support for parsing structured type information in schema queries.
|
|
101
|
+
- Bumped platformdirs from >=2.6.0,<4.0.0 to >=2.6.0,<5.0.0
|
|
102
|
+
- Updated diagnostics to use system$allowlist instead of system$whitelist.
|
|
103
|
+
- Updated `write_pandas` to skip TABLE IF NOT EXISTS in truncate mode.
|
|
104
|
+
- Improved cleanup logic for connection to rely on interpreter shutdown instead of the `__del__` method.
|
|
105
|
+
- Updated the logging level from INFO to DEBUG when logging the executed query using `SnowflakeCursor.execute`.
|
|
106
|
+
- Fixed a bug that the truncated password in log is not masked.
|
|
107
|
+
|
|
108
|
+
- v3.7.1(February 21, 2024)
|
|
109
|
+
|
|
110
|
+
- Bumped pandas dependency from >=1.0.0,<2.2.0 to >=1.0.0,<3.0.0.
|
|
111
|
+
- Bumped cryptography dependency from <42.0.0,>=3.1.0 to >=3.1.0,<43.0.0.
|
|
112
|
+
- Bumped pyOpenSSL dependency from >=16.2.0,<24.0.0 to >=16.2.0,<25.0.0.
|
|
113
|
+
- Fixed a memory leak in decimal data conversion.
|
|
114
|
+
- Fixed a bug where `write_pandas` wasn't truncating the target table.
|
|
115
|
+
- Bumped keyring dependency lower bound to 23.1.0 to address security vulnerability.
|
|
116
|
+
|
|
88
117
|
- v3.7.0(January 25,2024)
|
|
89
118
|
|
|
90
119
|
- Added a new boolean parameter `force_return_table` to `SnowflakeCursor.fetch_arrow_all` to force returning `pyarrow.Table` in case of zero rows.
|
|
@@ -94,6 +123,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
94
123
|
- Fixed PyArrow Table type hinting
|
|
95
124
|
- Added support for connecting using an existing connection via the session and master token.
|
|
96
125
|
- Added support for connecting to Snowflake by authenticating with multiple SAML IDP using external browser.
|
|
126
|
+
- Added support for structured types (OBJECT, MAP, ARRAY) to nanoarrow converters.
|
|
97
127
|
- Fixed compilation issue due to missing cstdint header on gcc13.
|
|
98
128
|
- Improved config permissions warning message.
|
|
99
129
|
|
|
@@ -129,6 +159,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
|
|
|
129
159
|
- Added the `socket_timeout` argument to `snowflake.connector.connect` specifying socket read and connect timeout.
|
|
130
160
|
- Fixed `login_timeout` and `network_timeout` behaviour. Retries of login and network requests are now properly halted after these timeouts expire.
|
|
131
161
|
- Fixed bug for issue https://github.com/urllib3/urllib3/issues/1878 in vendored `urllib`.
|
|
162
|
+
- Add User-Agent header for diagnostic report for tracking.
|
|
132
163
|
|
|
133
164
|
- v3.3.1(October 16,2023)
|
|
134
165
|
|
|
@@ -45,8 +45,8 @@ packages = find_namespace:
|
|
|
45
45
|
install_requires =
|
|
46
46
|
asn1crypto>0.24.0,<2.0.0
|
|
47
47
|
cffi>=1.9,<2.0.0
|
|
48
|
-
cryptography>=3.1.0,<
|
|
49
|
-
pyOpenSSL>=16.2.0,<
|
|
48
|
+
cryptography>=3.1.0,<43.0.0
|
|
49
|
+
pyOpenSSL>=16.2.0,<25.0.0
|
|
50
50
|
pyjwt<3.0.0
|
|
51
51
|
pytz
|
|
52
52
|
requests<3.0.0
|
|
@@ -59,7 +59,7 @@ install_requires =
|
|
|
59
59
|
typing_extensions>=4.3,<5
|
|
60
60
|
filelock>=3.5,<4
|
|
61
61
|
sortedcontainers>=2.4.0
|
|
62
|
-
platformdirs>=2.6.0,<
|
|
62
|
+
platformdirs>=2.6.0,<5.0.0
|
|
63
63
|
tomlkit
|
|
64
64
|
include_package_data = True
|
|
65
65
|
package_dir =
|
|
@@ -93,10 +93,10 @@ development =
|
|
|
93
93
|
pytest-xdist
|
|
94
94
|
pytzdata
|
|
95
95
|
pandas =
|
|
96
|
-
pandas>=1.0.0,<
|
|
96
|
+
pandas>=1.0.0,<3.0.0
|
|
97
97
|
pyarrow
|
|
98
98
|
secure-local-storage =
|
|
99
|
-
keyring
|
|
99
|
+
keyring>=23.1.0,<25.0.0
|
|
100
100
|
|
|
101
101
|
[egg_info]
|
|
102
102
|
tag_build =
|
|
@@ -94,6 +94,7 @@ if _ABLE_TO_COMPILE_EXTENSIONS and not SNOWFLAKE_DISABLE_COMPILE_ARROW_EXTENSION
|
|
|
94
94
|
*((file,) if isinstance(file, str) else file)
|
|
95
95
|
)
|
|
96
96
|
for file in {
|
|
97
|
+
"ArrayConverter.cpp",
|
|
97
98
|
"BinaryConverter.cpp",
|
|
98
99
|
"BooleanConverter.cpp",
|
|
99
100
|
"CArrowChunkIterator.cpp",
|
|
@@ -104,6 +105,8 @@ if _ABLE_TO_COMPILE_EXTENSIONS and not SNOWFLAKE_DISABLE_COMPILE_ARROW_EXTENSION
|
|
|
104
105
|
"FixedSizeListConverter.cpp",
|
|
105
106
|
"FloatConverter.cpp",
|
|
106
107
|
"IntConverter.cpp",
|
|
108
|
+
"MapConverter.cpp",
|
|
109
|
+
"ObjectConverter.cpp",
|
|
107
110
|
"SnowflakeType.cpp",
|
|
108
111
|
"StringConverter.cpp",
|
|
109
112
|
"TimeConverter.cpp",
|
|
@@ -10,13 +10,14 @@ import json
|
|
|
10
10
|
import logging
|
|
11
11
|
import os
|
|
12
12
|
import secrets
|
|
13
|
+
import select
|
|
13
14
|
import socket
|
|
14
15
|
import time
|
|
15
16
|
import webbrowser
|
|
16
17
|
from types import ModuleType
|
|
17
18
|
from typing import TYPE_CHECKING, Any
|
|
18
19
|
|
|
19
|
-
from ..compat import parse_qs, urlencode, urlparse, urlsplit
|
|
20
|
+
from ..compat import IS_WINDOWS, parse_qs, urlencode, urlparse, urlsplit
|
|
20
21
|
from ..constants import (
|
|
21
22
|
HTTP_HEADER_ACCEPT,
|
|
22
23
|
HTTP_HEADER_CONTENT_TYPE,
|
|
@@ -116,6 +117,15 @@ class AuthByWebBrowser(AuthByPlugin):
|
|
|
116
117
|
logger.debug("authenticating by Web Browser")
|
|
117
118
|
|
|
118
119
|
socket_connection = self._socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
120
|
+
|
|
121
|
+
if os.getenv("SNOWFLAKE_AUTH_SOCKET_REUSE_PORT", "False").lower() == "true":
|
|
122
|
+
if IS_WINDOWS:
|
|
123
|
+
logger.warning(
|
|
124
|
+
"Configuration SNOWFLAKE_AUTH_SOCKET_REUSE_PORT is not available in Windows. Ignoring."
|
|
125
|
+
)
|
|
126
|
+
else:
|
|
127
|
+
socket_connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
|
|
128
|
+
|
|
119
129
|
try:
|
|
120
130
|
try:
|
|
121
131
|
socket_connection.bind(
|
|
@@ -205,14 +215,68 @@ class AuthByWebBrowser(AuthByPlugin):
|
|
|
205
215
|
def _receive_saml_token(self, conn: SnowflakeConnection, socket_connection) -> None:
|
|
206
216
|
"""Receives SAML token from web browser."""
|
|
207
217
|
while True:
|
|
208
|
-
socket_client, _ = socket_connection.accept()
|
|
209
218
|
try:
|
|
210
|
-
|
|
211
|
-
|
|
219
|
+
attempts = 0
|
|
220
|
+
raw_data = bytearray()
|
|
221
|
+
socket_client = None
|
|
222
|
+
max_attempts = 15
|
|
223
|
+
|
|
224
|
+
msg_dont_wait = (
|
|
225
|
+
os.getenv("SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT", "false").lower()
|
|
226
|
+
== "true"
|
|
227
|
+
)
|
|
228
|
+
if IS_WINDOWS:
|
|
229
|
+
if msg_dont_wait:
|
|
230
|
+
logger.warning(
|
|
231
|
+
"Configuration SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT is not available in Windows. Ignoring."
|
|
232
|
+
)
|
|
233
|
+
msg_dont_wait = False
|
|
234
|
+
|
|
235
|
+
# when running in a containerized environment, socket_client.recv ocassionally returns an empty byte array
|
|
236
|
+
# an immediate successive call to socket_client.recv gets the actual data
|
|
237
|
+
while len(raw_data) == 0 and attempts < max_attempts:
|
|
238
|
+
attempts += 1
|
|
239
|
+
read_sockets, _write_sockets, _exception_sockets = select.select(
|
|
240
|
+
[socket_connection], [], []
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
if read_sockets[0] is not None:
|
|
244
|
+
# Receive the data in small chunks and retransmit it
|
|
245
|
+
socket_client, _ = socket_connection.accept()
|
|
246
|
+
|
|
247
|
+
try:
|
|
248
|
+
if msg_dont_wait:
|
|
249
|
+
# WSL containerized environment sometimes causes socket_client.recv to hang indefinetly
|
|
250
|
+
# To avoid this, passing the socket.MSG_DONTWAIT flag which raises BlockingIOError if
|
|
251
|
+
# operation would block
|
|
252
|
+
logger.debug(
|
|
253
|
+
"Calling socket_client.recv with MSG_DONTWAIT flag due to SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT env var"
|
|
254
|
+
)
|
|
255
|
+
raw_data = socket_client.recv(
|
|
256
|
+
BUF_SIZE, socket.MSG_DONTWAIT
|
|
257
|
+
)
|
|
258
|
+
else:
|
|
259
|
+
raw_data = socket_client.recv(BUF_SIZE)
|
|
260
|
+
|
|
261
|
+
except BlockingIOError:
|
|
262
|
+
logger.debug(
|
|
263
|
+
"BlockingIOError raised from socket.recv while attempting to retrieve callback token request"
|
|
264
|
+
)
|
|
265
|
+
if attempts < max_attempts:
|
|
266
|
+
sleep_time = 0.25
|
|
267
|
+
logger.debug(
|
|
268
|
+
f"Waiting {sleep_time} seconds before trying again"
|
|
269
|
+
)
|
|
270
|
+
time.sleep(sleep_time)
|
|
271
|
+
else:
|
|
272
|
+
logger.debug("Exceeded retry count")
|
|
273
|
+
|
|
274
|
+
data = raw_data.decode("utf-8").split("\r\n")
|
|
212
275
|
|
|
213
276
|
if not self._process_options(data, socket_client):
|
|
214
277
|
self._process_receive_saml_token(conn, data, socket_client)
|
|
215
278
|
break
|
|
279
|
+
|
|
216
280
|
finally:
|
|
217
281
|
socket_client.shutdown(socket.SHUT_RDWR)
|
|
218
282
|
socket_client.close()
|
|
@@ -282,6 +346,7 @@ class AuthByWebBrowser(AuthByPlugin):
|
|
|
282
346
|
else:
|
|
283
347
|
msg = f"""
|
|
284
348
|
<!DOCTYPE html><html><head><meta charset="UTF-8"/>
|
|
349
|
+
<link rel="icon" href="data:,">
|
|
285
350
|
<title>SAML Response for Snowflake</title></head>
|
|
286
351
|
<body>
|
|
287
352
|
Your identity was confirmed and propagated to Snowflake {self._application}.
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
+
import atexit
|
|
8
9
|
import logging
|
|
9
10
|
import os
|
|
10
11
|
import pathlib
|
|
@@ -16,6 +17,7 @@ import warnings
|
|
|
16
17
|
import weakref
|
|
17
18
|
from concurrent.futures import as_completed
|
|
18
19
|
from concurrent.futures.thread import ThreadPoolExecutor
|
|
20
|
+
from contextlib import suppress
|
|
19
21
|
from difflib import get_close_matches
|
|
20
22
|
from functools import partial
|
|
21
23
|
from io import StringIO
|
|
@@ -124,8 +126,10 @@ def DefaultConverterClass() -> type:
|
|
|
124
126
|
|
|
125
127
|
def _get_private_bytes_from_file(
|
|
126
128
|
private_key_file: str | bytes | os.PathLike[str] | os.PathLike[bytes],
|
|
127
|
-
private_key_file_pwd: bytes | None = None,
|
|
129
|
+
private_key_file_pwd: bytes | str | None = None,
|
|
128
130
|
) -> bytes:
|
|
131
|
+
if private_key_file_pwd is not None and isinstance(private_key_file_pwd, str):
|
|
132
|
+
private_key_file_pwd = private_key_file_pwd.encode("utf-8")
|
|
129
133
|
with open(private_key_file, "rb") as key:
|
|
130
134
|
private_key = serialization.load_pem_private_key(
|
|
131
135
|
key.read(),
|
|
@@ -178,7 +182,7 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
|
|
|
178
182
|
"passcode": (None, (type(None), str)), # Snowflake MFA
|
|
179
183
|
"private_key": (None, (type(None), str, RSAPrivateKey)),
|
|
180
184
|
"private_key_file": (None, (type(None), str)),
|
|
181
|
-
"private_key_file_pwd": (None, (type(None), str)),
|
|
185
|
+
"private_key_file_pwd": (None, (type(None), str, bytes)),
|
|
182
186
|
"token": (None, (type(None), str)), # OAuth or JWT Token
|
|
183
187
|
"authenticator": (DEFAULT_AUTHENTICATOR, (type(None), str)),
|
|
184
188
|
"mfa_callback": (None, (type(None), Callable)),
|
|
@@ -235,7 +239,11 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
|
|
|
235
239
|
"connection_diag_whitelist_path": (
|
|
236
240
|
None,
|
|
237
241
|
(type(None), str),
|
|
238
|
-
), # Path to connection diag whitelist json
|
|
242
|
+
), # Path to connection diag whitelist json - Deprecated remove in future
|
|
243
|
+
"connection_diag_allowlist_path": (
|
|
244
|
+
None,
|
|
245
|
+
(type(None), str),
|
|
246
|
+
), # Path to connection diag allowlist json
|
|
239
247
|
"log_imported_packages_in_telemetry": (
|
|
240
248
|
True,
|
|
241
249
|
bool,
|
|
@@ -343,7 +351,8 @@ class SnowflakeConnection:
|
|
|
343
351
|
enable_stage_s3_privatelink_for_us_east_1: when true, clients use regional s3 url to upload files.
|
|
344
352
|
enable_connection_diag: when true, clients will generate a connectivity diagnostic report.
|
|
345
353
|
connection_diag_log_path: path to location to create diag report with enable_connection_diag.
|
|
346
|
-
connection_diag_whitelist_path: path to a whitelist.json file to test with enable_connection_diag
|
|
354
|
+
connection_diag_whitelist_path: path to a whitelist.json file to test with enable_connection_diag - deprecated remove in future
|
|
355
|
+
connection_diag_allowlist_path: path to a allowlist.json file to test with enable_connection_diag.
|
|
347
356
|
json_result_force_utf8_decoding: When true, json result will be decoded in utf-8,
|
|
348
357
|
when false, the encoding of the content is auto-detected. Default value is false.
|
|
349
358
|
This parameter is only effective when the result format is JSON.
|
|
@@ -432,12 +441,8 @@ class SnowflakeConnection:
|
|
|
432
441
|
|
|
433
442
|
# get the imported modules from sys.modules
|
|
434
443
|
self._log_telemetry_imported_packages()
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
try:
|
|
438
|
-
self.close(retry=False)
|
|
439
|
-
except Exception:
|
|
440
|
-
pass
|
|
444
|
+
# check SNOW-1218851 for long term improvement plan to refactor ocsp code
|
|
445
|
+
atexit.register(self._close_at_exit)
|
|
441
446
|
|
|
442
447
|
@property
|
|
443
448
|
def insecure_mode(self) -> bool:
|
|
@@ -655,8 +660,23 @@ class SnowflakeConnection:
|
|
|
655
660
|
|
|
656
661
|
@property
|
|
657
662
|
def connection_diag_whitelist_path(self):
|
|
663
|
+
"""
|
|
664
|
+
Old version of ``connection_diag_allowlist_path``.
|
|
665
|
+
This used to be the original name, but snowflake backend
|
|
666
|
+
deprecated whitelist for allowlist. This name will be
|
|
667
|
+
deprecated in the future.
|
|
668
|
+
"""
|
|
669
|
+
warnings.warn(
|
|
670
|
+
"connection_diag_whitelist_path has been deprecated, use connection_diag_allowlist_path instead",
|
|
671
|
+
DeprecationWarning,
|
|
672
|
+
stacklevel=2,
|
|
673
|
+
)
|
|
658
674
|
return self._connection_diag_whitelist_path
|
|
659
675
|
|
|
676
|
+
@property
|
|
677
|
+
def connection_diag_allowlist_path(self):
|
|
678
|
+
return self._connection_diag_allowlist_path
|
|
679
|
+
|
|
660
680
|
@arrow_number_to_decimal.setter
|
|
661
681
|
def arrow_number_to_decimal_setter(self, value: bool) -> None:
|
|
662
682
|
self._arrow_number_to_decimal = value
|
|
@@ -689,7 +709,9 @@ class SnowflakeConnection:
|
|
|
689
709
|
account=self.account,
|
|
690
710
|
host=self.host,
|
|
691
711
|
connection_diag_log_path=self.connection_diag_log_path,
|
|
692
|
-
|
|
712
|
+
connection_diag_allowlist_path=self.connection_diag_allowlist_path
|
|
713
|
+
if self.connection_diag_allowlist_path is not None
|
|
714
|
+
else self.connection_diag_whitelist_path,
|
|
693
715
|
proxy_host=self.proxy_host,
|
|
694
716
|
proxy_port=self.proxy_port,
|
|
695
717
|
proxy_user=self.proxy_user,
|
|
@@ -720,6 +742,8 @@ class SnowflakeConnection:
|
|
|
720
742
|
|
|
721
743
|
def close(self, retry: bool = True) -> None:
|
|
722
744
|
"""Closes the connection."""
|
|
745
|
+
# unregister to dereference connection object as it's already closed after the execution
|
|
746
|
+
atexit.unregister(self._close_at_exit)
|
|
723
747
|
try:
|
|
724
748
|
if not self.rest:
|
|
725
749
|
logger.debug("Rest object has been destroyed, cannot close session")
|
|
@@ -1747,6 +1771,10 @@ class SnowflakeConnection:
|
|
|
1747
1771
|
) # Prevent KeyError when multiple threads try to remove the same query id
|
|
1748
1772
|
self._done_async_sfqids[sf_qid] = None
|
|
1749
1773
|
|
|
1774
|
+
def _close_at_exit(self):
|
|
1775
|
+
with suppress(Exception):
|
|
1776
|
+
self.close(retry=False)
|
|
1777
|
+
|
|
1750
1778
|
def get_query_status(self, sf_qid: str) -> QueryStatus:
|
|
1751
1779
|
"""Retrieves the status of query with sf_qid.
|
|
1752
1780
|
|