cli-ih 0.6.3__py3-none-any.whl → 0.6.3.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 (424) hide show
  1. cli_ih/asyncClient.py +13 -7
  2. cli_ih/client.py +13 -6
  3. {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/METADATA +1 -1
  4. cli_ih-0.6.3.1.dist-info/RECORD +425 -0
  5. {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/WHEEL +1 -1
  6. {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/top_level.txt +1 -0
  7. venv/Lib/site-packages/__editable___cli_ih_0_6_3_1_finder.py +85 -0
  8. venv/Lib/site-packages/pip/__init__.py +13 -0
  9. venv/Lib/site-packages/pip/__main__.py +24 -0
  10. venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
  11. venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
  12. venv/Lib/site-packages/pip/_internal/build_env.py +349 -0
  13. venv/Lib/site-packages/pip/_internal/cache.py +291 -0
  14. venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
  15. venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
  16. venv/Lib/site-packages/pip/_internal/cli/base_command.py +244 -0
  17. venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1138 -0
  18. venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
  19. venv/Lib/site-packages/pip/_internal/cli/index_command.py +175 -0
  20. venv/Lib/site-packages/pip/_internal/cli/main.py +80 -0
  21. venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
  22. venv/Lib/site-packages/pip/_internal/cli/parser.py +298 -0
  23. venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +151 -0
  24. venv/Lib/site-packages/pip/_internal/cli/req_command.py +351 -0
  25. venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
  26. venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
  27. venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
  28. venv/Lib/site-packages/pip/_internal/commands/cache.py +231 -0
  29. venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
  30. venv/Lib/site-packages/pip/_internal/commands/completion.py +135 -0
  31. venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
  32. venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
  33. venv/Lib/site-packages/pip/_internal/commands/download.py +145 -0
  34. venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
  35. venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
  36. venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
  37. venv/Lib/site-packages/pip/_internal/commands/index.py +159 -0
  38. venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
  39. venv/Lib/site-packages/pip/_internal/commands/install.py +798 -0
  40. venv/Lib/site-packages/pip/_internal/commands/list.py +400 -0
  41. venv/Lib/site-packages/pip/_internal/commands/lock.py +170 -0
  42. venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
  43. venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
  44. venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
  45. venv/Lib/site-packages/pip/_internal/commands/wheel.py +181 -0
  46. venv/Lib/site-packages/pip/_internal/configuration.py +397 -0
  47. venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
  48. venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
  49. venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
  50. venv/Lib/site-packages/pip/_internal/distributions/sdist.py +165 -0
  51. venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
  52. venv/Lib/site-packages/pip/_internal/exceptions.py +881 -0
  53. venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
  54. venv/Lib/site-packages/pip/_internal/index/collector.py +489 -0
  55. venv/Lib/site-packages/pip/_internal/index/package_finder.py +1059 -0
  56. venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
  57. venv/Lib/site-packages/pip/_internal/locations/__init__.py +441 -0
  58. venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
  59. venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +215 -0
  60. venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
  61. venv/Lib/site-packages/pip/_internal/main.py +12 -0
  62. venv/Lib/site-packages/pip/_internal/metadata/__init__.py +164 -0
  63. venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
  64. venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
  65. venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
  66. venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
  67. venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +223 -0
  68. venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
  69. venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
  70. venv/Lib/site-packages/pip/_internal/models/__init__.py +1 -0
  71. venv/Lib/site-packages/pip/_internal/models/candidate.py +25 -0
  72. venv/Lib/site-packages/pip/_internal/models/direct_url.py +227 -0
  73. venv/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
  74. venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
  75. venv/Lib/site-packages/pip/_internal/models/installation_report.py +57 -0
  76. venv/Lib/site-packages/pip/_internal/models/link.py +613 -0
  77. venv/Lib/site-packages/pip/_internal/models/pylock.py +188 -0
  78. venv/Lib/site-packages/pip/_internal/models/scheme.py +25 -0
  79. venv/Lib/site-packages/pip/_internal/models/search_scope.py +126 -0
  80. venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +53 -0
  81. venv/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
  82. venv/Lib/site-packages/pip/_internal/models/wheel.py +141 -0
  83. venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
  84. venv/Lib/site-packages/pip/_internal/network/auth.py +564 -0
  85. venv/Lib/site-packages/pip/_internal/network/cache.py +133 -0
  86. venv/Lib/site-packages/pip/_internal/network/download.py +342 -0
  87. venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +213 -0
  88. venv/Lib/site-packages/pip/_internal/network/session.py +528 -0
  89. venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
  90. venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
  91. venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  92. venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  93. venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
  94. venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  95. venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
  96. venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +73 -0
  97. venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +38 -0
  98. venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
  99. venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +119 -0
  100. venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
  101. venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
  102. venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
  103. venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +48 -0
  104. venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +746 -0
  105. venv/Lib/site-packages/pip/_internal/operations/prepare.py +742 -0
  106. venv/Lib/site-packages/pip/_internal/pyproject.py +182 -0
  107. venv/Lib/site-packages/pip/_internal/req/__init__.py +105 -0
  108. venv/Lib/site-packages/pip/_internal/req/constructors.py +562 -0
  109. venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
  110. venv/Lib/site-packages/pip/_internal/req/req_file.py +620 -0
  111. venv/Lib/site-packages/pip/_internal/req/req_install.py +937 -0
  112. venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
  113. venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
  114. venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  115. venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
  116. venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  117. venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
  118. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  119. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
  120. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +582 -0
  121. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +814 -0
  122. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
  123. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +276 -0
  124. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +85 -0
  125. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +247 -0
  126. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +336 -0
  127. venv/Lib/site-packages/pip/_internal/self_outdated_check.py +254 -0
  128. venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  129. venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  130. venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
  131. venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
  132. venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
  133. venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
  134. venv/Lib/site-packages/pip/_internal/utils/datetime.py +10 -0
  135. venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
  136. venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
  137. venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
  138. venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
  139. venv/Lib/site-packages/pip/_internal/utils/filesystem.py +152 -0
  140. venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
  141. venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
  142. venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
  143. venv/Lib/site-packages/pip/_internal/utils/logging.py +364 -0
  144. venv/Lib/site-packages/pip/_internal/utils/misc.py +765 -0
  145. venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
  146. venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
  147. venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +149 -0
  148. venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
  149. venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
  150. venv/Lib/site-packages/pip/_internal/utils/unpacking.py +337 -0
  151. venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  152. venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
  153. venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
  154. venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  155. venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
  156. venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
  157. venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
  158. venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
  159. venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +693 -0
  160. venv/Lib/site-packages/pip/_internal/wheel_builder.py +334 -0
  161. venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
  162. venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +29 -0
  163. venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
  164. venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +168 -0
  165. venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
  166. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
  167. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
  168. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
  169. venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
  170. venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +119 -0
  171. venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
  172. venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  173. venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
  174. venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
  175. venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  176. venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  177. venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
  178. venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  179. venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
  180. venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
  181. venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
  182. venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
  183. venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
  184. venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
  185. venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
  186. venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
  187. venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
  188. venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
  189. venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
  190. venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
  191. venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
  192. venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
  193. venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
  194. venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  195. venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
  196. venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
  197. venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
  198. venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
  199. venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4243 -0
  200. venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
  201. venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
  202. venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  203. venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8681 -0
  204. venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
  205. venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  206. venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
  207. venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
  208. venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
  209. venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +109 -0
  210. venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
  211. venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
  212. venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +353 -0
  213. venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
  214. venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +195 -0
  215. venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +145 -0
  216. venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +759 -0
  217. venv/Lib/site-packages/pip/_vendor/packaging/markers.py +362 -0
  218. venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +862 -0
  219. venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  220. venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +91 -0
  221. venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1019 -0
  222. venv/Lib/site-packages/pip/_vendor/packaging/tags.py +656 -0
  223. venv/Lib/site-packages/pip/_vendor/packaging/utils.py +163 -0
  224. venv/Lib/site-packages/pip/_vendor/packaging/version.py +582 -0
  225. venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
  226. venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
  227. venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
  228. venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
  229. venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
  230. venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +144 -0
  231. venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  232. venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
  233. venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +21 -0
  234. venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +272 -0
  235. venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  236. venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  237. venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
  238. venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
  239. venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  240. venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
  241. venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
  242. venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  243. venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
  244. venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  245. venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
  246. venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
  247. venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  248. venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
  249. venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  250. venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  251. venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
  252. venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
  253. venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
  254. venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
  255. venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
  256. venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  257. venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
  258. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
  259. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
  260. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
  261. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
  262. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  263. venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
  264. venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  265. venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
  266. venv/Lib/site-packages/pip/_vendor/requests/adapters.py +719 -0
  267. venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
  268. venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
  269. venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
  270. venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
  271. venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
  272. venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
  273. venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
  274. venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
  275. venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
  276. venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
  277. venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
  278. venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  279. venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
  280. venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
  281. venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
  282. venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
  283. venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  284. venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
  285. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
  286. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
  287. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
  288. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
  289. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +622 -0
  290. venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
  291. venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
  292. venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
  293. venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
  294. venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  295. venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  296. venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  297. venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
  298. venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  299. venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
  300. venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  301. venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
  302. venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  303. venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  304. venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
  305. venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
  306. venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  307. venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
  308. venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
  309. venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
  310. venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
  311. venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  312. venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
  313. venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
  314. venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
  315. venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
  316. venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
  317. venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
  318. venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
  319. venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
  320. venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  321. venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
  322. venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
  323. venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
  324. venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
  325. venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
  326. venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
  327. venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
  328. venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
  329. venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
  330. venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  331. venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
  332. venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  333. venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
  334. venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  335. venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
  336. venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
  337. venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
  338. venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
  339. venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
  340. venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
  341. venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
  342. venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
  343. venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
  344. venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
  345. venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
  346. venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
  347. venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
  348. venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
  349. venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
  350. venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  351. venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
  352. venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
  353. venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
  354. venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
  355. venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
  356. venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
  357. venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
  358. venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
  359. venv/Lib/site-packages/pip/_vendor/rich/style.py +796 -0
  360. venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
  361. venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
  362. venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
  363. venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  364. venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
  365. venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
  366. venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
  367. venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
  368. venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
  369. venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
  370. venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +770 -0
  371. venv/Lib/site-packages/pip/_vendor/tomli/_re.py +112 -0
  372. venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
  373. venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
  374. venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  375. venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  376. venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  377. venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  378. venv/Lib/site-packages/pip/_vendor/truststore/_api.py +333 -0
  379. venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  380. venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +66 -0
  381. venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
  382. venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
  383. venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  384. venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
  385. venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
  386. venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  387. venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
  388. venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
  389. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  390. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  391. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  392. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  393. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
  394. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  395. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  396. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
  397. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  398. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  399. venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  400. venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  401. venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  402. venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  403. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  404. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  405. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
  406. venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
  407. venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
  408. venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
  409. venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
  410. venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  411. venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
  412. venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
  413. venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  414. venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
  415. venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  416. venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
  417. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
  418. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  419. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  420. venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  421. venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  422. venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  423. venv/Lib/site-packages/pip/py.typed +4 -0
  424. cli_ih-0.6.3.dist-info/RECORD +0 -8
@@ -0,0 +1,291 @@
1
+ """Cache Management"""
2
+
3
+ from __future__ import annotations
4
+
5
+ import hashlib
6
+ import json
7
+ import logging
8
+ import os
9
+ from pathlib import Path
10
+ from typing import Any
11
+
12
+ from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version
13
+ from pip._vendor.packaging.utils import canonicalize_name
14
+
15
+ from pip._internal.exceptions import InvalidWheelFilename
16
+ from pip._internal.models.direct_url import DirectUrl
17
+ from pip._internal.models.link import Link
18
+ from pip._internal.models.wheel import Wheel
19
+ from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds
20
+ from pip._internal.utils.urls import path_to_url
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+ ORIGIN_JSON_NAME = "origin.json"
25
+
26
+
27
+ def _hash_dict(d: dict[str, str]) -> str:
28
+ """Return a stable sha224 of a dictionary."""
29
+ s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True)
30
+ return hashlib.sha224(s.encode("ascii")).hexdigest()
31
+
32
+
33
+ class Cache:
34
+ """An abstract class - provides cache directories for data from links
35
+
36
+ :param cache_dir: The root of the cache.
37
+ """
38
+
39
+ def __init__(self, cache_dir: str) -> None:
40
+ super().__init__()
41
+ assert not cache_dir or os.path.isabs(cache_dir)
42
+ self.cache_dir = cache_dir or None
43
+
44
+ def _get_cache_path_parts(self, link: Link) -> list[str]:
45
+ """Get parts of part that must be os.path.joined with cache_dir"""
46
+
47
+ # We want to generate an url to use as our cache key, we don't want to
48
+ # just reuse the URL because it might have other items in the fragment
49
+ # and we don't care about those.
50
+ key_parts = {"url": link.url_without_fragment}
51
+ if link.hash_name is not None and link.hash is not None:
52
+ key_parts[link.hash_name] = link.hash
53
+ if link.subdirectory_fragment:
54
+ key_parts["subdirectory"] = link.subdirectory_fragment
55
+
56
+ # Include interpreter name, major and minor version in cache key
57
+ # to cope with ill-behaved sdists that build a different wheel
58
+ # depending on the python version their setup.py is being run on,
59
+ # and don't encode the difference in compatibility tags.
60
+ # https://github.com/pypa/pip/issues/7296
61
+ key_parts["interpreter_name"] = interpreter_name()
62
+ key_parts["interpreter_version"] = interpreter_version()
63
+
64
+ # Encode our key url with sha224, we'll use this because it has similar
65
+ # security properties to sha256, but with a shorter total output (and
66
+ # thus less secure). However the differences don't make a lot of
67
+ # difference for our use case here.
68
+ hashed = _hash_dict(key_parts)
69
+
70
+ # We want to nest the directories some to prevent having a ton of top
71
+ # level directories where we might run out of sub directories on some
72
+ # FS.
73
+ parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]]
74
+
75
+ return parts
76
+
77
+ def _get_candidates(self, link: Link, canonical_package_name: str) -> list[Any]:
78
+ can_not_cache = not self.cache_dir or not canonical_package_name or not link
79
+ if can_not_cache:
80
+ return []
81
+
82
+ path = self.get_path_for_link(link)
83
+ if os.path.isdir(path):
84
+ return [(candidate, path) for candidate in os.listdir(path)]
85
+ return []
86
+
87
+ def get_path_for_link(self, link: Link) -> str:
88
+ """Return a directory to store cached items in for link."""
89
+ raise NotImplementedError()
90
+
91
+ def get(
92
+ self,
93
+ link: Link,
94
+ package_name: str | None,
95
+ supported_tags: list[Tag],
96
+ ) -> Link:
97
+ """Returns a link to a cached item if it exists, otherwise returns the
98
+ passed link.
99
+ """
100
+ raise NotImplementedError()
101
+
102
+
103
+ class SimpleWheelCache(Cache):
104
+ """A cache of wheels for future installs."""
105
+
106
+ def __init__(self, cache_dir: str) -> None:
107
+ super().__init__(cache_dir)
108
+
109
+ def get_path_for_link(self, link: Link) -> str:
110
+ """Return a directory to store cached wheels for link
111
+
112
+ Because there are M wheels for any one sdist, we provide a directory
113
+ to cache them in, and then consult that directory when looking up
114
+ cache hits.
115
+
116
+ We only insert things into the cache if they have plausible version
117
+ numbers, so that we don't contaminate the cache with things that were
118
+ not unique. E.g. ./package might have dozens of installs done for it
119
+ and build a version of 0.0...and if we built and cached a wheel, we'd
120
+ end up using the same wheel even if the source has been edited.
121
+
122
+ :param link: The link of the sdist for which this will cache wheels.
123
+ """
124
+ parts = self._get_cache_path_parts(link)
125
+ assert self.cache_dir
126
+ # Store wheels within the root cache_dir
127
+ return os.path.join(self.cache_dir, "wheels", *parts)
128
+
129
+ def get(
130
+ self,
131
+ link: Link,
132
+ package_name: str | None,
133
+ supported_tags: list[Tag],
134
+ ) -> Link:
135
+ candidates = []
136
+
137
+ if not package_name:
138
+ return link
139
+
140
+ canonical_package_name = canonicalize_name(package_name)
141
+ for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name):
142
+ try:
143
+ wheel = Wheel(wheel_name)
144
+ except InvalidWheelFilename:
145
+ continue
146
+ if canonicalize_name(wheel.name) != canonical_package_name:
147
+ logger.debug(
148
+ "Ignoring cached wheel %s for %s as it "
149
+ "does not match the expected distribution name %s.",
150
+ wheel_name,
151
+ link,
152
+ package_name,
153
+ )
154
+ continue
155
+ if not wheel.supported(supported_tags):
156
+ # Built for a different python/arch/etc
157
+ continue
158
+ candidates.append(
159
+ (
160
+ wheel.support_index_min(supported_tags),
161
+ wheel_name,
162
+ wheel_dir,
163
+ )
164
+ )
165
+
166
+ if not candidates:
167
+ return link
168
+
169
+ _, wheel_name, wheel_dir = min(candidates)
170
+ return Link(path_to_url(os.path.join(wheel_dir, wheel_name)))
171
+
172
+
173
+ class EphemWheelCache(SimpleWheelCache):
174
+ """A SimpleWheelCache that creates it's own temporary cache directory"""
175
+
176
+ def __init__(self) -> None:
177
+ self._temp_dir = TempDirectory(
178
+ kind=tempdir_kinds.EPHEM_WHEEL_CACHE,
179
+ globally_managed=True,
180
+ )
181
+
182
+ super().__init__(self._temp_dir.path)
183
+
184
+
185
+ class CacheEntry:
186
+ def __init__(
187
+ self,
188
+ link: Link,
189
+ persistent: bool,
190
+ ):
191
+ self.link = link
192
+ self.persistent = persistent
193
+ self.origin: DirectUrl | None = None
194
+ origin_direct_url_path = Path(self.link.file_path).parent / ORIGIN_JSON_NAME
195
+ if origin_direct_url_path.exists():
196
+ try:
197
+ self.origin = DirectUrl.from_json(
198
+ origin_direct_url_path.read_text(encoding="utf-8")
199
+ )
200
+ except Exception as e:
201
+ logger.warning(
202
+ "Ignoring invalid cache entry origin file %s for %s (%s)",
203
+ origin_direct_url_path,
204
+ link.filename,
205
+ e,
206
+ )
207
+
208
+
209
+ class WheelCache(Cache):
210
+ """Wraps EphemWheelCache and SimpleWheelCache into a single Cache
211
+
212
+ This Cache allows for gracefully degradation, using the ephem wheel cache
213
+ when a certain link is not found in the simple wheel cache first.
214
+ """
215
+
216
+ def __init__(self, cache_dir: str) -> None:
217
+ super().__init__(cache_dir)
218
+ self._wheel_cache = SimpleWheelCache(cache_dir)
219
+ self._ephem_cache = EphemWheelCache()
220
+
221
+ def get_path_for_link(self, link: Link) -> str:
222
+ return self._wheel_cache.get_path_for_link(link)
223
+
224
+ def get_ephem_path_for_link(self, link: Link) -> str:
225
+ return self._ephem_cache.get_path_for_link(link)
226
+
227
+ def get(
228
+ self,
229
+ link: Link,
230
+ package_name: str | None,
231
+ supported_tags: list[Tag],
232
+ ) -> Link:
233
+ cache_entry = self.get_cache_entry(link, package_name, supported_tags)
234
+ if cache_entry is None:
235
+ return link
236
+ return cache_entry.link
237
+
238
+ def get_cache_entry(
239
+ self,
240
+ link: Link,
241
+ package_name: str | None,
242
+ supported_tags: list[Tag],
243
+ ) -> CacheEntry | None:
244
+ """Returns a CacheEntry with a link to a cached item if it exists or
245
+ None. The cache entry indicates if the item was found in the persistent
246
+ or ephemeral cache.
247
+ """
248
+ retval = self._wheel_cache.get(
249
+ link=link,
250
+ package_name=package_name,
251
+ supported_tags=supported_tags,
252
+ )
253
+ if retval is not link:
254
+ return CacheEntry(retval, persistent=True)
255
+
256
+ retval = self._ephem_cache.get(
257
+ link=link,
258
+ package_name=package_name,
259
+ supported_tags=supported_tags,
260
+ )
261
+ if retval is not link:
262
+ return CacheEntry(retval, persistent=False)
263
+
264
+ return None
265
+
266
+ @staticmethod
267
+ def record_download_origin(cache_dir: str, download_info: DirectUrl) -> None:
268
+ origin_path = Path(cache_dir) / ORIGIN_JSON_NAME
269
+ if origin_path.exists():
270
+ try:
271
+ origin = DirectUrl.from_json(origin_path.read_text(encoding="utf-8"))
272
+ except Exception as e:
273
+ logger.warning(
274
+ "Could not read origin file %s in cache entry (%s). "
275
+ "Will attempt to overwrite it.",
276
+ origin_path,
277
+ e,
278
+ )
279
+ else:
280
+ # TODO: use DirectUrl.equivalent when
281
+ # https://github.com/pypa/pip/pull/10564 is merged.
282
+ if origin.url != download_info.url:
283
+ logger.warning(
284
+ "Origin URL %s in cache entry %s does not match download URL "
285
+ "%s. This is likely a pip bug or a cache corruption issue. "
286
+ "Will overwrite it with the new value.",
287
+ origin.url,
288
+ cache_dir,
289
+ download_info.url,
290
+ )
291
+ origin_path.write_text(download_info.to_json(), encoding="utf-8")
@@ -0,0 +1,3 @@
1
+ """Subpackage containing all of pip's command line interface related code"""
2
+
3
+ # This file intentionally does not import submodules
@@ -0,0 +1,184 @@
1
+ """Logic that powers autocompletion installed by ``pip completion``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import optparse
6
+ import os
7
+ import sys
8
+ from collections.abc import Iterable
9
+ from itertools import chain
10
+ from typing import Any
11
+
12
+ from pip._internal.cli.main_parser import create_main_parser
13
+ from pip._internal.commands import commands_dict, create_command
14
+ from pip._internal.metadata import get_default_environment
15
+
16
+
17
+ def autocomplete() -> None:
18
+ """Entry Point for completion of main and subcommand options."""
19
+ # Don't complete if user hasn't sourced bash_completion file.
20
+ if "PIP_AUTO_COMPLETE" not in os.environ:
21
+ return
22
+ # Don't complete if autocompletion environment variables
23
+ # are not present
24
+ if not os.environ.get("COMP_WORDS") or not os.environ.get("COMP_CWORD"):
25
+ return
26
+ cwords = os.environ["COMP_WORDS"].split()[1:]
27
+ cword = int(os.environ["COMP_CWORD"])
28
+ try:
29
+ current = cwords[cword - 1]
30
+ except IndexError:
31
+ current = ""
32
+
33
+ parser = create_main_parser()
34
+ subcommands = list(commands_dict)
35
+ options = []
36
+
37
+ # subcommand
38
+ subcommand_name: str | None = None
39
+ for word in cwords:
40
+ if word in subcommands:
41
+ subcommand_name = word
42
+ break
43
+ # subcommand options
44
+ if subcommand_name is not None:
45
+ # special case: 'help' subcommand has no options
46
+ if subcommand_name == "help":
47
+ sys.exit(1)
48
+ # special case: list locally installed dists for show and uninstall
49
+ should_list_installed = not current.startswith("-") and subcommand_name in [
50
+ "show",
51
+ "uninstall",
52
+ ]
53
+ if should_list_installed:
54
+ env = get_default_environment()
55
+ lc = current.lower()
56
+ installed = [
57
+ dist.canonical_name
58
+ for dist in env.iter_installed_distributions(local_only=True)
59
+ if dist.canonical_name.startswith(lc)
60
+ and dist.canonical_name not in cwords[1:]
61
+ ]
62
+ # if there are no dists installed, fall back to option completion
63
+ if installed:
64
+ for dist in installed:
65
+ print(dist)
66
+ sys.exit(1)
67
+
68
+ should_list_installables = (
69
+ not current.startswith("-") and subcommand_name == "install"
70
+ )
71
+ if should_list_installables:
72
+ for path in auto_complete_paths(current, "path"):
73
+ print(path)
74
+ sys.exit(1)
75
+
76
+ subcommand = create_command(subcommand_name)
77
+
78
+ for opt in subcommand.parser.option_list_all:
79
+ if opt.help != optparse.SUPPRESS_HELP:
80
+ options += [
81
+ (opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts
82
+ ]
83
+
84
+ # filter out previously specified options from available options
85
+ prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]]
86
+ options = [(x, v) for (x, v) in options if x not in prev_opts]
87
+ # filter options by current input
88
+ options = [(k, v) for k, v in options if k.startswith(current)]
89
+ # get completion type given cwords and available subcommand options
90
+ completion_type = get_path_completion_type(
91
+ cwords,
92
+ cword,
93
+ subcommand.parser.option_list_all,
94
+ )
95
+ # get completion files and directories if ``completion_type`` is
96
+ # ``<file>``, ``<dir>`` or ``<path>``
97
+ if completion_type:
98
+ paths = auto_complete_paths(current, completion_type)
99
+ options = [(path, 0) for path in paths]
100
+ for option in options:
101
+ opt_label = option[0]
102
+ # append '=' to options which require args
103
+ if option[1] and option[0][:2] == "--":
104
+ opt_label += "="
105
+ print(opt_label)
106
+
107
+ # Complete sub-commands (unless one is already given).
108
+ if not any(name in cwords for name in subcommand.handler_map()):
109
+ for handler_name in subcommand.handler_map():
110
+ if handler_name.startswith(current):
111
+ print(handler_name)
112
+ else:
113
+ # show main parser options only when necessary
114
+
115
+ opts = [i.option_list for i in parser.option_groups]
116
+ opts.append(parser.option_list)
117
+ flattened_opts = chain.from_iterable(opts)
118
+ if current.startswith("-"):
119
+ for opt in flattened_opts:
120
+ if opt.help != optparse.SUPPRESS_HELP:
121
+ subcommands += opt._long_opts + opt._short_opts
122
+ else:
123
+ # get completion type given cwords and all available options
124
+ completion_type = get_path_completion_type(cwords, cword, flattened_opts)
125
+ if completion_type:
126
+ subcommands = list(auto_complete_paths(current, completion_type))
127
+
128
+ print(" ".join([x for x in subcommands if x.startswith(current)]))
129
+ sys.exit(1)
130
+
131
+
132
+ def get_path_completion_type(
133
+ cwords: list[str], cword: int, opts: Iterable[Any]
134
+ ) -> str | None:
135
+ """Get the type of path completion (``file``, ``dir``, ``path`` or None)
136
+
137
+ :param cwords: same as the environmental variable ``COMP_WORDS``
138
+ :param cword: same as the environmental variable ``COMP_CWORD``
139
+ :param opts: The available options to check
140
+ :return: path completion type (``file``, ``dir``, ``path`` or None)
141
+ """
142
+ if cword < 2 or not cwords[cword - 2].startswith("-"):
143
+ return None
144
+ for opt in opts:
145
+ if opt.help == optparse.SUPPRESS_HELP:
146
+ continue
147
+ for o in str(opt).split("/"):
148
+ if cwords[cword - 2].split("=")[0] == o:
149
+ if not opt.metavar or any(
150
+ x in ("path", "file", "dir") for x in opt.metavar.split("/")
151
+ ):
152
+ return opt.metavar
153
+ return None
154
+
155
+
156
+ def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]:
157
+ """If ``completion_type`` is ``file`` or ``path``, list all regular files
158
+ and directories starting with ``current``; otherwise only list directories
159
+ starting with ``current``.
160
+
161
+ :param current: The word to be completed
162
+ :param completion_type: path completion type(``file``, ``path`` or ``dir``)
163
+ :return: A generator of regular files and/or directories
164
+ """
165
+ directory, filename = os.path.split(current)
166
+ current_path = os.path.abspath(directory)
167
+ # Don't complete paths if they can't be accessed
168
+ if not os.access(current_path, os.R_OK):
169
+ return
170
+ filename = os.path.normcase(filename)
171
+ # list all files that start with ``filename``
172
+ file_list = (
173
+ x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename)
174
+ )
175
+ for f in file_list:
176
+ opt = os.path.join(current_path, f)
177
+ comp_file = os.path.normcase(os.path.join(directory, f))
178
+ # complete regular files when there is not ``<dir>`` after option
179
+ # complete directories when there is ``<file>``, ``<path>`` or
180
+ # ``<dir>``after option
181
+ if completion_type != "dir" and os.path.isfile(opt):
182
+ yield comp_file
183
+ elif os.path.isdir(opt):
184
+ yield os.path.join(comp_file, "")