Spaces:
Sleeping
Sleeping
""" | |
Package containing all pip commands | |
""" | |
import importlib | |
from collections import namedtuple | |
from typing import Any, Dict, Optional | |
from pip._internal.cli.base_command import Command | |
CommandInfo = namedtuple("CommandInfo", "module_path, class_name, summary") | |
# This dictionary does a bunch of heavy lifting for help output: | |
# - Enables avoiding additional (costly) imports for presenting `--help`. | |
# - The ordering matters for help display. | |
# | |
# Even though the module path starts with the same "pip._internal.commands" | |
# prefix, the full path makes testing easier (specifically when modifying | |
# `commands_dict` in test setup / teardown). | |
commands_dict: Dict[str, CommandInfo] = { | |
"install": CommandInfo( | |
"pip._internal.commands.install", | |
"InstallCommand", | |
"Install packages.", | |
), | |
"download": CommandInfo( | |
"pip._internal.commands.download", | |
"DownloadCommand", | |
"Download packages.", | |
), | |
"uninstall": CommandInfo( | |
"pip._internal.commands.uninstall", | |
"UninstallCommand", | |
"Uninstall packages.", | |
), | |
"freeze": CommandInfo( | |
"pip._internal.commands.freeze", | |
"FreezeCommand", | |
"Output installed packages in requirements format.", | |
), | |
"inspect": CommandInfo( | |
"pip._internal.commands.inspect", | |
"InspectCommand", | |
"Inspect the python environment.", | |
), | |
"list": CommandInfo( | |
"pip._internal.commands.list", | |
"ListCommand", | |
"List installed packages.", | |
), | |
"show": CommandInfo( | |
"pip._internal.commands.show", | |
"ShowCommand", | |
"Show information about installed packages.", | |
), | |
"check": CommandInfo( | |
"pip._internal.commands.check", | |
"CheckCommand", | |
"Verify installed packages have compatible dependencies.", | |
), | |
"config": CommandInfo( | |
"pip._internal.commands.configuration", | |
"ConfigurationCommand", | |
"Manage local and global configuration.", | |
), | |
"search": CommandInfo( | |
"pip._internal.commands.search", | |
"SearchCommand", | |
"Search PyPI for packages.", | |
), | |
"cache": CommandInfo( | |
"pip._internal.commands.cache", | |
"CacheCommand", | |
"Inspect and manage pip's wheel cache.", | |
), | |
"index": CommandInfo( | |
"pip._internal.commands.index", | |
"IndexCommand", | |
"Inspect information available from package indexes.", | |
), | |
"wheel": CommandInfo( | |
"pip._internal.commands.wheel", | |
"WheelCommand", | |
"Build wheels from your requirements.", | |
), | |
"hash": CommandInfo( | |
"pip._internal.commands.hash", | |
"HashCommand", | |
"Compute hashes of package archives.", | |
), | |
"completion": CommandInfo( | |
"pip._internal.commands.completion", | |
"CompletionCommand", | |
"A helper command used for command completion.", | |
), | |
"debug": CommandInfo( | |
"pip._internal.commands.debug", | |
"DebugCommand", | |
"Show information useful for debugging.", | |
), | |
"help": CommandInfo( | |
"pip._internal.commands.help", | |
"HelpCommand", | |
"Show help for commands.", | |
), | |
} | |
def create_command(name: str, **kwargs: Any) -> Command: | |
""" | |
Create an instance of the Command class with the given name. | |
""" | |
module_path, class_name, summary = commands_dict[name] | |
module = importlib.import_module(module_path) | |
command_class = getattr(module, class_name) | |
command = command_class(name=name, summary=summary, **kwargs) | |
return command | |
def get_similar_commands(name: str) -> Optional[str]: | |
"""Command name auto-correct.""" | |
from difflib import get_close_matches | |
name = name.lower() | |
close_commands = get_close_matches(name, commands_dict.keys()) | |
if close_commands: | |
return close_commands[0] | |
else: | |
return None | |