cli-ih 0.6.2.1__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 +51 -21
- cli_ih/client.py +14 -7
- {cli_ih-0.6.2.1.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.2.1.dist-info → cli_ih-0.6.3.1.dist-info}/WHEEL +1 -1
- {cli_ih-0.6.2.1.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.2.1.dist-info/RECORD +0 -8
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"""Logic that powers autocompletion installed by ``pip completion``."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import optparse
|
|
6
|
+
import os
|
|
7
|
+
import sys
|
|
8
|
+
from collections.abc import Iterable
|
|
9
|
+
from itertools import chain
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from pip._internal.cli.main_parser import create_main_parser
|
|
13
|
+
from pip._internal.commands import commands_dict, create_command
|
|
14
|
+
from pip._internal.metadata import get_default_environment
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def autocomplete() -> None:
|
|
18
|
+
"""Entry Point for completion of main and subcommand options."""
|
|
19
|
+
# Don't complete if user hasn't sourced bash_completion file.
|
|
20
|
+
if "PIP_AUTO_COMPLETE" not in os.environ:
|
|
21
|
+
return
|
|
22
|
+
# Don't complete if autocompletion environment variables
|
|
23
|
+
# are not present
|
|
24
|
+
if not os.environ.get("COMP_WORDS") or not os.environ.get("COMP_CWORD"):
|
|
25
|
+
return
|
|
26
|
+
cwords = os.environ["COMP_WORDS"].split()[1:]
|
|
27
|
+
cword = int(os.environ["COMP_CWORD"])
|
|
28
|
+
try:
|
|
29
|
+
current = cwords[cword - 1]
|
|
30
|
+
except IndexError:
|
|
31
|
+
current = ""
|
|
32
|
+
|
|
33
|
+
parser = create_main_parser()
|
|
34
|
+
subcommands = list(commands_dict)
|
|
35
|
+
options = []
|
|
36
|
+
|
|
37
|
+
# subcommand
|
|
38
|
+
subcommand_name: str | None = None
|
|
39
|
+
for word in cwords:
|
|
40
|
+
if word in subcommands:
|
|
41
|
+
subcommand_name = word
|
|
42
|
+
break
|
|
43
|
+
# subcommand options
|
|
44
|
+
if subcommand_name is not None:
|
|
45
|
+
# special case: 'help' subcommand has no options
|
|
46
|
+
if subcommand_name == "help":
|
|
47
|
+
sys.exit(1)
|
|
48
|
+
# special case: list locally installed dists for show and uninstall
|
|
49
|
+
should_list_installed = not current.startswith("-") and subcommand_name in [
|
|
50
|
+
"show",
|
|
51
|
+
"uninstall",
|
|
52
|
+
]
|
|
53
|
+
if should_list_installed:
|
|
54
|
+
env = get_default_environment()
|
|
55
|
+
lc = current.lower()
|
|
56
|
+
installed = [
|
|
57
|
+
dist.canonical_name
|
|
58
|
+
for dist in env.iter_installed_distributions(local_only=True)
|
|
59
|
+
if dist.canonical_name.startswith(lc)
|
|
60
|
+
and dist.canonical_name not in cwords[1:]
|
|
61
|
+
]
|
|
62
|
+
# if there are no dists installed, fall back to option completion
|
|
63
|
+
if installed:
|
|
64
|
+
for dist in installed:
|
|
65
|
+
print(dist)
|
|
66
|
+
sys.exit(1)
|
|
67
|
+
|
|
68
|
+
should_list_installables = (
|
|
69
|
+
not current.startswith("-") and subcommand_name == "install"
|
|
70
|
+
)
|
|
71
|
+
if should_list_installables:
|
|
72
|
+
for path in auto_complete_paths(current, "path"):
|
|
73
|
+
print(path)
|
|
74
|
+
sys.exit(1)
|
|
75
|
+
|
|
76
|
+
subcommand = create_command(subcommand_name)
|
|
77
|
+
|
|
78
|
+
for opt in subcommand.parser.option_list_all:
|
|
79
|
+
if opt.help != optparse.SUPPRESS_HELP:
|
|
80
|
+
options += [
|
|
81
|
+
(opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
# filter out previously specified options from available options
|
|
85
|
+
prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]]
|
|
86
|
+
options = [(x, v) for (x, v) in options if x not in prev_opts]
|
|
87
|
+
# filter options by current input
|
|
88
|
+
options = [(k, v) for k, v in options if k.startswith(current)]
|
|
89
|
+
# get completion type given cwords and available subcommand options
|
|
90
|
+
completion_type = get_path_completion_type(
|
|
91
|
+
cwords,
|
|
92
|
+
cword,
|
|
93
|
+
subcommand.parser.option_list_all,
|
|
94
|
+
)
|
|
95
|
+
# get completion files and directories if ``completion_type`` is
|
|
96
|
+
# ``<file>``, ``<dir>`` or ``<path>``
|
|
97
|
+
if completion_type:
|
|
98
|
+
paths = auto_complete_paths(current, completion_type)
|
|
99
|
+
options = [(path, 0) for path in paths]
|
|
100
|
+
for option in options:
|
|
101
|
+
opt_label = option[0]
|
|
102
|
+
# append '=' to options which require args
|
|
103
|
+
if option[1] and option[0][:2] == "--":
|
|
104
|
+
opt_label += "="
|
|
105
|
+
print(opt_label)
|
|
106
|
+
|
|
107
|
+
# Complete sub-commands (unless one is already given).
|
|
108
|
+
if not any(name in cwords for name in subcommand.handler_map()):
|
|
109
|
+
for handler_name in subcommand.handler_map():
|
|
110
|
+
if handler_name.startswith(current):
|
|
111
|
+
print(handler_name)
|
|
112
|
+
else:
|
|
113
|
+
# show main parser options only when necessary
|
|
114
|
+
|
|
115
|
+
opts = [i.option_list for i in parser.option_groups]
|
|
116
|
+
opts.append(parser.option_list)
|
|
117
|
+
flattened_opts = chain.from_iterable(opts)
|
|
118
|
+
if current.startswith("-"):
|
|
119
|
+
for opt in flattened_opts:
|
|
120
|
+
if opt.help != optparse.SUPPRESS_HELP:
|
|
121
|
+
subcommands += opt._long_opts + opt._short_opts
|
|
122
|
+
else:
|
|
123
|
+
# get completion type given cwords and all available options
|
|
124
|
+
completion_type = get_path_completion_type(cwords, cword, flattened_opts)
|
|
125
|
+
if completion_type:
|
|
126
|
+
subcommands = list(auto_complete_paths(current, completion_type))
|
|
127
|
+
|
|
128
|
+
print(" ".join([x for x in subcommands if x.startswith(current)]))
|
|
129
|
+
sys.exit(1)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def get_path_completion_type(
|
|
133
|
+
cwords: list[str], cword: int, opts: Iterable[Any]
|
|
134
|
+
) -> str | None:
|
|
135
|
+
"""Get the type of path completion (``file``, ``dir``, ``path`` or None)
|
|
136
|
+
|
|
137
|
+
:param cwords: same as the environmental variable ``COMP_WORDS``
|
|
138
|
+
:param cword: same as the environmental variable ``COMP_CWORD``
|
|
139
|
+
:param opts: The available options to check
|
|
140
|
+
:return: path completion type (``file``, ``dir``, ``path`` or None)
|
|
141
|
+
"""
|
|
142
|
+
if cword < 2 or not cwords[cword - 2].startswith("-"):
|
|
143
|
+
return None
|
|
144
|
+
for opt in opts:
|
|
145
|
+
if opt.help == optparse.SUPPRESS_HELP:
|
|
146
|
+
continue
|
|
147
|
+
for o in str(opt).split("/"):
|
|
148
|
+
if cwords[cword - 2].split("=")[0] == o:
|
|
149
|
+
if not opt.metavar or any(
|
|
150
|
+
x in ("path", "file", "dir") for x in opt.metavar.split("/")
|
|
151
|
+
):
|
|
152
|
+
return opt.metavar
|
|
153
|
+
return None
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]:
|
|
157
|
+
"""If ``completion_type`` is ``file`` or ``path``, list all regular files
|
|
158
|
+
and directories starting with ``current``; otherwise only list directories
|
|
159
|
+
starting with ``current``.
|
|
160
|
+
|
|
161
|
+
:param current: The word to be completed
|
|
162
|
+
:param completion_type: path completion type(``file``, ``path`` or ``dir``)
|
|
163
|
+
:return: A generator of regular files and/or directories
|
|
164
|
+
"""
|
|
165
|
+
directory, filename = os.path.split(current)
|
|
166
|
+
current_path = os.path.abspath(directory)
|
|
167
|
+
# Don't complete paths if they can't be accessed
|
|
168
|
+
if not os.access(current_path, os.R_OK):
|
|
169
|
+
return
|
|
170
|
+
filename = os.path.normcase(filename)
|
|
171
|
+
# list all files that start with ``filename``
|
|
172
|
+
file_list = (
|
|
173
|
+
x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename)
|
|
174
|
+
)
|
|
175
|
+
for f in file_list:
|
|
176
|
+
opt = os.path.join(current_path, f)
|
|
177
|
+
comp_file = os.path.normcase(os.path.join(directory, f))
|
|
178
|
+
# complete regular files when there is not ``<dir>`` after option
|
|
179
|
+
# complete directories when there is ``<file>``, ``<path>`` or
|
|
180
|
+
# ``<dir>``after option
|
|
181
|
+
if completion_type != "dir" and os.path.isfile(opt):
|
|
182
|
+
yield comp_file
|
|
183
|
+
elif os.path.isdir(opt):
|
|
184
|
+
yield os.path.join(comp_file, "")
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"""Base Command class, and related routines"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import logging.config
|
|
7
|
+
import optparse
|
|
8
|
+
import os
|
|
9
|
+
import sys
|
|
10
|
+
import traceback
|
|
11
|
+
from optparse import Values
|
|
12
|
+
from typing import Callable
|
|
13
|
+
|
|
14
|
+
from pip._vendor.rich import reconfigure
|
|
15
|
+
from pip._vendor.rich import traceback as rich_traceback
|
|
16
|
+
|
|
17
|
+
from pip._internal.cli import cmdoptions
|
|
18
|
+
from pip._internal.cli.command_context import CommandContextMixIn
|
|
19
|
+
from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
|
|
20
|
+
from pip._internal.cli.status_codes import (
|
|
21
|
+
ERROR,
|
|
22
|
+
PREVIOUS_BUILD_DIR_ERROR,
|
|
23
|
+
UNKNOWN_ERROR,
|
|
24
|
+
VIRTUALENV_NOT_FOUND,
|
|
25
|
+
)
|
|
26
|
+
from pip._internal.exceptions import (
|
|
27
|
+
BadCommand,
|
|
28
|
+
CommandError,
|
|
29
|
+
DiagnosticPipError,
|
|
30
|
+
InstallationError,
|
|
31
|
+
NetworkConnectionError,
|
|
32
|
+
PreviousBuildDirError,
|
|
33
|
+
)
|
|
34
|
+
from pip._internal.utils.filesystem import check_path_owner
|
|
35
|
+
from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging
|
|
36
|
+
from pip._internal.utils.misc import get_prog, normalize_path
|
|
37
|
+
from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry
|
|
38
|
+
from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry
|
|
39
|
+
from pip._internal.utils.virtualenv import running_under_virtualenv
|
|
40
|
+
|
|
41
|
+
__all__ = ["Command"]
|
|
42
|
+
|
|
43
|
+
logger = logging.getLogger(__name__)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class Command(CommandContextMixIn):
|
|
47
|
+
usage: str = ""
|
|
48
|
+
ignore_require_venv: bool = False
|
|
49
|
+
|
|
50
|
+
def __init__(self, name: str, summary: str, isolated: bool = False) -> None:
|
|
51
|
+
super().__init__()
|
|
52
|
+
|
|
53
|
+
self.name = name
|
|
54
|
+
self.summary = summary
|
|
55
|
+
self.parser = ConfigOptionParser(
|
|
56
|
+
usage=self.usage,
|
|
57
|
+
prog=f"{get_prog()} {name}",
|
|
58
|
+
formatter=UpdatingDefaultsHelpFormatter(),
|
|
59
|
+
add_help_option=False,
|
|
60
|
+
name=name,
|
|
61
|
+
description=self.__doc__,
|
|
62
|
+
isolated=isolated,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
self.tempdir_registry: TempDirRegistry | None = None
|
|
66
|
+
|
|
67
|
+
# Commands should add options to this option group
|
|
68
|
+
optgroup_name = f"{self.name.capitalize()} Options"
|
|
69
|
+
self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name)
|
|
70
|
+
|
|
71
|
+
# Add the general options
|
|
72
|
+
gen_opts = cmdoptions.make_option_group(
|
|
73
|
+
cmdoptions.general_group,
|
|
74
|
+
self.parser,
|
|
75
|
+
)
|
|
76
|
+
self.parser.add_option_group(gen_opts)
|
|
77
|
+
|
|
78
|
+
self.add_options()
|
|
79
|
+
|
|
80
|
+
def add_options(self) -> None:
|
|
81
|
+
pass
|
|
82
|
+
|
|
83
|
+
def handle_pip_version_check(self, options: Values) -> None:
|
|
84
|
+
"""
|
|
85
|
+
This is a no-op so that commands by default do not do the pip version
|
|
86
|
+
check.
|
|
87
|
+
"""
|
|
88
|
+
# Make sure we do the pip version check if the index_group options
|
|
89
|
+
# are present.
|
|
90
|
+
assert not hasattr(options, "no_index")
|
|
91
|
+
|
|
92
|
+
def run(self, options: Values, args: list[str]) -> int:
|
|
93
|
+
raise NotImplementedError
|
|
94
|
+
|
|
95
|
+
def _run_wrapper(self, level_number: int, options: Values, args: list[str]) -> int:
|
|
96
|
+
def _inner_run() -> int:
|
|
97
|
+
try:
|
|
98
|
+
return self.run(options, args)
|
|
99
|
+
finally:
|
|
100
|
+
self.handle_pip_version_check(options)
|
|
101
|
+
|
|
102
|
+
if options.debug_mode:
|
|
103
|
+
rich_traceback.install(show_locals=True)
|
|
104
|
+
return _inner_run()
|
|
105
|
+
|
|
106
|
+
try:
|
|
107
|
+
status = _inner_run()
|
|
108
|
+
assert isinstance(status, int)
|
|
109
|
+
return status
|
|
110
|
+
except DiagnosticPipError as exc:
|
|
111
|
+
logger.error("%s", exc, extra={"rich": True})
|
|
112
|
+
logger.debug("Exception information:", exc_info=True)
|
|
113
|
+
|
|
114
|
+
return ERROR
|
|
115
|
+
except PreviousBuildDirError as exc:
|
|
116
|
+
logger.critical(str(exc))
|
|
117
|
+
logger.debug("Exception information:", exc_info=True)
|
|
118
|
+
|
|
119
|
+
return PREVIOUS_BUILD_DIR_ERROR
|
|
120
|
+
except (
|
|
121
|
+
InstallationError,
|
|
122
|
+
BadCommand,
|
|
123
|
+
NetworkConnectionError,
|
|
124
|
+
) as exc:
|
|
125
|
+
logger.critical(str(exc))
|
|
126
|
+
logger.debug("Exception information:", exc_info=True)
|
|
127
|
+
|
|
128
|
+
return ERROR
|
|
129
|
+
except CommandError as exc:
|
|
130
|
+
logger.critical("%s", exc)
|
|
131
|
+
logger.debug("Exception information:", exc_info=True)
|
|
132
|
+
|
|
133
|
+
return ERROR
|
|
134
|
+
except BrokenStdoutLoggingError:
|
|
135
|
+
# Bypass our logger and write any remaining messages to
|
|
136
|
+
# stderr because stdout no longer works.
|
|
137
|
+
print("ERROR: Pipe to stdout was broken", file=sys.stderr)
|
|
138
|
+
if level_number <= logging.DEBUG:
|
|
139
|
+
traceback.print_exc(file=sys.stderr)
|
|
140
|
+
|
|
141
|
+
return ERROR
|
|
142
|
+
except KeyboardInterrupt:
|
|
143
|
+
logger.critical("Operation cancelled by user")
|
|
144
|
+
logger.debug("Exception information:", exc_info=True)
|
|
145
|
+
|
|
146
|
+
return ERROR
|
|
147
|
+
except BaseException:
|
|
148
|
+
logger.critical("Exception:", exc_info=True)
|
|
149
|
+
|
|
150
|
+
return UNKNOWN_ERROR
|
|
151
|
+
|
|
152
|
+
def parse_args(self, args: list[str]) -> tuple[Values, list[str]]:
|
|
153
|
+
# factored out for testability
|
|
154
|
+
return self.parser.parse_args(args)
|
|
155
|
+
|
|
156
|
+
def main(self, args: list[str]) -> int:
|
|
157
|
+
try:
|
|
158
|
+
with self.main_context():
|
|
159
|
+
return self._main(args)
|
|
160
|
+
finally:
|
|
161
|
+
logging.shutdown()
|
|
162
|
+
|
|
163
|
+
def _main(self, args: list[str]) -> int:
|
|
164
|
+
# We must initialize this before the tempdir manager, otherwise the
|
|
165
|
+
# configuration would not be accessible by the time we clean up the
|
|
166
|
+
# tempdir manager.
|
|
167
|
+
self.tempdir_registry = self.enter_context(tempdir_registry())
|
|
168
|
+
# Intentionally set as early as possible so globally-managed temporary
|
|
169
|
+
# directories are available to the rest of the code.
|
|
170
|
+
self.enter_context(global_tempdir_manager())
|
|
171
|
+
|
|
172
|
+
options, args = self.parse_args(args)
|
|
173
|
+
|
|
174
|
+
# Set verbosity so that it can be used elsewhere.
|
|
175
|
+
self.verbosity = options.verbose - options.quiet
|
|
176
|
+
if options.debug_mode:
|
|
177
|
+
self.verbosity = 2
|
|
178
|
+
|
|
179
|
+
if hasattr(options, "progress_bar") and options.progress_bar == "auto":
|
|
180
|
+
options.progress_bar = "on" if self.verbosity >= 0 else "off"
|
|
181
|
+
|
|
182
|
+
reconfigure(no_color=options.no_color)
|
|
183
|
+
level_number = setup_logging(
|
|
184
|
+
verbosity=self.verbosity,
|
|
185
|
+
no_color=options.no_color,
|
|
186
|
+
user_log_file=options.log,
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
always_enabled_features = set(options.features_enabled) & set(
|
|
190
|
+
cmdoptions.ALWAYS_ENABLED_FEATURES
|
|
191
|
+
)
|
|
192
|
+
if always_enabled_features:
|
|
193
|
+
logger.warning(
|
|
194
|
+
"The following features are always enabled: %s. ",
|
|
195
|
+
", ".join(sorted(always_enabled_features)),
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# Make sure that the --python argument isn't specified after the
|
|
199
|
+
# subcommand. We can tell, because if --python was specified,
|
|
200
|
+
# we should only reach this point if we're running in the created
|
|
201
|
+
# subprocess, which has the _PIP_RUNNING_IN_SUBPROCESS environment
|
|
202
|
+
# variable set.
|
|
203
|
+
if options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
|
|
204
|
+
logger.critical(
|
|
205
|
+
"The --python option must be placed before the pip subcommand name"
|
|
206
|
+
)
|
|
207
|
+
sys.exit(ERROR)
|
|
208
|
+
|
|
209
|
+
# TODO: Try to get these passing down from the command?
|
|
210
|
+
# without resorting to os.environ to hold these.
|
|
211
|
+
# This also affects isolated builds and it should.
|
|
212
|
+
|
|
213
|
+
if options.no_input:
|
|
214
|
+
os.environ["PIP_NO_INPUT"] = "1"
|
|
215
|
+
|
|
216
|
+
if options.exists_action:
|
|
217
|
+
os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action)
|
|
218
|
+
|
|
219
|
+
if options.require_venv and not self.ignore_require_venv:
|
|
220
|
+
# If a venv is required check if it can really be found
|
|
221
|
+
if not running_under_virtualenv():
|
|
222
|
+
logger.critical("Could not find an activated virtualenv (required).")
|
|
223
|
+
sys.exit(VIRTUALENV_NOT_FOUND)
|
|
224
|
+
|
|
225
|
+
if options.cache_dir:
|
|
226
|
+
options.cache_dir = normalize_path(options.cache_dir)
|
|
227
|
+
if not check_path_owner(options.cache_dir):
|
|
228
|
+
logger.warning(
|
|
229
|
+
"The directory '%s' or its parent directory is not owned "
|
|
230
|
+
"or is not writable by the current user. The cache "
|
|
231
|
+
"has been disabled. Check the permissions and owner of "
|
|
232
|
+
"that directory. If executing pip with sudo, you should "
|
|
233
|
+
"use sudo's -H flag.",
|
|
234
|
+
options.cache_dir,
|
|
235
|
+
)
|
|
236
|
+
options.cache_dir = None
|
|
237
|
+
|
|
238
|
+
return self._run_wrapper(level_number, options, args)
|
|
239
|
+
|
|
240
|
+
def handler_map(self) -> dict[str, Callable[[Values, list[str]], None]]:
|
|
241
|
+
"""
|
|
242
|
+
map of names to handler actions for commands with sub-actions
|
|
243
|
+
"""
|
|
244
|
+
return {}
|