cli-ih 0.6.3.1__py3-none-any.whl → 0.7.1__py3-none-any.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 (427) hide show
  1. cli_ih/__init__.py +1 -0
  2. cli_ih/asyncClient.py +109 -10
  3. cli_ih/client.py +110 -18
  4. cli_ih/utils.py +51 -0
  5. cli_ih-0.7.1.dist-info/METADATA +100 -0
  6. cli_ih-0.7.1.dist-info/RECORD +9 -0
  7. {cli_ih-0.6.3.1.dist-info → cli_ih-0.7.1.dist-info}/top_level.txt +0 -1
  8. cli_ih-0.6.3.1.dist-info/METADATA +0 -86
  9. cli_ih-0.6.3.1.dist-info/RECORD +0 -425
  10. venv/Lib/site-packages/__editable___cli_ih_0_6_3_1_finder.py +0 -85
  11. venv/Lib/site-packages/pip/__init__.py +0 -13
  12. venv/Lib/site-packages/pip/__main__.py +0 -24
  13. venv/Lib/site-packages/pip/__pip-runner__.py +0 -50
  14. venv/Lib/site-packages/pip/_internal/__init__.py +0 -18
  15. venv/Lib/site-packages/pip/_internal/build_env.py +0 -349
  16. venv/Lib/site-packages/pip/_internal/cache.py +0 -291
  17. venv/Lib/site-packages/pip/_internal/cli/__init__.py +0 -3
  18. venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +0 -184
  19. venv/Lib/site-packages/pip/_internal/cli/base_command.py +0 -244
  20. venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +0 -1138
  21. venv/Lib/site-packages/pip/_internal/cli/command_context.py +0 -28
  22. venv/Lib/site-packages/pip/_internal/cli/index_command.py +0 -175
  23. venv/Lib/site-packages/pip/_internal/cli/main.py +0 -80
  24. venv/Lib/site-packages/pip/_internal/cli/main_parser.py +0 -134
  25. venv/Lib/site-packages/pip/_internal/cli/parser.py +0 -298
  26. venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +0 -151
  27. venv/Lib/site-packages/pip/_internal/cli/req_command.py +0 -351
  28. venv/Lib/site-packages/pip/_internal/cli/spinners.py +0 -235
  29. venv/Lib/site-packages/pip/_internal/cli/status_codes.py +0 -6
  30. venv/Lib/site-packages/pip/_internal/commands/__init__.py +0 -139
  31. venv/Lib/site-packages/pip/_internal/commands/cache.py +0 -231
  32. venv/Lib/site-packages/pip/_internal/commands/check.py +0 -66
  33. venv/Lib/site-packages/pip/_internal/commands/completion.py +0 -135
  34. venv/Lib/site-packages/pip/_internal/commands/configuration.py +0 -288
  35. venv/Lib/site-packages/pip/_internal/commands/debug.py +0 -203
  36. venv/Lib/site-packages/pip/_internal/commands/download.py +0 -145
  37. venv/Lib/site-packages/pip/_internal/commands/freeze.py +0 -107
  38. venv/Lib/site-packages/pip/_internal/commands/hash.py +0 -58
  39. venv/Lib/site-packages/pip/_internal/commands/help.py +0 -40
  40. venv/Lib/site-packages/pip/_internal/commands/index.py +0 -159
  41. venv/Lib/site-packages/pip/_internal/commands/inspect.py +0 -92
  42. venv/Lib/site-packages/pip/_internal/commands/install.py +0 -798
  43. venv/Lib/site-packages/pip/_internal/commands/list.py +0 -400
  44. venv/Lib/site-packages/pip/_internal/commands/lock.py +0 -170
  45. venv/Lib/site-packages/pip/_internal/commands/search.py +0 -178
  46. venv/Lib/site-packages/pip/_internal/commands/show.py +0 -231
  47. venv/Lib/site-packages/pip/_internal/commands/uninstall.py +0 -113
  48. venv/Lib/site-packages/pip/_internal/commands/wheel.py +0 -181
  49. venv/Lib/site-packages/pip/_internal/configuration.py +0 -397
  50. venv/Lib/site-packages/pip/_internal/distributions/__init__.py +0 -21
  51. venv/Lib/site-packages/pip/_internal/distributions/base.py +0 -55
  52. venv/Lib/site-packages/pip/_internal/distributions/installed.py +0 -33
  53. venv/Lib/site-packages/pip/_internal/distributions/sdist.py +0 -165
  54. venv/Lib/site-packages/pip/_internal/distributions/wheel.py +0 -44
  55. venv/Lib/site-packages/pip/_internal/exceptions.py +0 -881
  56. venv/Lib/site-packages/pip/_internal/index/__init__.py +0 -1
  57. venv/Lib/site-packages/pip/_internal/index/collector.py +0 -489
  58. venv/Lib/site-packages/pip/_internal/index/package_finder.py +0 -1059
  59. venv/Lib/site-packages/pip/_internal/index/sources.py +0 -287
  60. venv/Lib/site-packages/pip/_internal/locations/__init__.py +0 -441
  61. venv/Lib/site-packages/pip/_internal/locations/_distutils.py +0 -173
  62. venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +0 -215
  63. venv/Lib/site-packages/pip/_internal/locations/base.py +0 -82
  64. venv/Lib/site-packages/pip/_internal/main.py +0 -12
  65. venv/Lib/site-packages/pip/_internal/metadata/__init__.py +0 -164
  66. venv/Lib/site-packages/pip/_internal/metadata/_json.py +0 -87
  67. venv/Lib/site-packages/pip/_internal/metadata/base.py +0 -685
  68. venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +0 -6
  69. venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +0 -87
  70. venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +0 -223
  71. venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +0 -143
  72. venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +0 -298
  73. venv/Lib/site-packages/pip/_internal/models/__init__.py +0 -1
  74. venv/Lib/site-packages/pip/_internal/models/candidate.py +0 -25
  75. venv/Lib/site-packages/pip/_internal/models/direct_url.py +0 -227
  76. venv/Lib/site-packages/pip/_internal/models/format_control.py +0 -78
  77. venv/Lib/site-packages/pip/_internal/models/index.py +0 -28
  78. venv/Lib/site-packages/pip/_internal/models/installation_report.py +0 -57
  79. venv/Lib/site-packages/pip/_internal/models/link.py +0 -613
  80. venv/Lib/site-packages/pip/_internal/models/pylock.py +0 -188
  81. venv/Lib/site-packages/pip/_internal/models/scheme.py +0 -25
  82. venv/Lib/site-packages/pip/_internal/models/search_scope.py +0 -126
  83. venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +0 -53
  84. venv/Lib/site-packages/pip/_internal/models/target_python.py +0 -122
  85. venv/Lib/site-packages/pip/_internal/models/wheel.py +0 -141
  86. venv/Lib/site-packages/pip/_internal/network/__init__.py +0 -1
  87. venv/Lib/site-packages/pip/_internal/network/auth.py +0 -564
  88. venv/Lib/site-packages/pip/_internal/network/cache.py +0 -133
  89. venv/Lib/site-packages/pip/_internal/network/download.py +0 -342
  90. venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +0 -213
  91. venv/Lib/site-packages/pip/_internal/network/session.py +0 -528
  92. venv/Lib/site-packages/pip/_internal/network/utils.py +0 -98
  93. venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +0 -61
  94. venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  95. venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  96. venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +0 -140
  97. venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +0 -38
  98. venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +0 -41
  99. venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +0 -73
  100. venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +0 -38
  101. venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +0 -47
  102. venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +0 -119
  103. venv/Lib/site-packages/pip/_internal/operations/check.py +0 -175
  104. venv/Lib/site-packages/pip/_internal/operations/freeze.py +0 -259
  105. venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +0 -1
  106. venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +0 -48
  107. venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +0 -746
  108. venv/Lib/site-packages/pip/_internal/operations/prepare.py +0 -742
  109. venv/Lib/site-packages/pip/_internal/pyproject.py +0 -182
  110. venv/Lib/site-packages/pip/_internal/req/__init__.py +0 -105
  111. venv/Lib/site-packages/pip/_internal/req/constructors.py +0 -562
  112. venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +0 -75
  113. venv/Lib/site-packages/pip/_internal/req/req_file.py +0 -620
  114. venv/Lib/site-packages/pip/_internal/req/req_install.py +0 -937
  115. venv/Lib/site-packages/pip/_internal/req/req_set.py +0 -81
  116. venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +0 -639
  117. venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  118. venv/Lib/site-packages/pip/_internal/resolution/base.py +0 -20
  119. venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  120. venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +0 -598
  121. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  122. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +0 -142
  123. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -582
  124. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +0 -814
  125. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +0 -166
  126. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +0 -276
  127. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +0 -85
  128. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +0 -247
  129. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +0 -336
  130. venv/Lib/site-packages/pip/_internal/self_outdated_check.py +0 -254
  131. venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  132. venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +0 -109
  133. venv/Lib/site-packages/pip/_internal/utils/_log.py +0 -38
  134. venv/Lib/site-packages/pip/_internal/utils/appdirs.py +0 -52
  135. venv/Lib/site-packages/pip/_internal/utils/compat.py +0 -85
  136. venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +0 -201
  137. venv/Lib/site-packages/pip/_internal/utils/datetime.py +0 -10
  138. venv/Lib/site-packages/pip/_internal/utils/deprecation.py +0 -126
  139. venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +0 -87
  140. venv/Lib/site-packages/pip/_internal/utils/egg_link.py +0 -81
  141. venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +0 -88
  142. venv/Lib/site-packages/pip/_internal/utils/filesystem.py +0 -152
  143. venv/Lib/site-packages/pip/_internal/utils/filetypes.py +0 -24
  144. venv/Lib/site-packages/pip/_internal/utils/glibc.py +0 -102
  145. venv/Lib/site-packages/pip/_internal/utils/hashes.py +0 -150
  146. venv/Lib/site-packages/pip/_internal/utils/logging.py +0 -364
  147. venv/Lib/site-packages/pip/_internal/utils/misc.py +0 -765
  148. venv/Lib/site-packages/pip/_internal/utils/packaging.py +0 -44
  149. venv/Lib/site-packages/pip/_internal/utils/retry.py +0 -45
  150. venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +0 -149
  151. venv/Lib/site-packages/pip/_internal/utils/subprocess.py +0 -248
  152. venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +0 -294
  153. venv/Lib/site-packages/pip/_internal/utils/unpacking.py +0 -337
  154. venv/Lib/site-packages/pip/_internal/utils/urls.py +0 -55
  155. venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +0 -105
  156. venv/Lib/site-packages/pip/_internal/utils/wheel.py +0 -132
  157. venv/Lib/site-packages/pip/_internal/vcs/__init__.py +0 -15
  158. venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +0 -130
  159. venv/Lib/site-packages/pip/_internal/vcs/git.py +0 -571
  160. venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +0 -186
  161. venv/Lib/site-packages/pip/_internal/vcs/subversion.py +0 -335
  162. venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +0 -693
  163. venv/Lib/site-packages/pip/_internal/wheel_builder.py +0 -334
  164. venv/Lib/site-packages/pip/_vendor/__init__.py +0 -117
  165. venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +0 -29
  166. venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +0 -70
  167. venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +0 -168
  168. venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +0 -75
  169. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +0 -8
  170. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +0 -145
  171. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +0 -48
  172. venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +0 -511
  173. venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +0 -119
  174. venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +0 -157
  175. venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  176. venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +0 -146
  177. venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +0 -43
  178. venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +0 -4
  179. venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +0 -12
  180. venv/Lib/site-packages/pip/_vendor/certifi/core.py +0 -83
  181. venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  182. venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +0 -13
  183. venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +0 -65
  184. venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +0 -209
  185. venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +0 -59
  186. venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +0 -62
  187. venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +0 -9
  188. venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
  189. venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +0 -33
  190. venv/Lib/site-packages/pip/_vendor/distlib/compat.py +0 -1137
  191. venv/Lib/site-packages/pip/_vendor/distlib/resources.py +0 -358
  192. venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +0 -447
  193. venv/Lib/site-packages/pip/_vendor/distlib/util.py +0 -1984
  194. venv/Lib/site-packages/pip/_vendor/distro/__init__.py +0 -54
  195. venv/Lib/site-packages/pip/_vendor/distro/__main__.py +0 -4
  196. venv/Lib/site-packages/pip/_vendor/distro/distro.py +0 -1403
  197. venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  198. venv/Lib/site-packages/pip/_vendor/idna/__init__.py +0 -45
  199. venv/Lib/site-packages/pip/_vendor/idna/codec.py +0 -122
  200. venv/Lib/site-packages/pip/_vendor/idna/compat.py +0 -15
  201. venv/Lib/site-packages/pip/_vendor/idna/core.py +0 -437
  202. venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +0 -4243
  203. venv/Lib/site-packages/pip/_vendor/idna/intranges.py +0 -57
  204. venv/Lib/site-packages/pip/_vendor/idna/package_data.py +0 -1
  205. venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  206. venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +0 -8681
  207. venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +0 -55
  208. venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +0 -48
  209. venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +0 -170
  210. venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +0 -929
  211. venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +0 -15
  212. venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +0 -109
  213. venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +0 -262
  214. venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +0 -85
  215. venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +0 -353
  216. venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +0 -61
  217. venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +0 -195
  218. venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +0 -145
  219. venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +0 -759
  220. venv/Lib/site-packages/pip/_vendor/packaging/markers.py +0 -362
  221. venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +0 -862
  222. venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  223. venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +0 -91
  224. venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +0 -1019
  225. venv/Lib/site-packages/pip/_vendor/packaging/tags.py +0 -656
  226. venv/Lib/site-packages/pip/_vendor/packaging/utils.py +0 -163
  227. venv/Lib/site-packages/pip/_vendor/packaging/version.py +0 -582
  228. venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +0 -3676
  229. venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +0 -631
  230. venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +0 -55
  231. venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +0 -249
  232. venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +0 -299
  233. venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +0 -144
  234. venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  235. venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +0 -272
  236. venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +0 -21
  237. venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +0 -272
  238. venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +0 -82
  239. venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +0 -17
  240. venv/Lib/site-packages/pip/_vendor/pygments/console.py +0 -70
  241. venv/Lib/site-packages/pip/_vendor/pygments/filter.py +0 -70
  242. venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +0 -940
  243. venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +0 -129
  244. venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +0 -157
  245. venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +0 -23
  246. venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +0 -963
  247. venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +0 -362
  248. venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +0 -602
  249. venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +0 -1201
  250. venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +0 -43
  251. venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +0 -72
  252. venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +0 -91
  253. venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +0 -104
  254. venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +0 -247
  255. venv/Lib/site-packages/pip/_vendor/pygments/style.py +0 -203
  256. venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +0 -61
  257. venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +0 -54
  258. venv/Lib/site-packages/pip/_vendor/pygments/token.py +0 -214
  259. venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +0 -153
  260. venv/Lib/site-packages/pip/_vendor/pygments/util.py +0 -324
  261. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +0 -31
  262. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +0 -410
  263. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +0 -21
  264. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +0 -389
  265. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  266. venv/Lib/site-packages/pip/_vendor/requests/__init__.py +0 -179
  267. venv/Lib/site-packages/pip/_vendor/requests/__version__.py +0 -14
  268. venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +0 -50
  269. venv/Lib/site-packages/pip/_vendor/requests/adapters.py +0 -719
  270. venv/Lib/site-packages/pip/_vendor/requests/api.py +0 -157
  271. venv/Lib/site-packages/pip/_vendor/requests/auth.py +0 -314
  272. venv/Lib/site-packages/pip/_vendor/requests/certs.py +0 -17
  273. venv/Lib/site-packages/pip/_vendor/requests/compat.py +0 -90
  274. venv/Lib/site-packages/pip/_vendor/requests/cookies.py +0 -561
  275. venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +0 -151
  276. venv/Lib/site-packages/pip/_vendor/requests/help.py +0 -127
  277. venv/Lib/site-packages/pip/_vendor/requests/hooks.py +0 -33
  278. venv/Lib/site-packages/pip/_vendor/requests/models.py +0 -1039
  279. venv/Lib/site-packages/pip/_vendor/requests/packages.py +0 -25
  280. venv/Lib/site-packages/pip/_vendor/requests/sessions.py +0 -831
  281. venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +0 -128
  282. venv/Lib/site-packages/pip/_vendor/requests/structures.py +0 -99
  283. venv/Lib/site-packages/pip/_vendor/requests/utils.py +0 -1086
  284. venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +0 -27
  285. venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +0 -196
  286. venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  287. venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +0 -55
  288. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +0 -27
  289. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +0 -47
  290. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +0 -48
  291. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +0 -57
  292. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +0 -622
  293. venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +0 -209
  294. venv/Lib/site-packages/pip/_vendor/rich/__init__.py +0 -177
  295. venv/Lib/site-packages/pip/_vendor/rich/__main__.py +0 -245
  296. venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +0 -454
  297. venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +0 -3610
  298. venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +0 -32
  299. venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +0 -76
  300. venv/Lib/site-packages/pip/_vendor/rich/_extension.py +0 -10
  301. venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +0 -24
  302. venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +0 -268
  303. venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +0 -94
  304. venv/Lib/site-packages/pip/_vendor/rich/_loop.py +0 -43
  305. venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +0 -69
  306. venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +0 -309
  307. venv/Lib/site-packages/pip/_vendor/rich/_pick.py +0 -17
  308. venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +0 -153
  309. venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +0 -482
  310. venv/Lib/site-packages/pip/_vendor/rich/_stack.py +0 -16
  311. venv/Lib/site-packages/pip/_vendor/rich/_timer.py +0 -19
  312. venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +0 -661
  313. venv/Lib/site-packages/pip/_vendor/rich/_windows.py +0 -71
  314. venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +0 -56
  315. venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +0 -93
  316. venv/Lib/site-packages/pip/_vendor/rich/abc.py +0 -33
  317. venv/Lib/site-packages/pip/_vendor/rich/align.py +0 -306
  318. venv/Lib/site-packages/pip/_vendor/rich/ansi.py +0 -241
  319. venv/Lib/site-packages/pip/_vendor/rich/bar.py +0 -93
  320. venv/Lib/site-packages/pip/_vendor/rich/box.py +0 -474
  321. venv/Lib/site-packages/pip/_vendor/rich/cells.py +0 -174
  322. venv/Lib/site-packages/pip/_vendor/rich/color.py +0 -621
  323. venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +0 -38
  324. venv/Lib/site-packages/pip/_vendor/rich/columns.py +0 -187
  325. venv/Lib/site-packages/pip/_vendor/rich/console.py +0 -2680
  326. venv/Lib/site-packages/pip/_vendor/rich/constrain.py +0 -37
  327. venv/Lib/site-packages/pip/_vendor/rich/containers.py +0 -167
  328. venv/Lib/site-packages/pip/_vendor/rich/control.py +0 -219
  329. venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +0 -193
  330. venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +0 -39
  331. venv/Lib/site-packages/pip/_vendor/rich/emoji.py +0 -91
  332. venv/Lib/site-packages/pip/_vendor/rich/errors.py +0 -34
  333. venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +0 -57
  334. venv/Lib/site-packages/pip/_vendor/rich/filesize.py +0 -88
  335. venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +0 -232
  336. venv/Lib/site-packages/pip/_vendor/rich/json.py +0 -139
  337. venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +0 -101
  338. venv/Lib/site-packages/pip/_vendor/rich/layout.py +0 -442
  339. venv/Lib/site-packages/pip/_vendor/rich/live.py +0 -400
  340. venv/Lib/site-packages/pip/_vendor/rich/live_render.py +0 -106
  341. venv/Lib/site-packages/pip/_vendor/rich/logging.py +0 -297
  342. venv/Lib/site-packages/pip/_vendor/rich/markup.py +0 -251
  343. venv/Lib/site-packages/pip/_vendor/rich/measure.py +0 -151
  344. venv/Lib/site-packages/pip/_vendor/rich/padding.py +0 -141
  345. venv/Lib/site-packages/pip/_vendor/rich/pager.py +0 -34
  346. venv/Lib/site-packages/pip/_vendor/rich/palette.py +0 -100
  347. venv/Lib/site-packages/pip/_vendor/rich/panel.py +0 -317
  348. venv/Lib/site-packages/pip/_vendor/rich/pretty.py +0 -1016
  349. venv/Lib/site-packages/pip/_vendor/rich/progress.py +0 -1715
  350. venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +0 -223
  351. venv/Lib/site-packages/pip/_vendor/rich/prompt.py +0 -400
  352. venv/Lib/site-packages/pip/_vendor/rich/protocol.py +0 -42
  353. venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  354. venv/Lib/site-packages/pip/_vendor/rich/region.py +0 -10
  355. venv/Lib/site-packages/pip/_vendor/rich/repr.py +0 -149
  356. venv/Lib/site-packages/pip/_vendor/rich/rule.py +0 -130
  357. venv/Lib/site-packages/pip/_vendor/rich/scope.py +0 -86
  358. venv/Lib/site-packages/pip/_vendor/rich/screen.py +0 -54
  359. venv/Lib/site-packages/pip/_vendor/rich/segment.py +0 -752
  360. venv/Lib/site-packages/pip/_vendor/rich/spinner.py +0 -132
  361. venv/Lib/site-packages/pip/_vendor/rich/status.py +0 -131
  362. venv/Lib/site-packages/pip/_vendor/rich/style.py +0 -796
  363. venv/Lib/site-packages/pip/_vendor/rich/styled.py +0 -42
  364. venv/Lib/site-packages/pip/_vendor/rich/syntax.py +0 -985
  365. venv/Lib/site-packages/pip/_vendor/rich/table.py +0 -1006
  366. venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +0 -153
  367. venv/Lib/site-packages/pip/_vendor/rich/text.py +0 -1361
  368. venv/Lib/site-packages/pip/_vendor/rich/theme.py +0 -115
  369. venv/Lib/site-packages/pip/_vendor/rich/themes.py +0 -5
  370. venv/Lib/site-packages/pip/_vendor/rich/traceback.py +0 -899
  371. venv/Lib/site-packages/pip/_vendor/rich/tree.py +0 -257
  372. venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +0 -8
  373. venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +0 -770
  374. venv/Lib/site-packages/pip/_vendor/tomli/_re.py +0 -112
  375. venv/Lib/site-packages/pip/_vendor/tomli/_types.py +0 -10
  376. venv/Lib/site-packages/pip/_vendor/tomli/py.typed +0 -1
  377. venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +0 -4
  378. venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +0 -229
  379. venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +0 -1
  380. venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +0 -36
  381. venv/Lib/site-packages/pip/_vendor/truststore/_api.py +0 -333
  382. venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +0 -571
  383. venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +0 -66
  384. venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +0 -31
  385. venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +0 -567
  386. venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  387. venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +0 -102
  388. venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +0 -355
  389. venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +0 -2
  390. venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +0 -572
  391. venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +0 -1140
  392. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  393. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +0 -36
  394. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  395. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +0 -519
  396. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +0 -397
  397. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +0 -314
  398. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +0 -130
  399. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +0 -518
  400. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +0 -920
  401. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +0 -216
  402. venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +0 -323
  403. venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +0 -274
  404. venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +0 -98
  405. venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  406. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  407. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +0 -51
  408. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +0 -155
  409. venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +0 -1076
  410. venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +0 -540
  411. venv/Lib/site-packages/pip/_vendor/urllib3/request.py +0 -191
  412. venv/Lib/site-packages/pip/_vendor/urllib3/response.py +0 -879
  413. venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +0 -49
  414. venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +0 -149
  415. venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +0 -57
  416. venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +0 -22
  417. venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +0 -137
  418. venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +0 -107
  419. venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +0 -622
  420. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +0 -504
  421. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +0 -159
  422. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +0 -221
  423. venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +0 -271
  424. venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +0 -435
  425. venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +0 -152
  426. venv/Lib/site-packages/pip/py.typed +0 -4
  427. {cli_ih-0.6.3.1.dist-info → cli_ih-0.7.1.dist-info}/WHEEL +0 -0
