snowflake-connector-python 4.3.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 (301) hide show
  1. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/CONTRIBUTING.md +2 -2
  2. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/DESCRIPTION.md +15 -1
  3. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/PKG-INFO +21 -6
  4. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/setup.cfg +5 -4
  5. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_utils.py +4 -21
  6. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_wif_util.py +1 -1
  7. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_auth.py +5 -0
  8. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_auth.py +9 -0
  9. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/azure_storage_client.py +3 -1
  10. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/config_manager.py +34 -3
  11. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/connection.py +8 -1
  12. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/crl.py +1 -1
  13. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/platform_detection.py +1 -1
  14. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/result_batch.py +22 -0
  15. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/token_cache.py +1 -1
  16. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/util_text.py +18 -1
  17. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/version.py +1 -1
  18. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/wif_util.py +1 -1
  19. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/PKG-INFO +21 -6
  20. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/requires.txt +5 -5
  21. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/LICENSE.txt +0 -0
  22. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/MANIFEST.in +0 -0
  23. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/NOTICE +0 -0
  24. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/README.md +0 -0
  25. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/SECURITY.md +0 -0
  26. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/pyproject.toml +0 -0
  27. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/setup.py +0 -0
  28. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/__init__.py +0 -0
  29. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_query_context_cache.py +0 -0
  30. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/_sql_util.py +0 -0
  31. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/README.md +0 -0
  32. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/__init__.py +0 -0
  33. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_azure_storage_client.py +0 -0
  34. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_bind_upload_agent.py +0 -0
  35. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_connection.py +0 -0
  36. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_cursor.py +0 -0
  37. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_description.py +0 -0
  38. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_direct_file_operation_utils.py +0 -0
  39. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_file_transfer_agent.py +0 -0
  40. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_gcs_storage_client.py +0 -0
  41. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_network.py +0 -0
  42. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_ocsp_asn1crypto.py +0 -0
  43. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_ocsp_snowflake.py +0 -0
  44. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_pandas_tools.py +0 -0
  45. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_result_batch.py +0 -0
  46. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_result_set.py +0 -0
  47. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_s3_storage_client.py +0 -0
  48. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_session_manager.py +0 -0
  49. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_storage_client.py +0 -0
  50. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_telemetry.py +0 -0
  51. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/_time_util.py +0 -0
  52. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/__init__.py +0 -0
  53. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_by_plugin.py +0 -0
  54. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_default.py +0 -0
  55. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_idtoken.py +0 -0
  56. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_keypair.py +0 -0
  57. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_no_auth.py +0 -0
  58. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth.py +0 -0
  59. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth_code.py +0 -0
  60. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_oauth_credentials.py +0 -0
  61. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_okta.py +0 -0
  62. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_pat.py +0 -0
  63. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_usrpwdmfa.py +0 -0
  64. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_webbrowser.py +0 -0
  65. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/aio/auth/_workload_identity.py +0 -0
  66. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/arrow_context.py +0 -0
  67. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/__init__.py +0 -0
  68. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_http_server.py +0 -0
  69. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/_oauth_base.py +0 -0
  70. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/by_plugin.py +0 -0
  71. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/default.py +0 -0
  72. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/idtoken.py +0 -0
  73. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/keypair.py +0 -0
  74. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/no_auth.py +0 -0
  75. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth.py +0 -0
  76. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth_code.py +0 -0
  77. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/oauth_credentials.py +0 -0
  78. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/okta.py +0 -0
  79. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/pat.py +0 -0
  80. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/usrpwdmfa.py +0 -0
  81. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/webbrowser.py +0 -0
  82. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/auth/workload_identity.py +0 -0
  83. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/backoff_policies.py +0 -0
  84. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/bind_upload_agent.py +0 -0
  85. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/cache.py +0 -0
  86. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/compat.py +0 -0
  87. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/connection_diagnostic.py +0 -0
  88. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/constants.py +0 -0
  89. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter.py +0 -0
  90. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_issue23517.py +0 -0
  91. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_null.py +0 -0
  92. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/converter_snowsql.py +0 -0
  93. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/crl_cache.py +0 -0
  94. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/cursor.py +0 -0
  95. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/dbapi.py +0 -0
  96. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/description.py +0 -0
  97. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/direct_file_operation_utils.py +0 -0
  98. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/encryption_util.py +0 -0
  99. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/errorcode.py +0 -0
  100. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/errors.py +0 -0
  101. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/externals_utils/__init__.py +0 -0
  102. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/externals_utils/externals_setup.py +0 -0
  103. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/feature.py +0 -0
  104. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_compression_type.py +0 -0
  105. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_lock.py +0 -0
  106. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_transfer_agent.py +0 -0
  107. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/file_util.py +0 -0
  108. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/gcs_storage_client.py +0 -0
  109. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/gzip_decoder.py +0 -0
  110. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/interval_util.py +0 -0
  111. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/local_storage_client.py +0 -0
  112. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/log_configuration.py +0 -0
  113. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/logging_utils/__init__.py +0 -0
  114. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/logging_utils/filters.py +0 -0
  115. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/minicore/__init__.py +0 -0
  116. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  117. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +0 -0
  118. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +0 -0
  119. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +0 -0
  120. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +0 -0
  121. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +0 -0
  122. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +0 -0
  123. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +0 -0
  124. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +0 -0
  125. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +0 -0
  126. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +0 -0
  127. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +0 -0
  128. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +0 -0
  129. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +0 -0
  130. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +0 -0
  131. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +0 -0
  132. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +0 -0
  133. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +0 -0
  134. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +0 -0
  135. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +0 -0
  136. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +0 -0
  137. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +0 -0
  138. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +0 -0
  139. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +0 -0
  140. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +0 -0
  141. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +0 -0
  142. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +0 -0
  143. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +0 -0
  144. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +0 -0
  145. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +0 -0
  146. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +0 -0
  147. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +0 -0
  148. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +0 -0
  149. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +0 -0
  150. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +0 -0
  151. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +0 -0
  152. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +0 -0
  153. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +0 -0
  154. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +0 -0
  155. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +0 -0
  156. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +0 -0
  157. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +0 -0
  158. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +0 -0
  159. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +0 -0
  160. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +0 -0
  161. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +0 -0
  162. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +0 -0
  163. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +0 -0
  164. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +0 -0
  165. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +0 -0
  166. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +0 -0
  167. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +0 -0
  168. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +0 -0
  169. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +0 -0
  170. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +0 -0
  171. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +0 -0
  172. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +0 -0
  173. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +0 -0
  174. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +0 -0
  175. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +0 -0
  176. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +0 -0
  177. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +0 -0
  178. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +0 -0
  179. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +0 -0
  180. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +0 -0
  181. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +0 -0
  182. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +0 -0
  183. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +0 -0
  184. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +0 -0
  185. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +0 -0
  186. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +0 -0
  187. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +0 -0
  188. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +0 -0
  189. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +0 -0
  190. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +0 -0
  191. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +0 -0
  192. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +0 -0
  193. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +0 -0
  194. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +0 -0
  195. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +0 -0
  196. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +0 -0
  197. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +0 -0
  198. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +0 -0
  199. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +0 -0
  200. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +0 -0
  201. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +0 -0
  202. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +0 -0
  203. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +0 -0
  204. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +0 -0
  205. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +0 -0
  206. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +0 -0
  207. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +0 -0
  208. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/network.py +0 -0
  209. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ocsp_asn1crypto.py +0 -0
  210. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ocsp_snowflake.py +0 -0
  211. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/options.py +0 -0
  212. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/os_details.py +0 -0
  213. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/pandas_tools.py +0 -0
  214. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/proxy.py +0 -0
  215. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/py.typed +0 -0
  216. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/result_set.py +0 -0
  217. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/s3_storage_client.py +0 -0
  218. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/secret_detector.py +0 -0
  219. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/session_manager.py +0 -0
  220. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sf_dirs.py +0 -0
  221. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sfbinaryformat.py +0 -0
  222. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sfdatetime.py +0 -0
  223. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/snow_logging.py +0 -0
  224. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/sqlstate.py +0 -0
  225. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ssd_internal_keys.py +0 -0
  226. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/ssl_wrap_socket.py +0 -0
  227. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/storage_client.py +0 -0
  228. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/telemetry.py +0 -0
  229. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/telemetry_oob.py +0 -0
  230. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/test_util.py +0 -0
  231. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/time_util.py +0 -0
  232. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/__init__.py +0 -0
  233. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_certs.py +0 -0
  234. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_ocsp_response.py +0 -0
  235. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/dump_ocsp_response_cache.py +0 -0
  236. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/tool/probe_connection.py +0 -0
  237. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/url_util.py +0 -0
  238. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/__init__.py +0 -0
  239. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/LICENSE +0 -0
  240. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/__init__.py +0 -0
  241. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/__version__.py +0 -0
  242. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/_internal_utils.py +0 -0
  243. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/adapters.py +0 -0
  244. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/api.py +0 -0
  245. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/auth.py +0 -0
  246. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/certs.py +0 -0
  247. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/compat.py +0 -0
  248. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/cookies.py +0 -0
  249. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/exceptions.py +0 -0
  250. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/help.py +0 -0
  251. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/hooks.py +0 -0
  252. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/models.py +0 -0
  253. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/packages.py +0 -0
  254. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/sessions.py +0 -0
  255. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/status_codes.py +0 -0
  256. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/structures.py +0 -0
  257. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/requests/utils.py +0 -0
  258. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/LICENSE.txt +0 -0
  259. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/__init__.py +0 -0
  260. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_base_connection.py +0 -0
  261. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_collections.py +0 -0
  262. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_request_methods.py +0 -0
  263. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/_version.py +0 -0
  264. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/connection.py +0 -0
  265. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/connectionpool.py +0 -0
  266. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  267. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +0 -0
  268. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +0 -0
  269. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +0 -0
  270. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +0 -0
  271. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +0 -0
  272. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +0 -0
  273. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +0 -0
  274. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/contrib/socks.py +0 -0
  275. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/exceptions.py +0 -0
  276. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/fields.py +0 -0
  277. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/filepost.py +0 -0
  278. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/__init__.py +0 -0
  279. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/connection.py +0 -0
  280. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/http2/probe.py +0 -0
  281. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/poolmanager.py +0 -0
  282. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/py.typed +0 -0
  283. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/response.py +0 -0
  284. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/__init__.py +0 -0
  285. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/connection.py +0 -0
  286. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/proxy.py +0 -0
  287. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/request.py +0 -0
  288. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/response.py +0 -0
  289. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/retry.py +0 -0
  290. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssl_.py +0 -0
  291. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +0 -0
  292. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/ssltransport.py +0 -0
  293. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/timeout.py +0 -0
  294. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/url.py +0 -0
  295. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/util.py +0 -0
  296. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake/connector/vendored/urllib3/util/wait.py +0 -0
  297. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/SOURCES.txt +0 -0
  298. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/dependency_links.txt +0 -0
  299. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/entry_points.txt +0 -0
  300. {snowflake_connector_python-4.3.0 → snowflake_connector_python-4.4.0}/src/snowflake_connector_python.egg-info/not-zip-safe +0 -0
  301. {snowflake_connector_python-4.3.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,6 +7,17 @@ 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
+
10
21
  - v4.3.0(February 12,2026)
11
22
  - Ensured proper list conversion - the converter runs to_snowflake on all list elements.
12
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.
@@ -14,7 +25,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
14
25
  - Log a warning when using http protocol for OAuth urls.
15
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.
16
27
  - Bumped up vendored `urllib3` to `2.6.3`
17
- - Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema incosistency between batches.
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
+
18
32
 
19
33
  - v4.2.0(January 07,2026)
20
34
  - Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.3.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,6 +94,17 @@ 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
+
96
108
  - v4.3.0(February 12,2026)
97
109
  - Ensured proper list conversion - the converter runs to_snowflake on all list elements.
98
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.
@@ -100,7 +112,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
100
112
  - Log a warning when using http protocol for OAuth urls.
101
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.
102
114
  - Bumped up vendored `urllib3` to `2.6.3`
103
- - Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema incosistency between batches.
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
+
104
119
 
105
120
  - v4.2.0(January 07,2026)
106
121
  - Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
@@ -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
@@ -10,7 +10,6 @@ import threading
10
10
  import time
11
11
  from enum import Enum
12
12
  from inspect import stack
13
- from pathlib import Path
14
13
  from random import choice
15
14
  from threading import Timer
16
15
  from uuid import UUID
@@ -188,26 +187,10 @@ class _CoreLoader:
188
187
  @staticmethod
189
188
  def _detect_libc() -> str:
190
189
  """Detect libc type on Linux (glibc vs musl)."""
191
- # Check if we're on Alpine/musl
192
- if Path("/etc/alpine-release").exists():
193
- return "musl"
194
-
195
- # Check for musl by looking at the libc library
196
- try:
197
- import subprocess
198
-
199
- result = subprocess.run(
200
- ["ldd", "--version"],
201
- capture_output=True,
202
- text=True,
203
- )
204
- if "musl" in result.stdout.lower() or "musl" in result.stderr.lower():
205
- return "musl"
206
- except Exception:
207
- pass
208
-
209
- # Default to glibc
210
- return "glibc"
190
+ lib, _ = platform.libc_ver()
191
+ if lib == "glibc":
192
+ return "glibc"
193
+ return "musl"
211
194
 
212
195
  @staticmethod
213
196
  def _get_platform_subdir() -> str:
@@ -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
  {
@@ -63,6 +63,7 @@ from ..session_manager import SessionManager as SyncSessionManager
63
63
  from ..session_manager import SessionManagerFactory
64
64
  from ..sqlstate import SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED
65
65
  from ..token_cache import TokenCache, TokenKey, TokenType
66
+ from ..util_text import expand_tilde
66
67
  from ..version import VERSION
67
68
  from .no_auth import AuthNoAuth
68
69
  from .oauth import AuthByOAuth
@@ -88,6 +89,7 @@ AUTHENTICATION_REQUEST_KEY_WHITELIST = {
88
89
  "CLIENT_ENVIRONMENT",
89
90
  "EXT_AUTHN_DUO_METHOD",
90
91
  "LOGIN_NAME",
92
+ "SECONDARY_ROLES",
91
93
  "SESSION_PARAMETERS",
92
94
  "SVN_REVISION",
93
95
  }
@@ -261,6 +263,11 @@ class Auth:
261
263
  if session_parameters:
262
264
  body["data"]["SESSION_PARAMETERS"] = session_parameters
263
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
+
264
271
  logger.debug(
265
272
  "body['data']: %s",
266
273
  {
@@ -643,6 +650,8 @@ def get_token_from_private_key(
643
650
 
644
651
  def get_public_key_fingerprint(private_key_file: str, password: str) -> str:
645
652
  """Helper function to generate the public key fingerprint from the private key file"""
653
+ private_key_file = expand_tilde(private_key_file)
654
+
646
655
  with open(private_key_file, "rb") as key:
647
656
  p_key = load_pem_private_key(
648
657
  key.read(), password=password.encode(), backend=default_backend()
@@ -124,7 +124,9 @@ class SnowflakeAzureRestClient(SnowflakeStorageClient):
124
124
  self.retry_count[retry_id] = 0
125
125
  r = self._send_request_with_authentication_and_retry("HEAD", url, retry_id)
126
126
  if r.status_code == 200:
127
- meta.result_status = ResultStatus.UPLOADED
127
+ # If we are in download path, do not update to UPLOADED
128
+ if meta.result_status != ResultStatus.DOWNLOADED:
129
+ meta.result_status = ResultStatus.UPLOADED
128
130
  enc_data_str = r.headers.get(ENCRYPTION_DATA)
129
131
  encryption_data = None if enc_data_str is None else json.loads(enc_data_str)
130
132
  encryption_metadata = (
@@ -29,12 +29,21 @@ LOGGER = logging.getLogger(__name__)
29
29
  READABLE_BY_OTHERS = stat.S_IRGRP | stat.S_IROTH
30
30
  WRITABLE_BY_OTHERS = stat.S_IWGRP | stat.S_IWOTH
31
31
 
32
- SKIP_WARNING_ENV_VAR = "SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE"
32
+ DEPRECATED_SKIP_WARNING_ENV_VAR = "SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE"
33
+ SKIP_WARNING_ENV_VAR = "SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION"
33
34
 
34
35
 
35
36
  def _should_skip_warning_for_read_permissions_on_config_file() -> bool:
36
37
  """Check if the warning should be skipped based on environment variable."""
37
- return os.getenv(SKIP_WARNING_ENV_VAR, "false").lower() == "true"
38
+ if SKIP_WARNING_ENV_VAR in os.environ:
39
+ return os.getenv(SKIP_WARNING_ENV_VAR, "false").lower() == "true"
40
+ # Else fallback to old value
41
+ if DEPRECATED_SKIP_WARNING_ENV_VAR in os.environ:
42
+ warn(
43
+ f"{DEPRECATED_SKIP_WARNING_ENV_VAR} is deprecated. Please use {SKIP_WARNING_ENV_VAR} instead."
44
+ )
45
+ return os.getenv(DEPRECATED_SKIP_WARNING_ENV_VAR, "false").lower() == "true"
46
+ return False
38
47
 
39
48
 
40
49
  class ConfigSliceOptions(NamedTuple):
@@ -324,14 +333,36 @@ class ConfigManager:
324
333
  )
325
334
  for filep, sliceoptions, section in itertools.chain(
326
335
  ((self.file_path, config_slice_options, None),),
327
- self._slices,
336
+ (
337
+ (
338
+ s.path,
339
+ (
340
+ s.options._replace(
341
+ check_permissions=not skip_file_permissions_check
342
+ )
343
+ if skip_file_permissions_check
344
+ else s.options
345
+ ),
346
+ s.section,
347
+ )
348
+ for s in self._slices
349
+ ),
328
350
  ):
329
351
  if sliceoptions.only_in_slice:
330
352
  del read_config_file[section]
331
353
  try:
332
354
  if not filep.exists():
355
+ # Python 3.14+ (cpython#118243): Path.exists() suppresses
356
+ # PermissionError and returns False instead of raising, so
357
+ # we explicitly check parent directory access.
358
+ if not os.access(filep.parent, os.R_OK | os.X_OK):
359
+ LOGGER.debug(
360
+ f"Fail to read configuration file from {str(filep)} due to no permission on its parent directory"
361
+ )
333
362
  continue
334
363
  except PermissionError:
364
+ # Python < 3.14: Path.exists() raises PermissionError when
365
+ # the parent directory is not accessible.
335
366
  LOGGER.debug(
336
367
  f"Fail to read configuration file from {str(filep)} due to no permission on its parent directory"
337
368
  )
@@ -142,7 +142,7 @@ from .sqlstate import SQLSTATE_CONNECTION_NOT_EXISTS, SQLSTATE_FEATURE_NOT_SUPPO
142
142
  from .telemetry import TelemetryClient, TelemetryData, TelemetryField
143
143
  from .time_util import HeartBeatTimer, get_time_millis
144
144
  from .url_util import extract_top_level_domain_from_hostname
145
- from .util_text import construct_hostname, parse_account, split_statements
145
+ from .util_text import construct_hostname, expand_tilde, parse_account, split_statements
146
146
  from .wif_util import AttestationProvider
147
147
 
148
148
  if sys.version_info >= (3, 13) or typing.TYPE_CHECKING:
@@ -173,6 +173,9 @@ def _get_private_bytes_from_file(
173
173
  ) -> bytes:
174
174
  if private_key_file_pwd is not None and isinstance(private_key_file_pwd, str):
175
175
  private_key_file_pwd = private_key_file_pwd.encode("utf-8")
176
+
177
+ private_key_file = expand_tilde(private_key_file)
178
+
176
179
  with open(private_key_file, "rb") as key:
177
180
  private_key = serialization.load_pem_private_key(
178
181
  key.read(),
@@ -483,6 +486,10 @@ DEFAULT_CONFIGURATION: dict[str, tuple[Any, type | tuple[type, ...]]] = {
483
486
  None,
484
487
  (type(None), int),
485
488
  ), # Maximum CRL file size in bytes
489
+ "secondary_roles": (
490
+ None,
491
+ (type(None), str),
492
+ ), # Secondary roles mode: ALL or NONE or no value
486
493
  }
487
494
 
488
495
  APPLICATION_RE = re.compile(r"[\w\d_]+")
@@ -64,7 +64,7 @@ class CRLConfig:
64
64
  crl_cache_removal_delay_days: int = 7
65
65
  crl_cache_cleanup_interval_hours: int = 1
66
66
  crl_cache_start_cleanup: bool = False
67
- crl_download_max_size: int = 200 * 1024 * 1024 # 200 MB
67
+ crl_download_max_size: int = 20 * 1024 * 1024 # 20 MB
68
68
  unsafe_skip_file_permissions_check: bool = False
69
69
 
70
70
  @classmethod
@@ -195,7 +195,7 @@ def is_azure_vm(
195
195
  try:
196
196
  token_resp = session_manager.get(
197
197
  "http://169.254.169.254/metadata/instance?api-version=2021-02-01",
198
- headers={"Metadata": "True"},
198
+ headers={"Metadata": "true"},
199
199
  timeout=platform_detection_timeout_seconds,
200
200
  )
201
201
  return (
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import abc
4
+ import gzip
4
5
  import json
5
6
  import time
6
7
  from base64 import b64decode
@@ -52,6 +53,25 @@ SSE_C_ALGORITHM = "x-amz-server-side-encryption-customer-algorithm"
52
53
  SSE_C_KEY = "x-amz-server-side-encryption-customer-key"
53
54
  SSE_C_AES = "AES256"
54
55
 
56
+ _GZIP_MAGIC = b"\x1f\x8b"
57
+
58
+
59
+ def _ensure_decompressed(response: Response) -> None:
60
+ """Decompress the response body if HTTP-level gzip decompression was skipped.
61
+
62
+ Cloud storage (S3/GCS/Azure) may serve result-set chunks as raw gzip blobs
63
+ without a ``Content-Encoding: gzip`` header, in which case urllib3's
64
+ transparent decompression never activates. Detect this by inspecting the
65
+ cached *response.content* for the gzip magic number and decompress in-place.
66
+ """
67
+ content = response.content
68
+ if isinstance(content, bytes) and content[:2] == _GZIP_MAGIC:
69
+ logger.debug(
70
+ "Response body starts with gzip magic number but was not "
71
+ "decompressed by the HTTP stack; decompressing explicitly."
72
+ )
73
+ response._content = gzip.decompress(content)
74
+
55
75
 
56
76
  def _create_nanoarrow_iterator(
57
77
  data: bytes,
@@ -418,6 +438,8 @@ class ResultBatch(abc.ABC):
418
438
  self._metrics[DownloadMetrics.download.value] = (
419
439
  download_metric.get_timing_millis()
420
440
  )
441
+
442
+ _ensure_decompressed(response)
421
443
  return response
422
444
 
423
445
  @abc.abstractmethod
@@ -69,7 +69,7 @@ class TokenCache(ABC):
69
69
 
70
70
  Platform-specific implementations:
71
71
  - macOS/Windows: Uses OS keyring (Keychain/Credential Manager) via 'keyring' library
72
- - Linux: Uses encrypted JSON file in ~/.cache/snowflake/ with 0o600 permissions
72
+ - Linux: Uses JSON file in ~/.cache/snowflake/ with 0o600 permissions
73
73
  - Fallback: NoopTokenCache (no caching) if secure storage unavailable
74
74
 
75
75
  Tokens are keyed by (host, user, token_type) to support multiple accounts.
@@ -8,7 +8,8 @@ import random
8
8
  import re
9
9
  import string
10
10
  from io import StringIO
11
- from typing import Sequence
11
+ from pathlib import Path
12
+ from typing import Any, Sequence
12
13
 
13
14
  COMMENT_PATTERN_RE = re.compile(r"^\s*\-\-")
14
15
  EMPTY_LINE_RE = re.compile(r"^\s*$")
@@ -301,3 +302,19 @@ def get_md5_for_integrity(text: str | bytes) -> bytes:
301
302
  md5 = hashlib.md5(usedforsecurity=False)
302
303
  md5.update(text)
303
304
  return md5.digest()
305
+
306
+
307
+ def expand_tilde(path_to_expand: Any) -> Any:
308
+ try:
309
+ path_to_expand = (
310
+ str(Path(path_to_expand).expanduser())
311
+ if isinstance(path_to_expand, str)
312
+ else path_to_expand
313
+ )
314
+ except Exception as e:
315
+ # user home could not be resolved
316
+ _logger.debug(
317
+ "User home could not be determined, not expanding tilde. Exception: %s", e
318
+ )
319
+
320
+ return path_to_expand
@@ -1,3 +1,3 @@
1
1
  # Update this for the versions
2
2
  # Don't change the forth version number from None
3
- VERSION = (4, 3, 0, None)
3
+ VERSION = (4, 4, 0, None)
@@ -331,7 +331,7 @@ def create_azure_attestation(
331
331
 
332
332
  If the application isn't running on Azure or no credentials were found, raises an error.
333
333
  """
334
- headers = {"Metadata": "True"}
334
+ headers = {"Metadata": "true"}
335
335
  url_without_query_string = "http://169.254.169.254/metadata/identity/oauth2/token"
336
336
  query_params = f"api-version=2018-02-01&resource={snowflake_entra_resource}"
337
337
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-connector-python
3
- Version: 4.3.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,6 +94,17 @@ 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
+
96
108
  - v4.3.0(February 12,2026)
97
109
  - Ensured proper list conversion - the converter runs to_snowflake on all list elements.
98
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.
@@ -100,7 +112,10 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
100
112
  - Log a warning when using http protocol for OAuth urls.
101
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.
102
114
  - Bumped up vendored `urllib3` to `2.6.3`
103
- - Added `force_microseconds_precision` to `cursor.fetch_arrow_all` and `cursor.fetch_pandas_all` to avoid PyArrow schema incosistency between batches.
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
+
104
119
 
105
120
  - v4.2.0(January 07,2026)
106
121
  - Added `SnowflakeCursor.stats` property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where `rowcount` is insufficient.
@@ -1,6 +1,6 @@
1
1
  asn1crypto<2.0.0,>0.24.0
2
- cryptography>=44.0.1
3
- pyOpenSSL<26.0.0,>=24.0.0
2
+ cryptography>=46.0.5
3
+ pyOpenSSL>=24.0.0
4
4
  pyjwt<3.0.0,>=2.10.1
5
5
  pytz
6
6
  requests<3.0.0,>=2.32.4
@@ -27,7 +27,7 @@ botocore>=1.24
27
27
  Cython
28
28
  coverage
29
29
  more-itertools
30
- numpy<=2.2.4
30
+ numpy<=2.4.3
31
31
  pendulum!=2.1.1
32
32
  pexpect
33
33
  pytest<7.5.0
@@ -39,8 +39,8 @@ pytest-xdist
39
39
  pytzdata
40
40
  responses
41
41
 
42
- [development:python_version >= "3.10"]
43
- mitmproxy>=6.0.0
42
+ [development:python_version >= "3.12"]
43
+ mitmproxy>=12.0.0
44
44
 
45
45
  [pandas]
46
46
  pyarrow>=14.0.1