snowflake-connector-python 4.2.0__tar.gz → 4.4.0__tar.gz

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