@@ -1,44 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import functools
4
- import logging
5
-
6
- from pip._vendor.packaging import specifiers, version
7
- from pip._vendor.packaging.requirements import Requirement
8
-
9
- logger = logging.getLogger(__name__)
10
-
11
-
12
- @functools.lru_cache(maxsize=32)
13
- def check_requires_python(
14
- requires_python: str | None, version_info: tuple[int, ...]
15
- ) -> bool:
16
- """
17
- Check if the given Python version matches a "Requires-Python" specifier.
18
-
19
- :param version_info: A 3-tuple of ints representing a Python
20
- major-minor-micro version to check (e.g. `sys.version_info[:3]`).
21
-
22
- :return: `True` if the given Python version satisfies the requirement.
23
- Otherwise, return `False`.
24
-
25
- :raises InvalidSpecifier: If `requires_python` has an invalid format.
26
- """
27
- if requires_python is None:
28
- # The package provides no information
29
- return True
30
- requires_python_specifier = specifiers.SpecifierSet(requires_python)
31
-
32
- python_version = version.parse(".".join(map(str, version_info)))
33
- return python_version in requires_python_specifier
34
-
35
-
36
- @functools.lru_cache(maxsize=10000)
37
- def get_requirement(req_string: str) -> Requirement:
38
- """Construct a packaging.Requirement object with caching"""
39
- # Parsing requirement strings is expensive, and is also expected to happen
40
- # with a low diversity of different arguments (at least relative the number
41
- # constructed). This method adds a cache to requirement object creation to
42
- # minimize repeated parsing of the same string to construct equivalent
43
- # Requirement objects.
44
- return Requirement(req_string)
@@ -1,45 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import functools
4
- from time import perf_counter, sleep
5
- from typing import TYPE_CHECKING, Callable, TypeVar
6
-
7
- if TYPE_CHECKING:
8
- from typing_extensions import ParamSpec
9
-
10
- T = TypeVar("T")
11
- P = ParamSpec("P")
12
-
13
-
14
- def retry(
15
- wait: float, stop_after_delay: float
16
- ) -> Callable[[Callable[P, T]], Callable[P, T]]:
17
- """Decorator to automatically retry a function on error.
18
-
19
- If the function raises, the function is recalled with the same arguments
20
- until it returns or the time limit is reached. When the time limit is
21
- surpassed, the last exception raised is reraised.
22
-
23
- :param wait: The time to wait after an error before retrying, in seconds.
24
- :param stop_after_delay: The time limit after which retries will cease,
25
- in seconds.
26
- """
27
-
28
- def wrapper(func: Callable[P, T]) -> Callable[P, T]:
29
-
30
- @functools.wraps(func)
31
- def retry_wrapped(*args: P.args, **kwargs: P.kwargs) -> T:
32
- # The performance counter is monotonic on all platforms we care
33
- # about and has much better resolution than time.monotonic().
34
- start_time = perf_counter()
35
- while True:
36
- try:
37
- return func(*args, **kwargs)
38
- except Exception:
39
- if perf_counter() - start_time > stop_after_delay:
40
- raise
41
- sleep(wait)
42
-
43
- return retry_wrapped
44
-
45
- return wrapper
@@ -1,149 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import sys
4
- import textwrap
5
- from collections.abc import Sequence
6
-
7
- # Shim to wrap setup.py invocation with setuptools
8
- # Note that __file__ is handled via two {!r} *and* %r, to ensure that paths on
9
- # Windows are correctly handled (it should be "C:\\Users" not "C:\Users").
10
- _SETUPTOOLS_SHIM = textwrap.dedent(
11
- """
12
- exec(compile('''
13
- # This is <pip-setuptools-caller> -- a caller that pip uses to run setup.py
14
- #
15
- # - It imports setuptools before invoking setup.py, to enable projects that directly
16
- # import from `distutils.core` to work with newer packaging standards.
17
- # - It provides a clear error message when setuptools is not installed.
18
- # - It sets `sys.argv[0]` to the underlying `setup.py`, when invoking `setup.py` so
19
- # setuptools doesn't think the script is `-c`. This avoids the following warning:
20
- # manifest_maker: standard file '-c' not found".
21
- # - It generates a shim setup.py, for handling setup.cfg-only projects.
22
- import os, sys, tokenize, traceback
23
-
24
- try:
25
- import setuptools
26
- except ImportError:
27
- print(
28
- "ERROR: Can not execute `setup.py` since setuptools failed to import in "
29
- "the build environment with exception:",
30
- file=sys.stderr,
31
- )
32
- traceback.print_exc()
33
- sys.exit(1)
34
-
35
- __file__ = %r
36
- sys.argv[0] = __file__
37
-
38
- if os.path.exists(__file__):
39
- filename = __file__
40
- with tokenize.open(__file__) as f:
41
- setup_py_code = f.read()
42
- else:
43
- filename = "<auto-generated setuptools caller>"
44
- setup_py_code = "from setuptools import setup; setup()"
45
-
46
- exec(compile(setup_py_code, filename, "exec"))
47
- ''' % ({!r},), "<pip-setuptools-caller>", "exec"))
48
- """
49
- ).rstrip()
50
-
51
-
52
- def make_setuptools_shim_args(
53
- setup_py_path: str,
54
- global_options: Sequence[str] | None = None,
55
- no_user_config: bool = False,
56
- unbuffered_output: bool = False,
57
- ) -> list[str]:
58
- """
59
- Get setuptools command arguments with shim wrapped setup file invocation.
60
-
61
- :param setup_py_path: The path to setup.py to be wrapped.
62
- :param global_options: Additional global options.
63
- :param no_user_config: If True, disables personal user configuration.
64
- :param unbuffered_output: If True, adds the unbuffered switch to the
65
- argument list.
66
- """
67
- args = [sys.executable]
68
- if unbuffered_output:
69
- args += ["-u"]
70
- args += ["-c", _SETUPTOOLS_SHIM.format(setup_py_path)]
71
- if global_options:
72
- args += global_options
73
- if no_user_config:
74
- args += ["--no-user-cfg"]
75
- return args
76
-
77
-
78
- def make_setuptools_bdist_wheel_args(
79
- setup_py_path: str,
80
- global_options: Sequence[str],
81
- build_options: Sequence[str],
82
- destination_dir: str,
83
- ) -> list[str]:
84
- # NOTE: Eventually, we'd want to also -S to the flags here, when we're
85
- # isolating. Currently, it breaks Python in virtualenvs, because it
86
- # relies on site.py to find parts of the standard library outside the
87
- # virtualenv.
88
- args = make_setuptools_shim_args(
89
- setup_py_path, global_options=global_options, unbuffered_output=True
90
- )
91
- args += ["bdist_wheel", "-d", destination_dir]
92
- args += build_options
93
- return args
94
-
95
-
96
- def make_setuptools_clean_args(
97
- setup_py_path: str,
98
- global_options: Sequence[str],
99
- ) -> list[str]:
100
- args = make_setuptools_shim_args(
101
- setup_py_path, global_options=global_options, unbuffered_output=True
102
- )
103
- args += ["clean", "--all"]
104
- return args
105
-
106
-
107
- def make_setuptools_develop_args(
108
- setup_py_path: str,
109
- *,
110
- global_options: Sequence[str],
111
- no_user_config: bool,
112
- prefix: str | None,
113
- home: str | None,
114
- use_user_site: bool,
115
- ) -> list[str]:
116
- assert not (use_user_site and prefix)
117
-
118
- args = make_setuptools_shim_args(
119
- setup_py_path,
120
- global_options=global_options,
121
- no_user_config=no_user_config,
122
- )
123
-
124
- args += ["develop", "--no-deps"]
125
-
126
- if prefix:
127
- args += ["--prefix", prefix]
128
- if home is not None:
129
- args += ["--install-dir", home]
130
-
131
- if use_user_site:
132
- args += ["--user", "--prefix="]
133
-
134
- return args
135
-
136
-
137
- def make_setuptools_egg_info_args(
138
- setup_py_path: str,
139
- egg_info_dir: str | None,
140
- no_user_config: bool,
141
- ) -> list[str]:
142
- args = make_setuptools_shim_args(setup_py_path, no_user_config=no_user_config)
143
-
144
- args += ["egg_info"]
145
-
146
- if egg_info_dir:
147
- args += ["--egg-base", egg_info_dir]
148
-
149
- return args
@@ -1,248 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import logging
4
- import os
5
- import shlex
6
- import subprocess
7
- from collections.abc import Iterable, Mapping
8
- from typing import Any, Callable, Literal, Union
9
-
10
- from pip._vendor.rich.markup import escape
11
-
12
- from pip._internal.cli.spinners import SpinnerInterface, open_spinner
13
- from pip._internal.exceptions import InstallationSubprocessError
14
- from pip._internal.utils.logging import VERBOSE, subprocess_logger
15
- from pip._internal.utils.misc import HiddenText
16
-
17
- CommandArgs = list[Union[str, HiddenText]]
18
-
19
-
20
- def make_command(*args: str | HiddenText | CommandArgs) -> CommandArgs:
21
- """
22
- Create a CommandArgs object.
23
- """
24
- command_args: CommandArgs = []
25
- for arg in args:
26
- # Check for list instead of CommandArgs since CommandArgs is
27
- # only known during type-checking.
28
- if isinstance(arg, list):
29
- command_args.extend(arg)
30
- else:
31
- # Otherwise, arg is str or HiddenText.
32
- command_args.append(arg)
33
-
34
- return command_args
35
-
36
-
37
- def format_command_args(args: list[str] | CommandArgs) -> str:
38
- """
39
- Format command arguments for display.
40
- """
41
- # For HiddenText arguments, display the redacted form by calling str().
42
- # Also, we don't apply str() to arguments that aren't HiddenText since
43
- # this can trigger a UnicodeDecodeError in Python 2 if the argument
44
- # has type unicode and includes a non-ascii character. (The type
45
- # checker doesn't ensure the annotations are correct in all cases.)
46
- return " ".join(
47
- shlex.quote(str(arg)) if isinstance(arg, HiddenText) else shlex.quote(arg)
48
- for arg in args
49
- )
50
-
51
-
52
- def reveal_command_args(args: list[str] | CommandArgs) -> list[str]:
53
- """
54
- Return the arguments in their raw, unredacted form.
55
- """
56
- return [arg.secret if isinstance(arg, HiddenText) else arg for arg in args]
57
-
58
-
59
- def call_subprocess(
60
- cmd: list[str] | CommandArgs,
61
- show_stdout: bool = False,
62
- cwd: str | None = None,
63
- on_returncode: Literal["raise", "warn", "ignore"] = "raise",
64
- extra_ok_returncodes: Iterable[int] | None = None,
65
- extra_environ: Mapping[str, Any] | None = None,
66
- unset_environ: Iterable[str] | None = None,
67
- spinner: SpinnerInterface | None = None,
68
- log_failed_cmd: bool | None = True,
69
- stdout_only: bool | None = False,
70
- *,
71
- command_desc: str,
72
- ) -> str:
73
- """
74
- Args:
75
- show_stdout: if true, use INFO to log the subprocess's stderr and
76
- stdout streams. Otherwise, use DEBUG. Defaults to False.
77
- extra_ok_returncodes: an iterable of integer return codes that are
78
- acceptable, in addition to 0. Defaults to None, which means [].
79
- unset_environ: an iterable of environment variable names to unset
80
- prior to calling subprocess.Popen().
81
- log_failed_cmd: if false, failed commands are not logged, only raised.
82
- stdout_only: if true, return only stdout, else return both. When true,
83
- logging of both stdout and stderr occurs when the subprocess has
84
- terminated, else logging occurs as subprocess output is produced.
85
- """
86
- if extra_ok_returncodes is None:
87
- extra_ok_returncodes = []
88
- if unset_environ is None:
89
- unset_environ = []
90
- # Most places in pip use show_stdout=False. What this means is--
91
- #
92
- # - We connect the child's output (combined stderr and stdout) to a
93
- # single pipe, which we read.
94
- # - We log this output to stderr at DEBUG level as it is received.
95
- # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't
96
- # requested), then we show a spinner so the user can still see the
97
- # subprocess is in progress.
98
- # - If the subprocess exits with an error, we log the output to stderr
99
- # at ERROR level if it hasn't already been displayed to the console
100
- # (e.g. if --verbose logging wasn't enabled). This way we don't log
101
- # the output to the console twice.
102
- #
103
- # If show_stdout=True, then the above is still done, but with DEBUG
104
- # replaced by INFO.
105
- if show_stdout:
106
- # Then log the subprocess output at INFO level.
107
- log_subprocess: Callable[..., None] = subprocess_logger.info
108
- used_level = logging.INFO
109
- else:
110
- # Then log the subprocess output using VERBOSE. This also ensures
111
- # it will be logged to the log file (aka user_log), if enabled.
112
- log_subprocess = subprocess_logger.verbose
113
- used_level = VERBOSE
114
-
115
- # Whether the subprocess will be visible in the console.
116
- showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level
117
-
118
- # Only use the spinner if we're not showing the subprocess output
119
- # and we have a spinner.
120
- use_spinner = not showing_subprocess and spinner is not None
121
-
122
- log_subprocess("Running command %s", command_desc)
123
- env = os.environ.copy()
124
- if extra_environ:
125
- env.update(extra_environ)
126
- for name in unset_environ:
127
- env.pop(name, None)
128
- try:
129
- proc = subprocess.Popen(
130
- # Convert HiddenText objects to the underlying str.
131
- reveal_command_args(cmd),
132
- stdin=subprocess.PIPE,
133
- stdout=subprocess.PIPE,
134
- stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE,
135
- cwd=cwd,
136
- env=env,
137
- errors="backslashreplace",
138
- )
139
- except Exception as exc:
140
- if log_failed_cmd:
141
- subprocess_logger.critical(
142
- "Error %s while executing command %s",
143
- exc,
144
- command_desc,
145
- )
146
- raise
147
- all_output = []
148
- if not stdout_only:
149
- assert proc.stdout
150
- assert proc.stdin
151
- proc.stdin.close()
152
- # In this mode, stdout and stderr are in the same pipe.
153
- while True:
154
- line: str = proc.stdout.readline()
155
- if not line:
156
- break
157
- line = line.rstrip()
158
- all_output.append(line + "\n")
159
-
160
- # Show the line immediately.
161
- log_subprocess(line)
162
- # Update the spinner.
163
- if use_spinner:
164
- assert spinner
165
- spinner.spin()
166
- try:
167
- proc.wait()
168
- finally:
169
- if proc.stdout:
170
- proc.stdout.close()
171
- output = "".join(all_output)
172
- else:
173
- # In this mode, stdout and stderr are in different pipes.
174
- # We must use communicate() which is the only safe way to read both.
175
- out, err = proc.communicate()
176
- # log line by line to preserve pip log indenting
177
- for out_line in out.splitlines():
178
- log_subprocess(out_line)
179
- all_output.append(out)
180
- for err_line in err.splitlines():
181
- log_subprocess(err_line)
182
- all_output.append(err)
183
- output = out
184
-
185
- proc_had_error = proc.returncode and proc.returncode not in extra_ok_returncodes
186
- if use_spinner:
187
- assert spinner
188
- if proc_had_error:
189
- spinner.finish("error")
190
- else:
191
- spinner.finish("done")
192
- if proc_had_error:
193
- if on_returncode == "raise":
194
- error = InstallationSubprocessError(
195
- command_description=command_desc,
196
- exit_code=proc.returncode,
197
- output_lines=all_output if not showing_subprocess else None,
198
- )
199
- if log_failed_cmd:
200
- subprocess_logger.error("%s", error, extra={"rich": True})
201
- subprocess_logger.verbose(
202
- "[bold magenta]full command[/]: [blue]%s[/]",
203
- escape(format_command_args(cmd)),
204
- extra={"markup": True},
205
- )
206
- subprocess_logger.verbose(
207
- "[bold magenta]cwd[/]: %s",
208
- escape(cwd or "[inherit]"),
209
- extra={"markup": True},
210
- )
211
-
212
- raise error
213
- elif on_returncode == "warn":
214
- subprocess_logger.warning(
215
- 'Command "%s" had error code %s in %s',
216
- command_desc,
217
- proc.returncode,
218
- cwd,
219
- )
220
- elif on_returncode == "ignore":
221
- pass
222
- else:
223
- raise ValueError(f"Invalid value: on_returncode={on_returncode!r}")
224
- return output
225
-
226
-
227
- def runner_with_spinner_message(message: str) -> Callable[..., None]:
228
- """Provide a subprocess_runner that shows a spinner message.
229
-
230
- Intended for use with for BuildBackendHookCaller. Thus, the runner has
231
- an API that matches what's expected by BuildBackendHookCaller.subprocess_runner.
232
- """
233
-
234
- def runner(
235
- cmd: list[str],
236
- cwd: str | None = None,
237
- extra_environ: Mapping[str, Any] | None = None,
238
- ) -> None:
239
- with open_spinner(message) as spinner:
240
- call_subprocess(
241
- cmd,
242
- command_desc=message,
243
- cwd=cwd,
244
- extra_environ=extra_environ,
245
- spinner=spinner,
246
- )
247
-
248
- return runner