snowflake-connector-python 4.4.0__cp314-cp314-win_amd64.whl

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/__init__.py +118 -0
  2. snowflake/connector/_query_context_cache.py +276 -0
  3. snowflake/connector/_sql_util.py +48 -0
  4. snowflake/connector/_utils.py +353 -0
  5. snowflake/connector/aio/README.md +88 -0
  6. snowflake/connector/aio/__init__.py +163 -0
  7. snowflake/connector/aio/_azure_storage_client.py +227 -0
  8. snowflake/connector/aio/_bind_upload_agent.py +69 -0
  9. snowflake/connector/aio/_connection.py +1216 -0
  10. snowflake/connector/aio/_cursor.py +1402 -0
  11. snowflake/connector/aio/_description.py +5 -0
  12. snowflake/connector/aio/_direct_file_operation_utils.py +88 -0
  13. snowflake/connector/aio/_file_transfer_agent.py +316 -0
  14. snowflake/connector/aio/_gcs_storage_client.py +360 -0
  15. snowflake/connector/aio/_network.py +860 -0
  16. snowflake/connector/aio/_ocsp_asn1crypto.py +51 -0
  17. snowflake/connector/aio/_ocsp_snowflake.py +608 -0
  18. snowflake/connector/aio/_pandas_tools.py +561 -0
  19. snowflake/connector/aio/_result_batch.py +442 -0
  20. snowflake/connector/aio/_result_set.py +309 -0
  21. snowflake/connector/aio/_s3_storage_client.py +460 -0
  22. snowflake/connector/aio/_session_manager.py +588 -0
  23. snowflake/connector/aio/_storage_client.py +331 -0
  24. snowflake/connector/aio/_telemetry.py +97 -0
  25. snowflake/connector/aio/_time_util.py +57 -0
  26. snowflake/connector/aio/_wif_util.py +324 -0
  27. snowflake/connector/aio/auth/__init__.py +52 -0
  28. snowflake/connector/aio/auth/_auth.py +406 -0
  29. snowflake/connector/aio/auth/_by_plugin.py +131 -0
  30. snowflake/connector/aio/auth/_default.py +28 -0
  31. snowflake/connector/aio/auth/_idtoken.py +54 -0
  32. snowflake/connector/aio/auth/_keypair.py +60 -0
  33. snowflake/connector/aio/auth/_no_auth.py +31 -0
  34. snowflake/connector/aio/auth/_oauth.py +27 -0
  35. snowflake/connector/aio/auth/_oauth_code.py +117 -0
  36. snowflake/connector/aio/auth/_oauth_credentials.py +100 -0
  37. snowflake/connector/aio/auth/_okta.py +247 -0
  38. snowflake/connector/aio/auth/_pat.py +27 -0
  39. snowflake/connector/aio/auth/_usrpwdmfa.py +30 -0
  40. snowflake/connector/aio/auth/_webbrowser.py +405 -0
  41. snowflake/connector/aio/auth/_workload_identity.py +60 -0
  42. snowflake/connector/arrow_context.py +211 -0
  43. snowflake/connector/auth/__init__.py +53 -0
  44. snowflake/connector/auth/_auth.py +669 -0
  45. snowflake/connector/auth/_http_server.py +257 -0
  46. snowflake/connector/auth/_oauth_base.py +472 -0
  47. snowflake/connector/auth/by_plugin.py +219 -0
  48. snowflake/connector/auth/default.py +36 -0
  49. snowflake/connector/auth/idtoken.py +72 -0
  50. snowflake/connector/auth/keypair.py +225 -0
  51. snowflake/connector/auth/no_auth.py +39 -0
  52. snowflake/connector/auth/oauth.py +49 -0
  53. snowflake/connector/auth/oauth_code.py +490 -0
  54. snowflake/connector/auth/oauth_credentials.py +71 -0
  55. snowflake/connector/auth/okta.py +339 -0
  56. snowflake/connector/auth/pat.py +40 -0
  57. snowflake/connector/auth/usrpwdmfa.py +69 -0
  58. snowflake/connector/auth/webbrowser.py +514 -0
  59. snowflake/connector/auth/workload_identity.py +110 -0
  60. snowflake/connector/azure_storage_client.py +278 -0
  61. snowflake/connector/backoff_policies.py +141 -0
  62. snowflake/connector/bind_upload_agent.py +89 -0
  63. snowflake/connector/cache.py +696 -0
  64. snowflake/connector/compat.py +127 -0
  65. snowflake/connector/config_manager.py +553 -0
  66. snowflake/connector/connection.py +2671 -0
  67. snowflake/connector/connection_diagnostic.py +793 -0
  68. snowflake/connector/constants.py +460 -0
  69. snowflake/connector/converter.py +809 -0
  70. snowflake/connector/converter_issue23517.py +87 -0
  71. snowflake/connector/converter_null.py +14 -0
  72. snowflake/connector/converter_snowsql.py +205 -0
  73. snowflake/connector/crl.py +919 -0
  74. snowflake/connector/crl_cache.py +734 -0
  75. snowflake/connector/cursor.py +2099 -0
  76. snowflake/connector/dbapi.py +53 -0
  77. snowflake/connector/description.py +21 -0
  78. snowflake/connector/direct_file_operation_utils.py +88 -0
  79. snowflake/connector/encryption_util.py +220 -0
  80. snowflake/connector/errorcode.py +94 -0
  81. snowflake/connector/errors.py +666 -0
  82. snowflake/connector/externals_utils/__init__.py +0 -0
  83. snowflake/connector/externals_utils/externals_setup.py +30 -0
  84. snowflake/connector/feature.py +4 -0
  85. snowflake/connector/file_compression_type.py +118 -0
  86. snowflake/connector/file_lock.py +72 -0
  87. snowflake/connector/file_transfer_agent.py +1244 -0
  88. snowflake/connector/file_util.py +153 -0
  89. snowflake/connector/gcs_storage_client.py +476 -0
  90. snowflake/connector/gzip_decoder.py +85 -0
  91. snowflake/connector/interval_util.py +26 -0
  92. snowflake/connector/local_storage_client.py +90 -0
  93. snowflake/connector/log_configuration.py +62 -0
  94. snowflake/connector/logging_utils/__init__.py +0 -0
  95. snowflake/connector/logging_utils/filters.py +72 -0
  96. snowflake/connector/minicore/__init__.py +0 -0
  97. snowflake/connector/minicore/aix_ppc64/libsf_mini_core.a +0 -0
  98. snowflake/connector/minicore/aix_ppc64/libsf_mini_core_static.a +0 -0
  99. snowflake/connector/minicore/linux_aarch64_glibc/libsf_mini_core.so +0 -0
  100. snowflake/connector/minicore/linux_aarch64_musl/libsf_mini_core.so +0 -0
  101. snowflake/connector/minicore/linux_x86_64_glibc/libsf_mini_core.so +0 -0
  102. snowflake/connector/minicore/linux_x86_64_musl/libsf_mini_core.so +0 -0
  103. snowflake/connector/minicore/macos_aarch64/libsf_mini_core.dylib +0 -0
  104. snowflake/connector/minicore/macos_x86_64/libsf_mini_core.dylib +0 -0
  105. snowflake/connector/minicore/windows_x86_64/sf_mini_core.dll +0 -0
  106. snowflake/connector/minicore/windows_x86_64/sf_mini_core_static.lib +0 -0
  107. snowflake/connector/nanoarrow_arrow_iterator.cp314-win_amd64.pyd +0 -0
  108. snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.cpp +60 -0
  109. snowflake/connector/nanoarrow_cpp/ArrowIterator/ArrayConverter.hpp +29 -0
  110. snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.cpp +19 -0
  111. snowflake/connector/nanoarrow_cpp/ArrowIterator/BinaryConverter.hpp +26 -0
  112. snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.cpp +21 -0
  113. snowflake/connector/nanoarrow_cpp/ArrowIterator/BooleanConverter.hpp +23 -0
  114. snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.cpp +570 -0
  115. snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowChunkIterator.hpp +98 -0
  116. snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.cpp +125 -0
  117. snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowIterator.hpp +115 -0
  118. snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.cpp +1140 -0
  119. snowflake/connector/nanoarrow_cpp/ArrowIterator/CArrowTableIterator.hpp +138 -0
  120. snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.cpp +47 -0
  121. snowflake/connector/nanoarrow_cpp/ArrowIterator/DateConverter.hpp +46 -0
  122. snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.cpp +83 -0
  123. snowflake/connector/nanoarrow_cpp/ArrowIterator/DecFloatConverter.hpp +35 -0
  124. snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.cpp +97 -0
  125. snowflake/connector/nanoarrow_cpp/ArrowIterator/DecimalConverter.hpp +72 -0
  126. snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.cpp +73 -0
  127. snowflake/connector/nanoarrow_cpp/ArrowIterator/FixedSizeListConverter.hpp +28 -0
  128. snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.cpp +30 -0
  129. snowflake/connector/nanoarrow_cpp/ArrowIterator/FloatConverter.hpp +35 -0
  130. snowflake/connector/nanoarrow_cpp/ArrowIterator/IColumnConverter.hpp +17 -0
  131. snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.cpp +23 -0
  132. snowflake/connector/nanoarrow_cpp/ArrowIterator/IntConverter.hpp +45 -0
  133. snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.cpp +75 -0
  134. snowflake/connector/nanoarrow_cpp/ArrowIterator/IntervalConverter.hpp +57 -0
  135. snowflake/connector/nanoarrow_cpp/ArrowIterator/LICENSE.txt +209 -0
  136. snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.cpp +75 -0
  137. snowflake/connector/nanoarrow_cpp/ArrowIterator/MapConverter.hpp +30 -0
  138. snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.cpp +46 -0
  139. snowflake/connector/nanoarrow_cpp/ArrowIterator/ObjectConverter.hpp +29 -0
  140. snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.cpp +8 -0
  141. snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Common.hpp +95 -0
  142. snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.cpp +57 -0
  143. snowflake/connector/nanoarrow_cpp/ArrowIterator/Python/Helpers.hpp +36 -0
  144. snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.cpp +34 -0
  145. snowflake/connector/nanoarrow_cpp/ArrowIterator/SnowflakeType.hpp +48 -0
  146. snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.cpp +19 -0
  147. snowflake/connector/nanoarrow_cpp/ArrowIterator/StringConverter.hpp +26 -0
  148. snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.cpp +36 -0
  149. snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeConverter.hpp +31 -0
  150. snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.cpp +346 -0
  151. snowflake/connector/nanoarrow_cpp/ArrowIterator/TimeStampConverter.hpp +145 -0
  152. snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/macros.hpp +14 -0
  153. snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.cpp +67 -0
  154. snowflake/connector/nanoarrow_cpp/ArrowIterator/Util/time.hpp +68 -0
  155. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_accessors.h +101 -0
  156. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_alloc.h +127 -0
  157. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_assert.h +45 -0
  158. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_builder.h +1908 -0
  159. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_emitter.h +215 -0
  160. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_endian.h +125 -0
  161. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_epilogue.h +7 -0
  162. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_flatbuffers.h +55 -0
  163. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_identifier.h +148 -0
  164. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_iov.h +31 -0
  165. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_prologue.h +8 -0
  166. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_refmap.h +144 -0
  167. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_rtconfig.h +162 -0
  168. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_types.h +97 -0
  169. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/flatcc_verifier.h +239 -0
  170. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/flatcc_portable.h +14 -0
  171. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/paligned_alloc.h +210 -0
  172. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pattributes.h +84 -0
  173. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic.h +84 -0
  174. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_pop.h +20 -0
  175. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pdiagnostic_push.h +51 -0
  176. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian.h +206 -0
  177. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pendian_detect.h +118 -0
  178. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinline.h +19 -0
  179. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pinttypes.h +52 -0
  180. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable.h +2 -0
  181. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/portable_basic.h +25 -0
  182. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstatic_assert.h +67 -0
  183. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdalign.h +162 -0
  184. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pstdint.h +898 -0
  185. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/punaligned.h +190 -0
  186. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pversion.h +6 -0
  187. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc/portable/pwarnings.h +52 -0
  188. snowflake/connector/nanoarrow_cpp/ArrowIterator/flatcc.c +3204 -0
  189. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.c +3217 -0
  190. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.h +3618 -0
  191. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow.hpp +379 -0
  192. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_arrow_iterator.pyx +262 -0
  193. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.c +512 -0
  194. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_device.h +350 -0
  195. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.c +33273 -0
  196. snowflake/connector/nanoarrow_cpp/ArrowIterator/nanoarrow_ipc.h +397 -0
  197. snowflake/connector/nanoarrow_cpp/Logging/logging.cpp +100 -0
  198. snowflake/connector/nanoarrow_cpp/Logging/logging.hpp +49 -0
  199. snowflake/connector/network.py +1227 -0
  200. snowflake/connector/ocsp_asn1crypto.py +447 -0
  201. snowflake/connector/ocsp_snowflake.py +1939 -0
  202. snowflake/connector/options.py +179 -0
  203. snowflake/connector/os_details.py +88 -0
  204. snowflake/connector/pandas_tools.py +734 -0
  205. snowflake/connector/platform_detection.py +555 -0
  206. snowflake/connector/proxy.py +28 -0
  207. snowflake/connector/py.typed +0 -0
  208. snowflake/connector/result_batch.py +917 -0
  209. snowflake/connector/result_set.py +340 -0
  210. snowflake/connector/s3_storage_client.py +614 -0
  211. snowflake/connector/secret_detector.py +181 -0
  212. snowflake/connector/session_manager.py +650 -0
  213. snowflake/connector/sf_dirs.py +64 -0
  214. snowflake/connector/sfbinaryformat.py +35 -0
  215. snowflake/connector/sfdatetime.py +345 -0
  216. snowflake/connector/snow_logging.py +144 -0
  217. snowflake/connector/sqlstate.py +9 -0
  218. snowflake/connector/ssd_internal_keys.py +30 -0
  219. snowflake/connector/ssl_wrap_socket.py +281 -0
  220. snowflake/connector/storage_client.py +486 -0
  221. snowflake/connector/telemetry.py +254 -0
  222. snowflake/connector/telemetry_oob.py +544 -0
  223. snowflake/connector/test_util.py +30 -0
  224. snowflake/connector/time_util.py +159 -0
  225. snowflake/connector/token_cache.py +457 -0
  226. snowflake/connector/tool/__init__.py +0 -0
  227. snowflake/connector/tool/dump_certs.py +57 -0
  228. snowflake/connector/tool/dump_ocsp_response.py +139 -0
  229. snowflake/connector/tool/dump_ocsp_response_cache.py +194 -0
  230. snowflake/connector/tool/probe_connection.py +69 -0
  231. snowflake/connector/url_util.py +55 -0
  232. snowflake/connector/util_text.py +320 -0
  233. snowflake/connector/vendored/__init__.py +3 -0
  234. snowflake/connector/vendored/requests/LICENSE +175 -0
  235. snowflake/connector/vendored/requests/__init__.py +184 -0
  236. snowflake/connector/vendored/requests/__version__.py +14 -0
  237. snowflake/connector/vendored/requests/_internal_utils.py +50 -0
  238. snowflake/connector/vendored/requests/adapters.py +696 -0
  239. snowflake/connector/vendored/requests/api.py +157 -0
  240. snowflake/connector/vendored/requests/auth.py +314 -0
  241. snowflake/connector/vendored/requests/certs.py +17 -0
  242. snowflake/connector/vendored/requests/compat.py +106 -0
  243. snowflake/connector/vendored/requests/cookies.py +561 -0
  244. snowflake/connector/vendored/requests/exceptions.py +151 -0
  245. snowflake/connector/vendored/requests/help.py +134 -0
  246. snowflake/connector/vendored/requests/hooks.py +33 -0
  247. snowflake/connector/vendored/requests/models.py +1039 -0
  248. snowflake/connector/vendored/requests/packages.py +23 -0
  249. snowflake/connector/vendored/requests/sessions.py +831 -0
  250. snowflake/connector/vendored/requests/status_codes.py +128 -0
  251. snowflake/connector/vendored/requests/structures.py +99 -0
  252. snowflake/connector/vendored/requests/utils.py +1086 -0
  253. snowflake/connector/vendored/urllib3/LICENSE.txt +21 -0
  254. snowflake/connector/vendored/urllib3/__init__.py +211 -0
  255. snowflake/connector/vendored/urllib3/_base_connection.py +165 -0
  256. snowflake/connector/vendored/urllib3/_collections.py +487 -0
  257. snowflake/connector/vendored/urllib3/_request_methods.py +278 -0
  258. snowflake/connector/vendored/urllib3/_version.py +34 -0
  259. snowflake/connector/vendored/urllib3/connection.py +1108 -0
  260. snowflake/connector/vendored/urllib3/connectionpool.py +1178 -0
  261. snowflake/connector/vendored/urllib3/contrib/__init__.py +0 -0
  262. snowflake/connector/vendored/urllib3/contrib/emscripten/__init__.py +17 -0
  263. snowflake/connector/vendored/urllib3/contrib/emscripten/connection.py +260 -0
  264. snowflake/connector/vendored/urllib3/contrib/emscripten/emscripten_fetch_worker.js +110 -0
  265. snowflake/connector/vendored/urllib3/contrib/emscripten/fetch.py +726 -0
  266. snowflake/connector/vendored/urllib3/contrib/emscripten/request.py +22 -0
  267. snowflake/connector/vendored/urllib3/contrib/emscripten/response.py +277 -0
  268. snowflake/connector/vendored/urllib3/contrib/pyopenssl.py +564 -0
  269. snowflake/connector/vendored/urllib3/contrib/socks.py +228 -0
  270. snowflake/connector/vendored/urllib3/exceptions.py +335 -0
  271. snowflake/connector/vendored/urllib3/fields.py +341 -0
  272. snowflake/connector/vendored/urllib3/filepost.py +89 -0
  273. snowflake/connector/vendored/urllib3/http2/__init__.py +53 -0
  274. snowflake/connector/vendored/urllib3/http2/connection.py +356 -0
  275. snowflake/connector/vendored/urllib3/http2/probe.py +87 -0
  276. snowflake/connector/vendored/urllib3/poolmanager.py +651 -0
  277. snowflake/connector/vendored/urllib3/py.typed +2 -0
  278. snowflake/connector/vendored/urllib3/response.py +1480 -0
  279. snowflake/connector/vendored/urllib3/util/__init__.py +42 -0
  280. snowflake/connector/vendored/urllib3/util/connection.py +137 -0
  281. snowflake/connector/vendored/urllib3/util/proxy.py +43 -0
  282. snowflake/connector/vendored/urllib3/util/request.py +263 -0
  283. snowflake/connector/vendored/urllib3/util/response.py +101 -0
  284. snowflake/connector/vendored/urllib3/util/retry.py +549 -0
  285. snowflake/connector/vendored/urllib3/util/ssl_.py +527 -0
  286. snowflake/connector/vendored/urllib3/util/ssl_match_hostname.py +159 -0
  287. snowflake/connector/vendored/urllib3/util/ssltransport.py +271 -0
  288. snowflake/connector/vendored/urllib3/util/timeout.py +275 -0
  289. snowflake/connector/vendored/urllib3/util/url.py +469 -0
  290. snowflake/connector/vendored/urllib3/util/util.py +42 -0
  291. snowflake/connector/vendored/urllib3/util/wait.py +124 -0
  292. snowflake/connector/version.py +3 -0
  293. snowflake/connector/wif_util.py +434 -0
  294. snowflake_connector_python-4.4.0.dist-info/DELVEWHEEL +2 -0
  295. snowflake_connector_python-4.4.0.dist-info/METADATA +1591 -0
  296. snowflake_connector_python-4.4.0.dist-info/RECORD +302 -0
  297. snowflake_connector_python-4.4.0.dist-info/WHEEL +5 -0
  298. snowflake_connector_python-4.4.0.dist-info/entry_points.txt +4 -0
  299. snowflake_connector_python-4.4.0.dist-info/licenses/LICENSE.txt +202 -0
  300. snowflake_connector_python-4.4.0.dist-info/licenses/NOTICE +8 -0
  301. snowflake_connector_python-4.4.0.dist-info/top_level.txt +1 -0
  302. snowflake_connector_python.libs/msvcp140-0f885b509a685d2bbfa652fed26b5fb3.dll +0 -0
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env python
2
+ """This module implements some constructors and singletons as required by the DB API v2.0 (PEP-249)."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import datetime
7
+ import time
8
+
9
+ from .constants import (
10
+ get_binary_types,
11
+ get_number_types,
12
+ get_string_types,
13
+ get_timestamp_types,
14
+ )
15
+
16
+
17
+ class _DBAPITypeObject:
18
+ def __init__(self, *values) -> None:
19
+ self.values = values
20
+
21
+ def __cmp__(self, other):
22
+ if other in self.values:
23
+ return 0
24
+ if other < self.values:
25
+ return 1
26
+ else:
27
+ return -1
28
+
29
+
30
+ Date = datetime.date
31
+ Time = datetime.time
32
+ Timestamp = datetime.datetime
33
+
34
+
35
+ def DateFromTicks(ticks: float) -> datetime.date:
36
+ return Date(*time.localtime(ticks)[:3])
37
+
38
+
39
+ def TimeFromTicks(ticks: float) -> datetime.time:
40
+ return Time(*time.localtime(ticks)[3:6])
41
+
42
+
43
+ def TimestampFromTicks(ticks: float) -> datetime.datetime:
44
+ return Timestamp(*time.localtime(ticks)[:6])
45
+
46
+
47
+ Binary = bytes
48
+
49
+ STRING = _DBAPITypeObject(get_string_types())
50
+ BINARY = _DBAPITypeObject(get_binary_types())
51
+ NUMBER = _DBAPITypeObject(get_number_types())
52
+ DATETIME = _DBAPITypeObject(get_timestamp_types())
53
+ ROWID = _DBAPITypeObject()
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env python
2
+ """Various constants."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import platform
7
+ import sys
8
+
9
+ from .version import VERSION
10
+
11
+ SNOWFLAKE_CONNECTOR_VERSION = ".".join(str(v) for v in VERSION[0:3])
12
+ PYTHON_VERSION = ".".join(str(v) for v in sys.version_info[:3])
13
+ OPERATING_SYSTEM = platform.system()
14
+ PLATFORM = platform.platform()
15
+ OS_VERSION = platform.version()
16
+ ISA = platform.machine()
17
+ IMPLEMENTATION = platform.python_implementation()
18
+ COMPILER = platform.python_compiler()
19
+
20
+ CLIENT_NAME = "PythonConnector" # don't change!
21
+ CLIENT_VERSION = ".".join([str(v) for v in VERSION[:3]])
@@ -0,0 +1,88 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from .connection import SnowflakeConnection
7
+
8
+ import os
9
+ from abc import ABC, abstractmethod
10
+
11
+ from .constants import CMD_TYPE_UPLOAD
12
+
13
+
14
+ class FileOperationParserBase(ABC):
15
+ """The interface of internal utility functions for file operation parsing."""
16
+
17
+ @abstractmethod
18
+ def __init__(self, connection):
19
+ pass
20
+
21
+ @abstractmethod
22
+ def parse_file_operation(
23
+ self,
24
+ stage_location,
25
+ local_file_name,
26
+ target_directory,
27
+ command_type,
28
+ options,
29
+ has_source_from_stream=False,
30
+ ):
31
+ """Converts the file operation details into a SQL and returns the SQL parsing result."""
32
+ pass
33
+
34
+
35
+ class StreamDownloaderBase(ABC):
36
+ """The interface of internal utility functions for stream downloading of file."""
37
+
38
+ @abstractmethod
39
+ def __init__(self, connection):
40
+ pass
41
+
42
+ @abstractmethod
43
+ def download_as_stream(self, ret, decompress=False):
44
+ pass
45
+
46
+
47
+ class FileOperationParser(FileOperationParserBase):
48
+ def __init__(self, connection: SnowflakeConnection):
49
+ self._connection = connection
50
+
51
+ def parse_file_operation(
52
+ self,
53
+ stage_location,
54
+ local_file_name,
55
+ target_directory,
56
+ command_type,
57
+ options,
58
+ has_source_from_stream=False,
59
+ ):
60
+ """Parses a file operation by constructing SQL and getting the SQL parsing result from server."""
61
+ options = options or {}
62
+ options_in_sql = " ".join(f"{k}={v}" for k, v in options.items())
63
+
64
+ if command_type == CMD_TYPE_UPLOAD:
65
+ if has_source_from_stream:
66
+ stage_location, unprefixed_local_file_name = os.path.split(
67
+ stage_location
68
+ )
69
+ local_file_name = "file://" + unprefixed_local_file_name
70
+ sql = f"PUT {local_file_name} ? {options_in_sql}"
71
+ params = [stage_location]
72
+ else:
73
+ raise NotImplementedError(f"unsupported command type: {command_type}")
74
+
75
+ with self._connection.cursor() as cursor:
76
+ # Send constructed SQL to server and get back parsing result.
77
+ processed_params = cursor._connection._process_params_qmarks(params, cursor)
78
+ return cursor._execute_helper(
79
+ sql, binding_params=processed_params, is_internal=True
80
+ )
81
+
82
+
83
+ class StreamDownloader(StreamDownloaderBase):
84
+ def __init__(self, connection):
85
+ pass
86
+
87
+ def download_as_stream(self, ret, decompress=False):
88
+ raise NotImplementedError("download_as_stream is not yet supported")
@@ -0,0 +1,220 @@
1
+ #!/usr/bin/env python
2
+ from __future__ import annotations
3
+
4
+ import base64
5
+ import json
6
+ import os
7
+ import tempfile
8
+ from logging import getLogger
9
+ from typing import IO, TYPE_CHECKING
10
+
11
+ from cryptography.hazmat.backends import default_backend
12
+ from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
13
+
14
+ from .compat import PKCS5_OFFSET, PKCS5_PAD, PKCS5_UNPAD
15
+ from .constants import UTF8, EncryptionMetadata, MaterialDescriptor, kilobyte
16
+ from .file_util import owner_rw_opener
17
+ from .util_text import random_string
18
+
19
+ block_size = int(algorithms.AES.block_size / 8) # in bytes
20
+
21
+ if TYPE_CHECKING: # pragma: no cover
22
+ from .storage_client import SnowflakeFileEncryptionMaterial
23
+
24
+ logger = getLogger(__name__)
25
+
26
+
27
+ def matdesc_to_unicode(matdesc: MaterialDescriptor) -> str:
28
+ """Convert Material Descriptor to Unicode String."""
29
+ return str(
30
+ json.dumps(
31
+ {
32
+ "queryId": matdesc.query_id,
33
+ "smkId": str(matdesc.smk_id),
34
+ "keySize": str(matdesc.key_size),
35
+ },
36
+ separators=(",", ":"),
37
+ )
38
+ )
39
+
40
+
41
+ class SnowflakeEncryptionUtil:
42
+ @staticmethod
43
+ def get_secure_random(byte_length: int) -> bytes:
44
+ return os.urandom(byte_length)
45
+
46
+ @staticmethod
47
+ def encrypt_stream(
48
+ encryption_material: SnowflakeFileEncryptionMaterial,
49
+ src: IO[bytes],
50
+ out: IO[bytes],
51
+ chunk_size: int = 64 * kilobyte, # block_size * 4 * 1024,
52
+ ) -> EncryptionMetadata:
53
+ """Reads content from src and write the encrypted content into out.
54
+
55
+ This function is sensitive to current position of src and out.
56
+ It does not seek to position 0 in neither stream objects before or after the encryption.
57
+
58
+ Args:
59
+ encryption_material: The encryption material for file.
60
+ src: The input stream.
61
+ out: The output stream.
62
+ chunk_size: The size of read chunks (Default value = block_size * 4 * 1024
63
+
64
+ Returns:
65
+ The encryption metadata.
66
+ """
67
+ logger = getLogger(__name__)
68
+ decoded_key = base64.standard_b64decode(
69
+ encryption_material.query_stage_master_key
70
+ )
71
+ key_size = len(decoded_key)
72
+ logger.debug("key_size = %s", key_size)
73
+
74
+ # Generate key for data encryption
75
+ iv_data = SnowflakeEncryptionUtil.get_secure_random(block_size)
76
+ file_key = SnowflakeEncryptionUtil.get_secure_random(key_size)
77
+ backend = default_backend()
78
+ cipher = Cipher(algorithms.AES(file_key), modes.CBC(iv_data), backend=backend)
79
+ encryptor = cipher.encryptor()
80
+
81
+ padded = False
82
+ while True:
83
+ chunk = src.read(chunk_size)
84
+ if len(chunk) == 0:
85
+ break
86
+ elif len(chunk) % block_size != 0:
87
+ chunk = PKCS5_PAD(chunk, block_size)
88
+ padded = True
89
+ out.write(encryptor.update(chunk))
90
+ if not padded:
91
+ out.write(encryptor.update(block_size * chr(block_size).encode(UTF8)))
92
+ out.write(encryptor.finalize())
93
+
94
+ # encrypt key with QRMK
95
+ cipher = Cipher(algorithms.AES(decoded_key), modes.ECB(), backend=backend)
96
+ encryptor = cipher.encryptor()
97
+ enc_kek = (
98
+ encryptor.update(PKCS5_PAD(file_key, block_size)) + encryptor.finalize()
99
+ )
100
+
101
+ mat_desc = MaterialDescriptor(
102
+ smk_id=encryption_material.smk_id,
103
+ query_id=encryption_material.query_id,
104
+ key_size=key_size * 8,
105
+ )
106
+ metadata = EncryptionMetadata(
107
+ key=base64.b64encode(enc_kek).decode("utf-8"),
108
+ iv=base64.b64encode(iv_data).decode("utf-8"),
109
+ matdesc=matdesc_to_unicode(mat_desc),
110
+ )
111
+ return metadata
112
+
113
+ @staticmethod
114
+ def encrypt_file(
115
+ encryption_material: SnowflakeFileEncryptionMaterial,
116
+ in_filename: str,
117
+ chunk_size: int = 64 * kilobyte,
118
+ tmp_dir: str | None = None,
119
+ ) -> tuple[EncryptionMetadata, str]:
120
+ """Encrypts a file in a temporary directory.
121
+
122
+ Args:
123
+ encryption_material: The encryption material for file.
124
+ in_filename: The input file's name.
125
+ chunk_size: The size of read chunks (Default value = block_size * 4 * 1024).
126
+ tmp_dir: Temporary directory to use, optional (Default value = None).
127
+
128
+ Returns:
129
+ The encryption metadata and the encrypted file's location.
130
+ """
131
+ logger = getLogger(__name__)
132
+ temp_output_fd, temp_output_file = tempfile.mkstemp(
133
+ text=False, dir=tmp_dir, prefix=os.path.basename(in_filename) + "#"
134
+ )
135
+ logger.debug(
136
+ "unencrypted file: %s, temp file: %s, tmp_dir: %s",
137
+ in_filename,
138
+ temp_output_file,
139
+ tmp_dir,
140
+ )
141
+ with open(in_filename, "rb") as infile:
142
+ with os.fdopen(temp_output_fd, "wb") as outfile:
143
+ metadata = SnowflakeEncryptionUtil.encrypt_stream(
144
+ encryption_material, infile, outfile, chunk_size
145
+ )
146
+ return metadata, temp_output_file
147
+
148
+ @staticmethod
149
+ def decrypt_stream(
150
+ metadata: EncryptionMetadata,
151
+ encryption_material: SnowflakeFileEncryptionMaterial,
152
+ src: IO[bytes],
153
+ out: IO[bytes],
154
+ chunk_size: int = 64 * kilobyte, # block_size * 4 * 1024,
155
+ ) -> None:
156
+ """To read from `src` stream then decrypt to `out` stream."""
157
+
158
+ key_base64 = metadata.key
159
+ iv_base64 = metadata.iv
160
+ decoded_key = base64.standard_b64decode(
161
+ encryption_material.query_stage_master_key
162
+ )
163
+ key_bytes = base64.standard_b64decode(key_base64)
164
+ iv_bytes = base64.standard_b64decode(iv_base64)
165
+
166
+ backend = default_backend()
167
+ cipher = Cipher(algorithms.AES(decoded_key), modes.ECB(), backend=backend)
168
+ decryptor = cipher.decryptor()
169
+ file_key = PKCS5_UNPAD(decryptor.update(key_bytes) + decryptor.finalize())
170
+ cipher = Cipher(algorithms.AES(file_key), modes.CBC(iv_bytes), backend=backend)
171
+ decryptor = cipher.decryptor()
172
+
173
+ last_decrypted_chunk = None
174
+ chunk = src.read(chunk_size)
175
+ while len(chunk) != 0:
176
+ if last_decrypted_chunk is not None:
177
+ out.write(last_decrypted_chunk)
178
+ d = decryptor.update(chunk)
179
+ last_decrypted_chunk = d
180
+ chunk = src.read(chunk_size)
181
+
182
+ if last_decrypted_chunk is not None:
183
+ offset = PKCS5_OFFSET(last_decrypted_chunk)
184
+ out.write(last_decrypted_chunk[:-offset])
185
+ out.write(decryptor.finalize())
186
+
187
+ @staticmethod
188
+ def decrypt_file(
189
+ metadata: EncryptionMetadata,
190
+ encryption_material: SnowflakeFileEncryptionMaterial,
191
+ in_filename: str,
192
+ chunk_size: int = 64 * kilobyte,
193
+ tmp_dir: str | None = None,
194
+ unsafe_file_write: bool = False,
195
+ ) -> str:
196
+ """Decrypts a file and stores the output in the temporary directory.
197
+
198
+ Args:
199
+ metadata: The file's metadata input.
200
+ encryption_material: The file's encryption material.
201
+ in_filename: The name of the input file.
202
+ chunk_size: The size of read chunks (Default value = block_size * 4 * 1024).
203
+ tmp_dir: Temporary directory to use, optional (Default value = None).
204
+
205
+ Returns:
206
+ The decrypted file's location.
207
+ """
208
+ temp_output_file = f"{os.path.basename(in_filename)}#{random_string()}"
209
+ if tmp_dir:
210
+ temp_output_file = os.path.join(tmp_dir, temp_output_file)
211
+
212
+ logger.debug("encrypted file: %s, tmp file: %s", in_filename, temp_output_file)
213
+
214
+ file_opener = None if unsafe_file_write else owner_rw_opener
215
+ with open(in_filename, "rb") as infile:
216
+ with open(temp_output_file, "wb", opener=file_opener) as outfile:
217
+ SnowflakeEncryptionUtil.decrypt_stream(
218
+ metadata, encryption_material, infile, outfile, chunk_size
219
+ )
220
+ return temp_output_file
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env python
2
+ from __future__ import annotations
3
+
4
+ # network
5
+ ER_FAILED_TO_CONNECT_TO_DB = 250001
6
+ ER_CONNECTION_IS_CLOSED = 250002
7
+ ER_FAILED_TO_REQUEST = 250003
8
+ ER_NOT_HTTPS_USED = 250004
9
+ ER_FAILED_TO_SERVER = 250005
10
+ ER_IDP_CONNECTION_ERROR = 250006
11
+ ER_INCORRECT_DESTINATION = 250007
12
+ ER_UNABLE_TO_OPEN_BROWSER = 250008
13
+ ER_UNABLE_TO_START_WEBSERVER = 250009
14
+ ER_INVALID_CERTIFICATE = 250011 # not used but keep here to reserve errno
15
+ ER_INVALID_BACKOFF_POLICY = 250012
16
+
17
+ # connection
18
+ ER_NO_ACCOUNT_NAME = 251001
19
+ ER_OLD_PYTHON = 251002
20
+ ER_NO_WINDOWS_SUPPORT = 251003
21
+ ER_FAILED_TO_GET_BOOTSTRAP = 251004
22
+ ER_NO_USER = 251005
23
+ ER_NO_PASSWORD = 251006
24
+ ER_INVALID_VALUE = 251007
25
+ ER_INVALID_PRIVATE_KEY = 251008
26
+ ER_NO_HOSTNAME_FOUND = 251009
27
+ ER_JWT_RETRY_EXPIRED = 251010
28
+ ER_CONNECTION_TIMEOUT = 251011
29
+ ER_RETRYABLE_CODE = 251012
30
+ ER_NO_CLIENT_ID = 251013
31
+ ER_OAUTH_STATE_CHANGED = 251014
32
+ ER_OAUTH_CALLBACK_ERROR = 251015
33
+ ER_OAUTH_SERVER_TIMEOUT = 251016
34
+ ER_INVALID_WIF_SETTINGS = 251017
35
+ ER_WIF_CREDENTIALS_NOT_FOUND = 251018
36
+ # not used but keep here to reserve errno
37
+ ER_EXPERIMENTAL_AUTHENTICATION_NOT_SUPPORTED = 251019
38
+ ER_NO_CLIENT_SECRET = 251020
39
+
40
+ # cursor
41
+ ER_FAILED_TO_REWRITE_MULTI_ROW_INSERT = 252001
42
+ ER_NO_ADDITIONAL_CHUNK = 252002
43
+ ER_NOT_POSITIVE_SIZE = 252003
44
+ ER_FAILED_PROCESSING_PYFORMAT = 252004
45
+ ER_FAILED_TO_CONVERT_ROW_TO_PYTHON_TYPE = 252005
46
+ ER_CURSOR_IS_CLOSED = 252006
47
+ ER_FAILED_TO_RENEW_SESSION = 252007
48
+ ER_UNSUPPORTED_METHOD = 252008
49
+ ER_NO_DATA_FOUND = 252009
50
+ ER_CHUNK_DOWNLOAD_FAILED = 252010
51
+ ER_NOT_IMPLICITY_SNOWFLAKE_DATATYPE = 252011
52
+ ER_FAILED_PROCESSING_QMARK = 252012
53
+
54
+ # file_transfer
55
+ ER_INVALID_STAGE_FS = 253001
56
+ ER_FAILED_TO_DOWNLOAD_FROM_STAGE = 253002
57
+ ER_FAILED_TO_UPLOAD_TO_STAGE = 253003
58
+ ER_INVALID_STAGE_LOCATION = 253004
59
+ ER_LOCAL_PATH_NOT_DIRECTORY = 253005
60
+ ER_FILE_NOT_EXISTS = 253006
61
+ ER_COMPRESSION_NOT_SUPPORTED = 253007
62
+ ER_INTERNAL_NOT_MATCH_ENCRYPT_MATERIAL = 253008
63
+ ER_FAILED_TO_CHECK_EXISTING_FILES = 253009
64
+
65
+ # ocsp
66
+ ER_OCSP_URL_INFO_MISSING = 254001
67
+ ER_OCSP_RESPONSE_UNAVAILABLE = 254002
68
+ ER_OCSP_RESPONSE_FETCH_EXCEPTION = 254003
69
+ ER_OCSP_FAILED_TO_CONNECT_CACHE_SERVER = 254004
70
+ ER_OCSP_RESPONSE_CERT_STATUS_INVALID = 254005
71
+ ER_OCSP_RESPONSE_CERT_STATUS_UNKNOWN = 254006
72
+ ER_OCSP_RESPONSE_CERT_STATUS_REVOKED = 254007
73
+ ER_OCSP_RESPONSE_STATUS_UNSUCCESSFUL = 254008
74
+ ER_OCSP_RESPONSE_ATTACHED_CERT_INVALID = 254009
75
+ ER_OCSP_RESPONSE_ATTACHED_CERT_EXPIRED = 254010
76
+ ER_OCSP_RESPONSE_INVALID_SIGNATURE = 254011
77
+ ER_OCSP_RESPONSE_INVALID_EXPIRY_INFO_MISSING = 254012
78
+ ER_OCSP_RESPONSE_EXPIRED = 254013
79
+ ER_OCSP_RESPONSE_FETCH_FAILURE = 254014
80
+ ER_OCSP_RESPONSE_LOAD_FAILURE = 254015
81
+ ER_OCSP_RESPONSE_CACHE_DOWNLOAD_FAILED = 254016
82
+ ER_OCSP_RESPONSE_CACHE_DECODE_FAILED = 254017
83
+ ER_INVALID_OCSP_RESPONSE_SSD = 254018
84
+ ER_INVALID_SSD = 254019
85
+
86
+ # converter
87
+ ER_NOT_SUPPORT_DATA_TYPE = 255001
88
+ ER_NO_PYARROW = 255002
89
+ ER_NO_ARROW_RESULT = 255003
90
+ ER_NO_PYARROW_SNOWSQL = 255004
91
+ ER_FAILED_TO_READ_ARROW_STREAM = 255005
92
+ ER_NO_NUMPY = 255006
93
+
94
+ ER_HTTP_GENERAL_ERROR = 290000