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.
- cli_ih/asyncClient.py +13 -7
- cli_ih/client.py +13 -6
- {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/METADATA +1 -1
- cli_ih-0.6.3.1.dist-info/RECORD +425 -0
- {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/WHEEL +1 -1
- {cli_ih-0.6.3.dist-info → cli_ih-0.6.3.1.dist-info}/top_level.txt +1 -0
- venv/Lib/site-packages/__editable___cli_ih_0_6_3_1_finder.py +85 -0
- venv/Lib/site-packages/pip/__init__.py +13 -0
- venv/Lib/site-packages/pip/__main__.py +24 -0
- venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
- venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
- venv/Lib/site-packages/pip/_internal/build_env.py +349 -0
- venv/Lib/site-packages/pip/_internal/cache.py +291 -0
- venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
- venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
- venv/Lib/site-packages/pip/_internal/cli/base_command.py +244 -0
- venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1138 -0
- venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
- venv/Lib/site-packages/pip/_internal/cli/index_command.py +175 -0
- venv/Lib/site-packages/pip/_internal/cli/main.py +80 -0
- venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
- venv/Lib/site-packages/pip/_internal/cli/parser.py +298 -0
- venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +151 -0
- venv/Lib/site-packages/pip/_internal/cli/req_command.py +351 -0
- venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
- venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
- venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
- venv/Lib/site-packages/pip/_internal/commands/cache.py +231 -0
- venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
- venv/Lib/site-packages/pip/_internal/commands/completion.py +135 -0
- venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
- venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
- venv/Lib/site-packages/pip/_internal/commands/download.py +145 -0
- venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
- venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
- venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
- venv/Lib/site-packages/pip/_internal/commands/index.py +159 -0
- venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
- venv/Lib/site-packages/pip/_internal/commands/install.py +798 -0
- venv/Lib/site-packages/pip/_internal/commands/list.py +400 -0
- venv/Lib/site-packages/pip/_internal/commands/lock.py +170 -0
- venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
- venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
- venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
- venv/Lib/site-packages/pip/_internal/commands/wheel.py +181 -0
- venv/Lib/site-packages/pip/_internal/configuration.py +397 -0
- venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
- venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
- venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
- venv/Lib/site-packages/pip/_internal/distributions/sdist.py +165 -0
- venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
- venv/Lib/site-packages/pip/_internal/exceptions.py +881 -0
- venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/index/collector.py +489 -0
- venv/Lib/site-packages/pip/_internal/index/package_finder.py +1059 -0
- venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
- venv/Lib/site-packages/pip/_internal/locations/__init__.py +441 -0
- venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
- venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +215 -0
- venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
- venv/Lib/site-packages/pip/_internal/main.py +12 -0
- venv/Lib/site-packages/pip/_internal/metadata/__init__.py +164 -0
- venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
- venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +223 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
- venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
- venv/Lib/site-packages/pip/_internal/models/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/models/candidate.py +25 -0
- venv/Lib/site-packages/pip/_internal/models/direct_url.py +227 -0
- venv/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
- venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
- venv/Lib/site-packages/pip/_internal/models/installation_report.py +57 -0
- venv/Lib/site-packages/pip/_internal/models/link.py +613 -0
- venv/Lib/site-packages/pip/_internal/models/pylock.py +188 -0
- venv/Lib/site-packages/pip/_internal/models/scheme.py +25 -0
- venv/Lib/site-packages/pip/_internal/models/search_scope.py +126 -0
- venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +53 -0
- venv/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
- venv/Lib/site-packages/pip/_internal/models/wheel.py +141 -0
- venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/network/auth.py +564 -0
- venv/Lib/site-packages/pip/_internal/network/cache.py +133 -0
- venv/Lib/site-packages/pip/_internal/network/download.py +342 -0
- venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +213 -0
- venv/Lib/site-packages/pip/_internal/network/session.py +528 -0
- venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
- venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
- venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +73 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +38 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +119 -0
- venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
- venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
- venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
- venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +48 -0
- venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +746 -0
- venv/Lib/site-packages/pip/_internal/operations/prepare.py +742 -0
- venv/Lib/site-packages/pip/_internal/pyproject.py +182 -0
- venv/Lib/site-packages/pip/_internal/req/__init__.py +105 -0
- venv/Lib/site-packages/pip/_internal/req/constructors.py +562 -0
- venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
- venv/Lib/site-packages/pip/_internal/req/req_file.py +620 -0
- venv/Lib/site-packages/pip/_internal/req/req_install.py +937 -0
- venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
- venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
- venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
- venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +582 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +814 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +276 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +85 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +247 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +336 -0
- venv/Lib/site-packages/pip/_internal/self_outdated_check.py +254 -0
- venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
- venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
- venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
- venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
- venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
- venv/Lib/site-packages/pip/_internal/utils/datetime.py +10 -0
- venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
- venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
- venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
- venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
- venv/Lib/site-packages/pip/_internal/utils/filesystem.py +152 -0
- venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
- venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
- venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
- venv/Lib/site-packages/pip/_internal/utils/logging.py +364 -0
- venv/Lib/site-packages/pip/_internal/utils/misc.py +765 -0
- venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
- venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
- venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +149 -0
- venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
- venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
- venv/Lib/site-packages/pip/_internal/utils/unpacking.py +337 -0
- venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
- venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
- venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
- venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
- venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
- venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
- venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
- venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
- venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +693 -0
- venv/Lib/site-packages/pip/_internal/wheel_builder.py +334 -0
- venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +29 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +168 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +119 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
- venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
- venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
- venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
- venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
- venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
- venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
- venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
- venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
- venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
- venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
- venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
- venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
- venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
- venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
- venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4243 -0
- venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
- venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
- venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8681 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
- venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +109 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +353 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +195 -0
- venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +145 -0
- venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +759 -0
- venv/Lib/site-packages/pip/_vendor/packaging/markers.py +362 -0
- venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +862 -0
- venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +91 -0
- venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1019 -0
- venv/Lib/site-packages/pip/_vendor/packaging/tags.py +656 -0
- venv/Lib/site-packages/pip/_vendor/packaging/utils.py +163 -0
- venv/Lib/site-packages/pip/_vendor/packaging/version.py +582 -0
- venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +144 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +21 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +272 -0
- venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
- venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
- venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
- venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
- venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
- venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
- venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
- venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
- venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
- venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
- venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
- venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
- venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
- venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
- venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
- venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
- venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
- venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
- venv/Lib/site-packages/pip/_vendor/requests/adapters.py +719 -0
- venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
- venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
- venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
- venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
- venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
- venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
- venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
- venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
- venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
- venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
- venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
- venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
- venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
- venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +622 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
- venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
- venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
- venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
- venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
- venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
- venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
- venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
- venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
- venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
- venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
- venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
- venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
- venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
- venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
- venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
- venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
- venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
- venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
- venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
- venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
- venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
- venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
- venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
- venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
- venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
- venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
- venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
- venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
- venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
- venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
- venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
- venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
- venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
- venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
- venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
- venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
- venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
- venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
- venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
- venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
- venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
- venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
- venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
- venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
- venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
- venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
- venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
- venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
- venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
- venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
- venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
- venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
- venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
- venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
- venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
- venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
- venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
- venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
- venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
- venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
- venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
- venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
- venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
- venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
- venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
- venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
- venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
- venv/Lib/site-packages/pip/_vendor/rich/style.py +796 -0
- venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
- venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
- venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
- venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
- venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
- venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
- venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
- venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
- venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
- venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +770 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_re.py +112 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
- venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
- venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
- venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
- venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_api.py +333 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +66 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
- venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
- venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
- venv/Lib/site-packages/pip/py.typed +4 -0
- cli_ih-0.6.3.dist-info/RECORD +0 -8
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"""Base option parser setup"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import optparse
|
|
7
|
+
import shutil
|
|
8
|
+
import sys
|
|
9
|
+
import textwrap
|
|
10
|
+
from collections.abc import Generator
|
|
11
|
+
from contextlib import suppress
|
|
12
|
+
from typing import Any, NoReturn
|
|
13
|
+
|
|
14
|
+
from pip._internal.cli.status_codes import UNKNOWN_ERROR
|
|
15
|
+
from pip._internal.configuration import Configuration, ConfigurationError
|
|
16
|
+
from pip._internal.utils.misc import redact_auth_from_url, strtobool
|
|
17
|
+
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
|
|
22
|
+
"""A prettier/less verbose help formatter for optparse."""
|
|
23
|
+
|
|
24
|
+
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
25
|
+
# help position must be aligned with __init__.parseopts.description
|
|
26
|
+
kwargs["max_help_position"] = 30
|
|
27
|
+
kwargs["indent_increment"] = 1
|
|
28
|
+
kwargs["width"] = shutil.get_terminal_size()[0] - 2
|
|
29
|
+
super().__init__(*args, **kwargs)
|
|
30
|
+
|
|
31
|
+
def format_option_strings(self, option: optparse.Option) -> str:
|
|
32
|
+
return self._format_option_strings(option)
|
|
33
|
+
|
|
34
|
+
def _format_option_strings(
|
|
35
|
+
self, option: optparse.Option, mvarfmt: str = " <{}>", optsep: str = ", "
|
|
36
|
+
) -> str:
|
|
37
|
+
"""
|
|
38
|
+
Return a comma-separated list of option strings and metavars.
|
|
39
|
+
|
|
40
|
+
:param option: tuple of (short opt, long opt), e.g: ('-f', '--format')
|
|
41
|
+
:param mvarfmt: metavar format string
|
|
42
|
+
:param optsep: separator
|
|
43
|
+
"""
|
|
44
|
+
opts = []
|
|
45
|
+
|
|
46
|
+
if option._short_opts:
|
|
47
|
+
opts.append(option._short_opts[0])
|
|
48
|
+
if option._long_opts:
|
|
49
|
+
opts.append(option._long_opts[0])
|
|
50
|
+
if len(opts) > 1:
|
|
51
|
+
opts.insert(1, optsep)
|
|
52
|
+
|
|
53
|
+
if option.takes_value():
|
|
54
|
+
assert option.dest is not None
|
|
55
|
+
metavar = option.metavar or option.dest.lower()
|
|
56
|
+
opts.append(mvarfmt.format(metavar.lower()))
|
|
57
|
+
|
|
58
|
+
return "".join(opts)
|
|
59
|
+
|
|
60
|
+
def format_heading(self, heading: str) -> str:
|
|
61
|
+
if heading == "Options":
|
|
62
|
+
return ""
|
|
63
|
+
return heading + ":\n"
|
|
64
|
+
|
|
65
|
+
def format_usage(self, usage: str) -> str:
|
|
66
|
+
"""
|
|
67
|
+
Ensure there is only one newline between usage and the first heading
|
|
68
|
+
if there is no description.
|
|
69
|
+
"""
|
|
70
|
+
msg = "\nUsage: {}\n".format(self.indent_lines(textwrap.dedent(usage), " "))
|
|
71
|
+
return msg
|
|
72
|
+
|
|
73
|
+
def format_description(self, description: str | None) -> str:
|
|
74
|
+
# leave full control over description to us
|
|
75
|
+
if description:
|
|
76
|
+
if hasattr(self.parser, "main"):
|
|
77
|
+
label = "Commands"
|
|
78
|
+
else:
|
|
79
|
+
label = "Description"
|
|
80
|
+
# some doc strings have initial newlines, some don't
|
|
81
|
+
description = description.lstrip("\n")
|
|
82
|
+
# some doc strings have final newlines and spaces, some don't
|
|
83
|
+
description = description.rstrip()
|
|
84
|
+
# dedent, then reindent
|
|
85
|
+
description = self.indent_lines(textwrap.dedent(description), " ")
|
|
86
|
+
description = f"{label}:\n{description}\n"
|
|
87
|
+
return description
|
|
88
|
+
else:
|
|
89
|
+
return ""
|
|
90
|
+
|
|
91
|
+
def format_epilog(self, epilog: str | None) -> str:
|
|
92
|
+
# leave full control over epilog to us
|
|
93
|
+
if epilog:
|
|
94
|
+
return epilog
|
|
95
|
+
else:
|
|
96
|
+
return ""
|
|
97
|
+
|
|
98
|
+
def indent_lines(self, text: str, indent: str) -> str:
|
|
99
|
+
new_lines = [indent + line for line in text.split("\n")]
|
|
100
|
+
return "\n".join(new_lines)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter):
|
|
104
|
+
"""Custom help formatter for use in ConfigOptionParser.
|
|
105
|
+
|
|
106
|
+
This is updates the defaults before expanding them, allowing
|
|
107
|
+
them to show up correctly in the help listing.
|
|
108
|
+
|
|
109
|
+
Also redact auth from url type options
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
def expand_default(self, option: optparse.Option) -> str:
|
|
113
|
+
default_values = None
|
|
114
|
+
if self.parser is not None:
|
|
115
|
+
assert isinstance(self.parser, ConfigOptionParser)
|
|
116
|
+
self.parser._update_defaults(self.parser.defaults)
|
|
117
|
+
assert option.dest is not None
|
|
118
|
+
default_values = self.parser.defaults.get(option.dest)
|
|
119
|
+
help_text = super().expand_default(option)
|
|
120
|
+
|
|
121
|
+
if default_values and option.metavar == "URL":
|
|
122
|
+
if isinstance(default_values, str):
|
|
123
|
+
default_values = [default_values]
|
|
124
|
+
|
|
125
|
+
# If its not a list, we should abort and just return the help text
|
|
126
|
+
if not isinstance(default_values, list):
|
|
127
|
+
default_values = []
|
|
128
|
+
|
|
129
|
+
for val in default_values:
|
|
130
|
+
help_text = help_text.replace(val, redact_auth_from_url(val))
|
|
131
|
+
|
|
132
|
+
return help_text
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class CustomOptionParser(optparse.OptionParser):
|
|
136
|
+
def insert_option_group(
|
|
137
|
+
self, idx: int, *args: Any, **kwargs: Any
|
|
138
|
+
) -> optparse.OptionGroup:
|
|
139
|
+
"""Insert an OptionGroup at a given position."""
|
|
140
|
+
group = self.add_option_group(*args, **kwargs)
|
|
141
|
+
|
|
142
|
+
self.option_groups.pop()
|
|
143
|
+
self.option_groups.insert(idx, group)
|
|
144
|
+
|
|
145
|
+
return group
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def option_list_all(self) -> list[optparse.Option]:
|
|
149
|
+
"""Get a list of all options, including those in option groups."""
|
|
150
|
+
res = self.option_list[:]
|
|
151
|
+
for i in self.option_groups:
|
|
152
|
+
res.extend(i.option_list)
|
|
153
|
+
|
|
154
|
+
return res
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class ConfigOptionParser(CustomOptionParser):
|
|
158
|
+
"""Custom option parser which updates its defaults by checking the
|
|
159
|
+
configuration files and environmental variables"""
|
|
160
|
+
|
|
161
|
+
def __init__(
|
|
162
|
+
self,
|
|
163
|
+
*args: Any,
|
|
164
|
+
name: str,
|
|
165
|
+
isolated: bool = False,
|
|
166
|
+
**kwargs: Any,
|
|
167
|
+
) -> None:
|
|
168
|
+
self.name = name
|
|
169
|
+
self.config = Configuration(isolated)
|
|
170
|
+
|
|
171
|
+
assert self.name
|
|
172
|
+
super().__init__(*args, **kwargs)
|
|
173
|
+
|
|
174
|
+
def check_default(self, option: optparse.Option, key: str, val: Any) -> Any:
|
|
175
|
+
try:
|
|
176
|
+
return option.check_value(key, val)
|
|
177
|
+
except optparse.OptionValueError as exc:
|
|
178
|
+
print(f"An error occurred during configuration: {exc}")
|
|
179
|
+
sys.exit(3)
|
|
180
|
+
|
|
181
|
+
def _get_ordered_configuration_items(
|
|
182
|
+
self,
|
|
183
|
+
) -> Generator[tuple[str, Any], None, None]:
|
|
184
|
+
# Configuration gives keys in an unordered manner. Order them.
|
|
185
|
+
override_order = ["global", self.name, ":env:"]
|
|
186
|
+
|
|
187
|
+
# Pool the options into different groups
|
|
188
|
+
section_items: dict[str, list[tuple[str, Any]]] = {
|
|
189
|
+
name: [] for name in override_order
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
for _, value in self.config.items(): # noqa: PERF102
|
|
193
|
+
for section_key, val in value.items():
|
|
194
|
+
# ignore empty values
|
|
195
|
+
if not val:
|
|
196
|
+
logger.debug(
|
|
197
|
+
"Ignoring configuration key '%s' as its value is empty.",
|
|
198
|
+
section_key,
|
|
199
|
+
)
|
|
200
|
+
continue
|
|
201
|
+
|
|
202
|
+
section, key = section_key.split(".", 1)
|
|
203
|
+
if section in override_order:
|
|
204
|
+
section_items[section].append((key, val))
|
|
205
|
+
|
|
206
|
+
# Yield each group in their override order
|
|
207
|
+
for section in override_order:
|
|
208
|
+
yield from section_items[section]
|
|
209
|
+
|
|
210
|
+
def _update_defaults(self, defaults: dict[str, Any]) -> dict[str, Any]:
|
|
211
|
+
"""Updates the given defaults with values from the config files and
|
|
212
|
+
the environ. Does a little special handling for certain types of
|
|
213
|
+
options (lists)."""
|
|
214
|
+
|
|
215
|
+
# Accumulate complex default state.
|
|
216
|
+
self.values = optparse.Values(self.defaults)
|
|
217
|
+
late_eval = set()
|
|
218
|
+
# Then set the options with those values
|
|
219
|
+
for key, val in self._get_ordered_configuration_items():
|
|
220
|
+
# '--' because configuration supports only long names
|
|
221
|
+
option = self.get_option("--" + key)
|
|
222
|
+
|
|
223
|
+
# Ignore options not present in this parser. E.g. non-globals put
|
|
224
|
+
# in [global] by users that want them to apply to all applicable
|
|
225
|
+
# commands.
|
|
226
|
+
if option is None:
|
|
227
|
+
continue
|
|
228
|
+
|
|
229
|
+
assert option.dest is not None
|
|
230
|
+
|
|
231
|
+
if option.action in ("store_true", "store_false"):
|
|
232
|
+
try:
|
|
233
|
+
val = strtobool(val)
|
|
234
|
+
except ValueError:
|
|
235
|
+
self.error(
|
|
236
|
+
f"{val} is not a valid value for {key} option, "
|
|
237
|
+
"please specify a boolean value like yes/no, "
|
|
238
|
+
"true/false or 1/0 instead."
|
|
239
|
+
)
|
|
240
|
+
elif option.action == "count":
|
|
241
|
+
with suppress(ValueError):
|
|
242
|
+
val = strtobool(val)
|
|
243
|
+
with suppress(ValueError):
|
|
244
|
+
val = int(val)
|
|
245
|
+
if not isinstance(val, int) or val < 0:
|
|
246
|
+
self.error(
|
|
247
|
+
f"{val} is not a valid value for {key} option, "
|
|
248
|
+
"please instead specify either a non-negative integer "
|
|
249
|
+
"or a boolean value like yes/no or false/true "
|
|
250
|
+
"which is equivalent to 1/0."
|
|
251
|
+
)
|
|
252
|
+
elif option.action == "append":
|
|
253
|
+
val = val.split()
|
|
254
|
+
val = [self.check_default(option, key, v) for v in val]
|
|
255
|
+
elif option.action == "callback":
|
|
256
|
+
assert option.callback is not None
|
|
257
|
+
late_eval.add(option.dest)
|
|
258
|
+
opt_str = option.get_opt_string()
|
|
259
|
+
val = option.convert_value(opt_str, val)
|
|
260
|
+
# From take_action
|
|
261
|
+
args = option.callback_args or ()
|
|
262
|
+
kwargs = option.callback_kwargs or {}
|
|
263
|
+
option.callback(option, opt_str, val, self, *args, **kwargs)
|
|
264
|
+
else:
|
|
265
|
+
val = self.check_default(option, key, val)
|
|
266
|
+
|
|
267
|
+
defaults[option.dest] = val
|
|
268
|
+
|
|
269
|
+
for key in late_eval:
|
|
270
|
+
defaults[key] = getattr(self.values, key)
|
|
271
|
+
self.values = None
|
|
272
|
+
return defaults
|
|
273
|
+
|
|
274
|
+
def get_default_values(self) -> optparse.Values:
|
|
275
|
+
"""Overriding to make updating the defaults after instantiation of
|
|
276
|
+
the option parser possible, _update_defaults() does the dirty work."""
|
|
277
|
+
if not self.process_default_values:
|
|
278
|
+
# Old, pre-Optik 1.5 behaviour.
|
|
279
|
+
return optparse.Values(self.defaults)
|
|
280
|
+
|
|
281
|
+
# Load the configuration, or error out in case of an error
|
|
282
|
+
try:
|
|
283
|
+
self.config.load()
|
|
284
|
+
except ConfigurationError as err:
|
|
285
|
+
self.exit(UNKNOWN_ERROR, str(err))
|
|
286
|
+
|
|
287
|
+
defaults = self._update_defaults(self.defaults.copy()) # ours
|
|
288
|
+
for option in self._get_all_options():
|
|
289
|
+
assert option.dest is not None
|
|
290
|
+
default = defaults.get(option.dest)
|
|
291
|
+
if isinstance(default, str):
|
|
292
|
+
opt_str = option.get_opt_string()
|
|
293
|
+
defaults[option.dest] = option.check_value(opt_str, default)
|
|
294
|
+
return optparse.Values(defaults)
|
|
295
|
+
|
|
296
|
+
def error(self, msg: str) -> NoReturn:
|
|
297
|
+
self.print_usage(sys.stderr)
|
|
298
|
+
self.exit(UNKNOWN_ERROR, f"{msg}\n")
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import functools
|
|
4
|
+
import sys
|
|
5
|
+
from collections.abc import Generator, Iterable, Iterator
|
|
6
|
+
from typing import Callable, Literal, TypeVar
|
|
7
|
+
|
|
8
|
+
from pip._vendor.rich.progress import (
|
|
9
|
+
BarColumn,
|
|
10
|
+
DownloadColumn,
|
|
11
|
+
FileSizeColumn,
|
|
12
|
+
MofNCompleteColumn,
|
|
13
|
+
Progress,
|
|
14
|
+
ProgressColumn,
|
|
15
|
+
SpinnerColumn,
|
|
16
|
+
TextColumn,
|
|
17
|
+
TimeElapsedColumn,
|
|
18
|
+
TimeRemainingColumn,
|
|
19
|
+
TransferSpeedColumn,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
from pip._internal.cli.spinners import RateLimiter
|
|
23
|
+
from pip._internal.req.req_install import InstallRequirement
|
|
24
|
+
from pip._internal.utils.logging import get_console, get_indentation
|
|
25
|
+
|
|
26
|
+
T = TypeVar("T")
|
|
27
|
+
ProgressRenderer = Callable[[Iterable[T]], Iterator[T]]
|
|
28
|
+
BarType = Literal["on", "off", "raw"]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _rich_download_progress_bar(
|
|
32
|
+
iterable: Iterable[bytes],
|
|
33
|
+
*,
|
|
34
|
+
bar_type: BarType,
|
|
35
|
+
size: int | None,
|
|
36
|
+
initial_progress: int | None = None,
|
|
37
|
+
) -> Generator[bytes, None, None]:
|
|
38
|
+
assert bar_type == "on", "This should only be used in the default mode."
|
|
39
|
+
|
|
40
|
+
if not size:
|
|
41
|
+
total = float("inf")
|
|
42
|
+
columns: tuple[ProgressColumn, ...] = (
|
|
43
|
+
TextColumn("[progress.description]{task.description}"),
|
|
44
|
+
SpinnerColumn("line", speed=1.5),
|
|
45
|
+
FileSizeColumn(),
|
|
46
|
+
TransferSpeedColumn(),
|
|
47
|
+
TimeElapsedColumn(),
|
|
48
|
+
)
|
|
49
|
+
else:
|
|
50
|
+
total = size
|
|
51
|
+
columns = (
|
|
52
|
+
TextColumn("[progress.description]{task.description}"),
|
|
53
|
+
BarColumn(),
|
|
54
|
+
DownloadColumn(),
|
|
55
|
+
TransferSpeedColumn(),
|
|
56
|
+
TextColumn("{task.fields[time_description]}"),
|
|
57
|
+
TimeRemainingColumn(elapsed_when_finished=True),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
progress = Progress(*columns, refresh_per_second=5)
|
|
61
|
+
task_id = progress.add_task(
|
|
62
|
+
" " * (get_indentation() + 2), total=total, time_description="eta"
|
|
63
|
+
)
|
|
64
|
+
if initial_progress is not None:
|
|
65
|
+
progress.update(task_id, advance=initial_progress)
|
|
66
|
+
with progress:
|
|
67
|
+
for chunk in iterable:
|
|
68
|
+
yield chunk
|
|
69
|
+
progress.update(task_id, advance=len(chunk))
|
|
70
|
+
progress.update(task_id, time_description="")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _rich_install_progress_bar(
|
|
74
|
+
iterable: Iterable[InstallRequirement], *, total: int
|
|
75
|
+
) -> Iterator[InstallRequirement]:
|
|
76
|
+
columns = (
|
|
77
|
+
TextColumn("{task.fields[indent]}"),
|
|
78
|
+
BarColumn(),
|
|
79
|
+
MofNCompleteColumn(),
|
|
80
|
+
TextColumn("{task.description}"),
|
|
81
|
+
)
|
|
82
|
+
console = get_console()
|
|
83
|
+
|
|
84
|
+
bar = Progress(*columns, refresh_per_second=6, console=console, transient=True)
|
|
85
|
+
# Hiding the progress bar at initialization forces a refresh cycle to occur
|
|
86
|
+
# until the bar appears, avoiding very short flashes.
|
|
87
|
+
task = bar.add_task("", total=total, indent=" " * get_indentation(), visible=False)
|
|
88
|
+
with bar:
|
|
89
|
+
for req in iterable:
|
|
90
|
+
bar.update(task, description=rf"\[{req.name}]", visible=True)
|
|
91
|
+
yield req
|
|
92
|
+
bar.advance(task)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _raw_progress_bar(
|
|
96
|
+
iterable: Iterable[bytes],
|
|
97
|
+
*,
|
|
98
|
+
size: int | None,
|
|
99
|
+
initial_progress: int | None = None,
|
|
100
|
+
) -> Generator[bytes, None, None]:
|
|
101
|
+
def write_progress(current: int, total: int) -> None:
|
|
102
|
+
sys.stdout.write(f"Progress {current} of {total}\n")
|
|
103
|
+
sys.stdout.flush()
|
|
104
|
+
|
|
105
|
+
current = initial_progress or 0
|
|
106
|
+
total = size or 0
|
|
107
|
+
rate_limiter = RateLimiter(0.25)
|
|
108
|
+
|
|
109
|
+
write_progress(current, total)
|
|
110
|
+
for chunk in iterable:
|
|
111
|
+
current += len(chunk)
|
|
112
|
+
if rate_limiter.ready() or current == total:
|
|
113
|
+
write_progress(current, total)
|
|
114
|
+
rate_limiter.reset()
|
|
115
|
+
yield chunk
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def get_download_progress_renderer(
|
|
119
|
+
*, bar_type: BarType, size: int | None = None, initial_progress: int | None = None
|
|
120
|
+
) -> ProgressRenderer[bytes]:
|
|
121
|
+
"""Get an object that can be used to render the download progress.
|
|
122
|
+
|
|
123
|
+
Returns a callable, that takes an iterable to "wrap".
|
|
124
|
+
"""
|
|
125
|
+
if bar_type == "on":
|
|
126
|
+
return functools.partial(
|
|
127
|
+
_rich_download_progress_bar,
|
|
128
|
+
bar_type=bar_type,
|
|
129
|
+
size=size,
|
|
130
|
+
initial_progress=initial_progress,
|
|
131
|
+
)
|
|
132
|
+
elif bar_type == "raw":
|
|
133
|
+
return functools.partial(
|
|
134
|
+
_raw_progress_bar,
|
|
135
|
+
size=size,
|
|
136
|
+
initial_progress=initial_progress,
|
|
137
|
+
)
|
|
138
|
+
else:
|
|
139
|
+
return iter # no-op, when passed an iterator
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def get_install_progress_renderer(
|
|
143
|
+
*, bar_type: BarType, total: int
|
|
144
|
+
) -> ProgressRenderer[InstallRequirement]:
|
|
145
|
+
"""Get an object that can be used to render the install progress.
|
|
146
|
+
Returns a callable, that takes an iterable to "wrap".
|
|
147
|
+
"""
|
|
148
|
+
if bar_type == "on":
|
|
149
|
+
return functools.partial(_rich_install_progress_bar, total=total)
|
|
150
|
+
else:
|
|
151
|
+
return iter
|