"""A single place for constructing and exposing the main parser """ import os import sys from pip._internal.cli import cmdoptions from pip._internal.cli.parser import ( ConfigOptionParser, UpdatingDefaultsHelpFormatter, ) from pip._internal.commands import commands_dict, get_similar_commands from pip._internal.exceptions import CommandError from pip._internal.utils.misc import get_pip_version, get_prog from pip._internal.utils.typing import MYPY_CHECK_RUNNING if MYPY_CHECK_RUNNING: from typing import Tuple, List __all__ = ["create_main_parser", "parse_command"] def create_main_parser(): # type: () -> ConfigOptionParser """Creates and returns the main parser for pip's CLI """ parser_kw = { 'usage': '\n%prog <command> [options]', 'add_help_option': False, 'formatter': UpdatingDefaultsHelpFormatter(), 'name': 'global', 'prog': get_prog(), } parser = ConfigOptionParser(**parser_kw) parser.disable_interspersed_args() parser.version = get_pip_version() # add the general options gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) parser.add_option_group(gen_opts) # so the help formatter knows parser.main = True # type: ignore # create command listing for description description = [''] + [ '{name:27} {command_info.summary}'.format(**locals()) for name, command_info in commands_dict.items() ] parser.description = '\n'.join(description) return parser def parse_command(args): # type: (List[str]) -> Tuple[str, List[str]] parser = create_main_parser() # Note: parser calls disable_interspersed_args(), so the result of this # call is to split the initial args into the general options before the # subcommand and everything else. # For example: # args: ['--timeout=5', 'install', '--user', 'INITools'] # general_options: ['--timeout==5'] # args_else: ['install', '--user', 'INITools'] general_options, args_else = parser.parse_args(args) # --version if general_options.version: sys.stdout.write(parser.version) # type: ignore sys.stdout.write(os.linesep) sys.exit() # pip || pip help -> print_help() if not args_else or (args_else[0] == 'help' and len(args_else) == 1): parser.print_help() sys.exit() # the subcommand name cmd_name = args_else[0] if cmd_name not in commands_dict: guess = get_similar_commands(cmd_name) msg = ['unknown command "{}"'.format(cmd_name)] if guess: msg.append('maybe you meant "{}"'.format(guess)) raise CommandError(' - '.join(msg)) # all the args without the subcommand cmd_args = args[:] cmd_args.remove(cmd_name) return cmd_name, cmd_args
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
.__init__.pyo.40009 | File | 256 B | 0644 |
|
.autocompletion.pyo.40009 | File | 5.39 KB | 0644 |
|
.cmdoptions.pyo.40009 | File | 24.87 KB | 0644 |
|
.main.pyo.40009 | File | 1.72 KB | 0644 |
|
.main_parser.pyo.40009 | File | 2.63 KB | 0644 |
|
.progress_bars.pyo.40009 | File | 9.99 KB | 0644 |
|
.status_codes.pyo.40009 | File | 420 B | 0644 |
|
__init__.py | File | 132 B | 0644 |
|
__init__.pyc | File | 256 B | 0644 |
|
__init__.pyo | File | 256 B | 0644 |
|
autocompletion.py | File | 6.39 KB | 0644 |
|
autocompletion.pyc | File | 5.39 KB | 0644 |
|
autocompletion.pyo | File | 5.39 KB | 0644 |
|
base_command.py | File | 9.08 KB | 0644 |
|
base_command.pyc | File | 7.88 KB | 0644 |
|
base_command.pyo | File | 7.76 KB | 0644 |
|
cmdoptions.py | File | 28.11 KB | 0644 |
|
cmdoptions.pyc | File | 24.87 KB | 0644 |
|
cmdoptions.pyo | File | 24.87 KB | 0644 |
|
command_context.py | File | 975 B | 0644 |
|
command_context.pyc | File | 1.64 KB | 0644 |
|
command_context.pyo | File | 1.58 KB | 0644 |
|
main.py | File | 2.55 KB | 0644 |
|
main.pyc | File | 1.72 KB | 0644 |
|
main.pyo | File | 1.72 KB | 0644 |
|
main_parser.py | File | 2.78 KB | 0644 |
|
main_parser.pyc | File | 2.63 KB | 0644 |
|
main_parser.pyo | File | 2.63 KB | 0644 |
|
parser.py | File | 9.26 KB | 0644 |
|
parser.pyc | File | 10.46 KB | 0644 |
|
parser.pyo | File | 10.43 KB | 0644 |
|
progress_bars.py | File | 8.91 KB | 0644 |
|
progress_bars.pyc | File | 9.99 KB | 0644 |
|
progress_bars.pyo | File | 9.99 KB | 0644 |
|
req_command.py | File | 14.78 KB | 0644 |
|
req_command.pyc | File | 11.89 KB | 0644 |
|
req_command.pyo | File | 11.7 KB | 0644 |
|
spinners.py | File | 5.38 KB | 0644 |
|
spinners.pyc | File | 6.27 KB | 0644 |
|
spinners.pyo | File | 6.2 KB | 0644 |
|
status_codes.py | File | 156 B | 0644 |
|
status_codes.pyc | File | 420 B | 0644 |
|
status_codes.pyo | File | 420 B | 0644 |
|