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,130 +0,0 @@
1
- """
2
- NTLM authenticating pool, contributed by erikcederstran
3
-
4
- Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10
5
- """
6
- from __future__ import absolute_import
7
-
8
- import warnings
9
- from logging import getLogger
10
-
11
- from ntlm import ntlm
12
-
13
- from .. import HTTPSConnectionPool
14
- from ..packages.six.moves.http_client import HTTPSConnection
15
-
16
- warnings.warn(
17
- "The 'urllib3.contrib.ntlmpool' module is deprecated and will be removed "
18
- "in urllib3 v2.0 release, urllib3 is not able to support it properly due "
19
- "to reasons listed in issue: https://github.com/urllib3/urllib3/issues/2282. "
20
- "If you are a user of this module please comment in the mentioned issue.",
21
- DeprecationWarning,
22
- )
23
-
24
- log = getLogger(__name__)
25
-
26
-
27
- class NTLMConnectionPool(HTTPSConnectionPool):
28
- """
29
- Implements an NTLM authentication version of an urllib3 connection pool
30
- """
31
-
32
- scheme = "https"
33
-
34
- def __init__(self, user, pw, authurl, *args, **kwargs):
35
- """
36
- authurl is a random URL on the server that is protected by NTLM.
37
- user is the Windows user, probably in the DOMAIN\\username format.
38
- pw is the password for the user.
39
- """
40
- super(NTLMConnectionPool, self).__init__(*args, **kwargs)
41
- self.authurl = authurl
42
- self.rawuser = user
43
- user_parts = user.split("\\", 1)
44
- self.domain = user_parts[0].upper()
45
- self.user = user_parts[1]
46
- self.pw = pw
47
-
48
- def _new_conn(self):
49
- # Performs the NTLM handshake that secures the connection. The socket
50
- # must be kept open while requests are performed.
51
- self.num_connections += 1
52
- log.debug(
53
- "Starting NTLM HTTPS connection no. %d: https://%s%s",
54
- self.num_connections,
55
- self.host,
56
- self.authurl,
57
- )
58
-
59
- headers = {"Connection": "Keep-Alive"}
60
- req_header = "Authorization"
61
- resp_header = "www-authenticate"
62
-
63
- conn = HTTPSConnection(host=self.host, port=self.port)
64
-
65
- # Send negotiation message
66
- headers[req_header] = "NTLM %s" % ntlm.create_NTLM_NEGOTIATE_MESSAGE(
67
- self.rawuser
68
- )
69
- log.debug("Request headers: %s", headers)
70
- conn.request("GET", self.authurl, None, headers)
71
- res = conn.getresponse()
72
- reshdr = dict(res.headers)
73
- log.debug("Response status: %s %s", res.status, res.reason)
74
- log.debug("Response headers: %s", reshdr)
75
- log.debug("Response data: %s [...]", res.read(100))
76
-
77
- # Remove the reference to the socket, so that it can not be closed by
78
- # the response object (we want to keep the socket open)
79
- res.fp = None
80
-
81
- # Server should respond with a challenge message
82
- auth_header_values = reshdr[resp_header].split(", ")
83
- auth_header_value = None
84
- for s in auth_header_values:
85
- if s[:5] == "NTLM ":
86
- auth_header_value = s[5:]
87
- if auth_header_value is None:
88
- raise Exception(
89
- "Unexpected %s response header: %s" % (resp_header, reshdr[resp_header])
90
- )
91
-
92
- # Send authentication message
93
- ServerChallenge, NegotiateFlags = ntlm.parse_NTLM_CHALLENGE_MESSAGE(
94
- auth_header_value
95
- )
96
- auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(
97
- ServerChallenge, self.user, self.domain, self.pw, NegotiateFlags
98
- )
99
- headers[req_header] = "NTLM %s" % auth_msg
100
- log.debug("Request headers: %s", headers)
101
- conn.request("GET", self.authurl, None, headers)
102
- res = conn.getresponse()
103
- log.debug("Response status: %s %s", res.status, res.reason)
104
- log.debug("Response headers: %s", dict(res.headers))
105
- log.debug("Response data: %s [...]", res.read()[:100])
106
- if res.status != 200:
107
- if res.status == 401:
108
- raise Exception("Server rejected request: wrong username or password")
109
- raise Exception("Wrong server response: %s %s" % (res.status, res.reason))
110
-
111
- res.fp = None
112
- log.debug("Connection established")
113
- return conn
114
-
115
- def urlopen(
116
- self,
117
- method,
118
- url,
119
- body=None,
120
- headers=None,
121
- retries=3,
122
- redirect=True,
123
- assert_same_host=True,
124
- ):
125
- if headers is None:
126
- headers = {}
127
- headers["Connection"] = "Keep-Alive"
128
- return super(NTLMConnectionPool, self).urlopen(
129
- method, url, body, headers, retries, redirect, assert_same_host
130
- )
@@ -1,518 +0,0 @@
1
- """
2
- TLS with SNI_-support for Python 2. Follow these instructions if you would
3
- like to verify TLS certificates in Python 2. Note, the default libraries do
4
- *not* do certificate checking; you need to do additional work to validate
5
- certificates yourself.
6
-
7
- This needs the following packages installed:
8
-
9
- * `pyOpenSSL`_ (tested with 16.0.0)
10
- * `cryptography`_ (minimum 1.3.4, from pyopenssl)
11
- * `idna`_ (minimum 2.0, from cryptography)
12
-
13
- However, pyopenssl depends on cryptography, which depends on idna, so while we
14
- use all three directly here we end up having relatively few packages required.
15
-
16
- You can install them with the following command:
17
-
18
- .. code-block:: bash
19
-
20
- $ python -m pip install pyopenssl cryptography idna
21
-
22
- To activate certificate checking, call
23
- :func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code
24
- before you begin making HTTP requests. This can be done in a ``sitecustomize``
25
- module, or at any other time before your application begins using ``urllib3``,
26
- like this:
27
-
28
- .. code-block:: python
29
-
30
- try:
31
- import pip._vendor.urllib3.contrib.pyopenssl as pyopenssl
32
- pyopenssl.inject_into_urllib3()
33
- except ImportError:
34
- pass
35
-
36
- Now you can use :mod:`urllib3` as you normally would, and it will support SNI
37
- when the required modules are installed.
38
-
39
- Activating this module also has the positive side effect of disabling SSL/TLS
40
- compression in Python 2 (see `CRIME attack`_).
41
-
42
- .. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication
43
- .. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit)
44
- .. _pyopenssl: https://www.pyopenssl.org
45
- .. _cryptography: https://cryptography.io
46
- .. _idna: https://github.com/kjd/idna
47
- """
48
- from __future__ import absolute_import
49
-
50
- import OpenSSL.crypto
51
- import OpenSSL.SSL
52
- from cryptography import x509
53
- from cryptography.hazmat.backends.openssl import backend as openssl_backend
54
-
55
- try:
56
- from cryptography.x509 import UnsupportedExtension
57
- except ImportError:
58
- # UnsupportedExtension is gone in cryptography >= 2.1.0
59
- class UnsupportedExtension(Exception):
60
- pass
61
-
62
-
63
- from io import BytesIO
64
- from socket import error as SocketError
65
- from socket import timeout
66
-
67
- try: # Platform-specific: Python 2
68
- from socket import _fileobject
69
- except ImportError: # Platform-specific: Python 3
70
- _fileobject = None
71
- from ..packages.backports.makefile import backport_makefile
72
-
73
- import logging
74
- import ssl
75
- import sys
76
- import warnings
77
-
78
- from .. import util
79
- from ..packages import six
80
- from ..util.ssl_ import PROTOCOL_TLS_CLIENT
81
-
82
- warnings.warn(
83
- "'urllib3.contrib.pyopenssl' module is deprecated and will be removed "
84
- "in a future release of urllib3 2.x. Read more in this issue: "
85
- "https://github.com/urllib3/urllib3/issues/2680",
86
- category=DeprecationWarning,
87
- stacklevel=2,
88
- )
89
-
90
- __all__ = ["inject_into_urllib3", "extract_from_urllib3"]
91
-
92
- # SNI always works.
93
- HAS_SNI = True
94
-
95
- # Map from urllib3 to PyOpenSSL compatible parameter-values.
96
- _openssl_versions = {
97
- util.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD,
98
- PROTOCOL_TLS_CLIENT: OpenSSL.SSL.SSLv23_METHOD,
99
- ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD,
100
- }
101
-
102
- if hasattr(ssl, "PROTOCOL_SSLv3") and hasattr(OpenSSL.SSL, "SSLv3_METHOD"):
103
- _openssl_versions[ssl.PROTOCOL_SSLv3] = OpenSSL.SSL.SSLv3_METHOD
104
-
105
- if hasattr(ssl, "PROTOCOL_TLSv1_1") and hasattr(OpenSSL.SSL, "TLSv1_1_METHOD"):
106
- _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD
107
-
108
- if hasattr(ssl, "PROTOCOL_TLSv1_2") and hasattr(OpenSSL.SSL, "TLSv1_2_METHOD"):
109
- _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD
110
-
111
-
112
- _stdlib_to_openssl_verify = {
113
- ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE,
114
- ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER,
115
- ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER
116
- + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
117
- }
118
- _openssl_to_stdlib_verify = dict((v, k) for k, v in _stdlib_to_openssl_verify.items())
119
-
120
- # OpenSSL will only write 16K at a time
121
- SSL_WRITE_BLOCKSIZE = 16384
122
-
123
- orig_util_HAS_SNI = util.HAS_SNI
124
- orig_util_SSLContext = util.ssl_.SSLContext
125
-
126
-
127
- log = logging.getLogger(__name__)
128
-
129
-
130
- def inject_into_urllib3():
131
- "Monkey-patch urllib3 with PyOpenSSL-backed SSL-support."
132
-
133
- _validate_dependencies_met()
134
-
135
- util.SSLContext = PyOpenSSLContext
136
- util.ssl_.SSLContext = PyOpenSSLContext
137
- util.HAS_SNI = HAS_SNI
138
- util.ssl_.HAS_SNI = HAS_SNI
139
- util.IS_PYOPENSSL = True
140
- util.ssl_.IS_PYOPENSSL = True
141
-
142
-
143
- def extract_from_urllib3():
144
- "Undo monkey-patching by :func:`inject_into_urllib3`."
145
-
146
- util.SSLContext = orig_util_SSLContext
147
- util.ssl_.SSLContext = orig_util_SSLContext
148
- util.HAS_SNI = orig_util_HAS_SNI
149
- util.ssl_.HAS_SNI = orig_util_HAS_SNI
150
- util.IS_PYOPENSSL = False
151
- util.ssl_.IS_PYOPENSSL = False
152
-
153
-
154
- def _validate_dependencies_met():
155
- """
156
- Verifies that PyOpenSSL's package-level dependencies have been met.
157
- Throws `ImportError` if they are not met.
158
- """
159
- # Method added in `cryptography==1.1`; not available in older versions
160
- from cryptography.x509.extensions import Extensions
161
-
162
- if getattr(Extensions, "get_extension_for_class", None) is None:
163
- raise ImportError(
164
- "'cryptography' module missing required functionality. "
165
- "Try upgrading to v1.3.4 or newer."
166
- )
167
-
168
- # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
169
- # attribute is only present on those versions.
170
- from OpenSSL.crypto import X509
171
-
172
- x509 = X509()
173
- if getattr(x509, "_x509", None) is None:
174
- raise ImportError(
175
- "'pyOpenSSL' module missing required functionality. "
176
- "Try upgrading to v0.14 or newer."
177
- )
178
-
179
-
180
- def _dnsname_to_stdlib(name):
181
- """
182
- Converts a dNSName SubjectAlternativeName field to the form used by the
183
- standard library on the given Python version.
184
-
185
- Cryptography produces a dNSName as a unicode string that was idna-decoded
186
- from ASCII bytes. We need to idna-encode that string to get it back, and
187
- then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib
188
- uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8).
189
-
190
- If the name cannot be idna-encoded then we return None signalling that
191
- the name given should be skipped.
192
- """
193
-
194
- def idna_encode(name):
195
- """
196
- Borrowed wholesale from the Python Cryptography Project. It turns out
197
- that we can't just safely call `idna.encode`: it can explode for
198
- wildcard names. This avoids that problem.
199
- """
200
- from pip._vendor import idna
201
-
202
- try:
203
- for prefix in [u"*.", u"."]:
204
- if name.startswith(prefix):
205
- name = name[len(prefix) :]
206
- return prefix.encode("ascii") + idna.encode(name)
207
- return idna.encode(name)
208
- except idna.core.IDNAError:
209
- return None
210
-
211
- # Don't send IPv6 addresses through the IDNA encoder.
212
- if ":" in name:
213
- return name
214
-
215
- name = idna_encode(name)
216
- if name is None:
217
- return None
218
- elif sys.version_info >= (3, 0):
219
- name = name.decode("utf-8")
220
- return name
221
-
222
-
223
- def get_subj_alt_name(peer_cert):
224
- """
225
- Given an PyOpenSSL certificate, provides all the subject alternative names.
226
- """
227
- # Pass the cert to cryptography, which has much better APIs for this.
228
- if hasattr(peer_cert, "to_cryptography"):
229
- cert = peer_cert.to_cryptography()
230
- else:
231
- der = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, peer_cert)
232
- cert = x509.load_der_x509_certificate(der, openssl_backend)
233
-
234
- # We want to find the SAN extension. Ask Cryptography to locate it (it's
235
- # faster than looping in Python)
236
- try:
237
- ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName).value
238
- except x509.ExtensionNotFound:
239
- # No such extension, return the empty list.
240
- return []
241
- except (
242
- x509.DuplicateExtension,
243
- UnsupportedExtension,
244
- x509.UnsupportedGeneralNameType,
245
- UnicodeError,
246
- ) as e:
247
- # A problem has been found with the quality of the certificate. Assume
248
- # no SAN field is present.
249
- log.warning(
250
- "A problem was encountered with the certificate that prevented "
251
- "urllib3 from finding the SubjectAlternativeName field. This can "
252
- "affect certificate validation. The error was %s",
253
- e,
254
- )
255
- return []
256
-
257
- # We want to return dNSName and iPAddress fields. We need to cast the IPs
258
- # back to strings because the match_hostname function wants them as
259
- # strings.
260
- # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8
261
- # decoded. This is pretty frustrating, but that's what the standard library
262
- # does with certificates, and so we need to attempt to do the same.
263
- # We also want to skip over names which cannot be idna encoded.
264
- names = [
265
- ("DNS", name)
266
- for name in map(_dnsname_to_stdlib, ext.get_values_for_type(x509.DNSName))
267
- if name is not None
268
- ]
269
- names.extend(
270
- ("IP Address", str(name)) for name in ext.get_values_for_type(x509.IPAddress)
271
- )
272
-
273
- return names
274
-
275
-
276
- class WrappedSocket(object):
277
- """API-compatibility wrapper for Python OpenSSL's Connection-class.
278
-
279
- Note: _makefile_refs, _drop() and _reuse() are needed for the garbage
280
- collector of pypy.
281
- """
282
-
283
- def __init__(self, connection, socket, suppress_ragged_eofs=True):
284
- self.connection = connection
285
- self.socket = socket
286
- self.suppress_ragged_eofs = suppress_ragged_eofs
287
- self._makefile_refs = 0
288
- self._closed = False
289
-
290
- def fileno(self):
291
- return self.socket.fileno()
292
-
293
- # Copy-pasted from Python 3.5 source code
294
- def _decref_socketios(self):
295
- if self._makefile_refs > 0:
296
- self._makefile_refs -= 1
297
- if self._closed:
298
- self.close()
299
-
300
- def recv(self, *args, **kwargs):
301
- try:
302
- data = self.connection.recv(*args, **kwargs)
303
- except OpenSSL.SSL.SysCallError as e:
304
- if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"):
305
- return b""
306
- else:
307
- raise SocketError(str(e))
308
- except OpenSSL.SSL.ZeroReturnError:
309
- if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN:
310
- return b""
311
- else:
312
- raise
313
- except OpenSSL.SSL.WantReadError:
314
- if not util.wait_for_read(self.socket, self.socket.gettimeout()):
315
- raise timeout("The read operation timed out")
316
- else:
317
- return self.recv(*args, **kwargs)
318
-
319
- # TLS 1.3 post-handshake authentication
320
- except OpenSSL.SSL.Error as e:
321
- raise ssl.SSLError("read error: %r" % e)
322
- else:
323
- return data
324
-
325
- def recv_into(self, *args, **kwargs):
326
- try:
327
- return self.connection.recv_into(*args, **kwargs)
328
- except OpenSSL.SSL.SysCallError as e:
329
- if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"):
330
- return 0
331
- else:
332
- raise SocketError(str(e))
333
- except OpenSSL.SSL.ZeroReturnError:
334
- if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN:
335
- return 0
336
- else:
337
- raise
338
- except OpenSSL.SSL.WantReadError:
339
- if not util.wait_for_read(self.socket, self.socket.gettimeout()):
340
- raise timeout("The read operation timed out")
341
- else:
342
- return self.recv_into(*args, **kwargs)
343
-
344
- # TLS 1.3 post-handshake authentication
345
- except OpenSSL.SSL.Error as e:
346
- raise ssl.SSLError("read error: %r" % e)
347
-
348
- def settimeout(self, timeout):
349
- return self.socket.settimeout(timeout)
350
-
351
- def _send_until_done(self, data):
352
- while True:
353
- try:
354
- return self.connection.send(data)
355
- except OpenSSL.SSL.WantWriteError:
356
- if not util.wait_for_write(self.socket, self.socket.gettimeout()):
357
- raise timeout()
358
- continue
359
- except OpenSSL.SSL.SysCallError as e:
360
- raise SocketError(str(e))
361
-
362
- def sendall(self, data):
363
- total_sent = 0
364
- while total_sent < len(data):
365
- sent = self._send_until_done(
366
- data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE]
367
- )
368
- total_sent += sent
369
-
370
- def shutdown(self):
371
- # FIXME rethrow compatible exceptions should we ever use this
372
- self.connection.shutdown()
373
-
374
- def close(self):
375
- if self._makefile_refs < 1:
376
- try:
377
- self._closed = True
378
- return self.connection.close()
379
- except OpenSSL.SSL.Error:
380
- return
381
- else:
382
- self._makefile_refs -= 1
383
-
384
- def getpeercert(self, binary_form=False):
385
- x509 = self.connection.get_peer_certificate()
386
-
387
- if not x509:
388
- return x509
389
-
390
- if binary_form:
391
- return OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, x509)
392
-
393
- return {
394
- "subject": ((("commonName", x509.get_subject().CN),),),
395
- "subjectAltName": get_subj_alt_name(x509),
396
- }
397
-
398
- def version(self):
399
- return self.connection.get_protocol_version_name()
400
-
401
- def _reuse(self):
402
- self._makefile_refs += 1
403
-
404
- def _drop(self):
405
- if self._makefile_refs < 1:
406
- self.close()
407
- else:
408
- self._makefile_refs -= 1
409
-
410
-
411
- if _fileobject: # Platform-specific: Python 2
412
-
413
- def makefile(self, mode, bufsize=-1):
414
- self._makefile_refs += 1
415
- return _fileobject(self, mode, bufsize, close=True)
416
-
417
- else: # Platform-specific: Python 3
418
- makefile = backport_makefile
419
-
420
- WrappedSocket.makefile = makefile
421
-
422
-
423
- class PyOpenSSLContext(object):
424
- """
425
- I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible
426
- for translating the interface of the standard library ``SSLContext`` object
427
- to calls into PyOpenSSL.
428
- """
429
-
430
- def __init__(self, protocol):
431
- self.protocol = _openssl_versions[protocol]
432
- self._ctx = OpenSSL.SSL.Context(self.protocol)
433
- self._options = 0
434
- self.check_hostname = False
435
-
436
- @property
437
- def options(self):
438
- return self._options
439
-
440
- @options.setter
441
- def options(self, value):
442
- self._options = value
443
- self._ctx.set_options(value)
444
-
445
- @property
446
- def verify_mode(self):
447
- return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()]
448
-
449
- @verify_mode.setter
450
- def verify_mode(self, value):
451
- self._ctx.set_verify(_stdlib_to_openssl_verify[value], _verify_callback)
452
-
453
- def set_default_verify_paths(self):
454
- self._ctx.set_default_verify_paths()
455
-
456
- def set_ciphers(self, ciphers):
457
- if isinstance(ciphers, six.text_type):
458
- ciphers = ciphers.encode("utf-8")
459
- self._ctx.set_cipher_list(ciphers)
460
-
461
- def load_verify_locations(self, cafile=None, capath=None, cadata=None):
462
- if cafile is not None:
463
- cafile = cafile.encode("utf-8")
464
- if capath is not None:
465
- capath = capath.encode("utf-8")
466
- try:
467
- self._ctx.load_verify_locations(cafile, capath)
468
- if cadata is not None:
469
- self._ctx.load_verify_locations(BytesIO(cadata))
470
- except OpenSSL.SSL.Error as e:
471
- raise ssl.SSLError("unable to load trusted certificates: %r" % e)
472
-
473
- def load_cert_chain(self, certfile, keyfile=None, password=None):
474
- self._ctx.use_certificate_chain_file(certfile)
475
- if password is not None:
476
- if not isinstance(password, six.binary_type):
477
- password = password.encode("utf-8")
478
- self._ctx.set_passwd_cb(lambda *_: password)
479
- self._ctx.use_privatekey_file(keyfile or certfile)
480
-
481
- def set_alpn_protocols(self, protocols):
482
- protocols = [six.ensure_binary(p) for p in protocols]
483
- return self._ctx.set_alpn_protos(protocols)
484
-
485
- def wrap_socket(
486
- self,
487
- sock,
488
- server_side=False,
489
- do_handshake_on_connect=True,
490
- suppress_ragged_eofs=True,
491
- server_hostname=None,
492
- ):
493
- cnx = OpenSSL.SSL.Connection(self._ctx, sock)
494
-
495
- if isinstance(server_hostname, six.text_type): # Platform-specific: Python 3
496
- server_hostname = server_hostname.encode("utf-8")
497
-
498
- if server_hostname is not None:
499
- cnx.set_tlsext_host_name(server_hostname)
500
-
501
- cnx.set_connect_state()
502
-
503
- while True:
504
- try:
505
- cnx.do_handshake()
506
- except OpenSSL.SSL.WantReadError:
507
- if not util.wait_for_read(sock, sock.gettimeout()):
508
- raise timeout("select timed out")
509
- continue
510
- except OpenSSL.SSL.Error as e:
511
- raise ssl.SSLError("bad handshake: %r" % e)
512
- break
513
-
514
- return WrappedSocket(cnx, sock)
515
-
516
-
517
- def _verify_callback(cnx, x509, err_no, err_depth, return_code):
518
- return err_no == 0