Mercurial > repos > guerler > hhblits
comparison lib/python3.8/site-packages/pip/_internal/cli/main_parser.py @ 1:64071f2a4cf0 draft default tip
Deleted selected files
author | guerler |
---|---|
date | Mon, 27 Jul 2020 03:55:49 -0400 |
parents | 9e54283cc701 |
children |
comparison
equal
deleted
inserted
replaced
0:9e54283cc701 | 1:64071f2a4cf0 |
---|---|
1 """A single place for constructing and exposing the main parser | |
2 """ | |
3 | |
4 import os | |
5 import sys | |
6 | |
7 from pip._internal.cli import cmdoptions | |
8 from pip._internal.cli.parser import ( | |
9 ConfigOptionParser, | |
10 UpdatingDefaultsHelpFormatter, | |
11 ) | |
12 from pip._internal.commands import commands_dict, get_similar_commands | |
13 from pip._internal.exceptions import CommandError | |
14 from pip._internal.utils.misc import get_pip_version, get_prog | |
15 from pip._internal.utils.typing import MYPY_CHECK_RUNNING | |
16 | |
17 if MYPY_CHECK_RUNNING: | |
18 from typing import Tuple, List | |
19 | |
20 | |
21 __all__ = ["create_main_parser", "parse_command"] | |
22 | |
23 | |
24 def create_main_parser(): | |
25 # type: () -> ConfigOptionParser | |
26 """Creates and returns the main parser for pip's CLI | |
27 """ | |
28 | |
29 parser_kw = { | |
30 'usage': '\n%prog <command> [options]', | |
31 'add_help_option': False, | |
32 'formatter': UpdatingDefaultsHelpFormatter(), | |
33 'name': 'global', | |
34 'prog': get_prog(), | |
35 } | |
36 | |
37 parser = ConfigOptionParser(**parser_kw) | |
38 parser.disable_interspersed_args() | |
39 | |
40 parser.version = get_pip_version() | |
41 | |
42 # add the general options | |
43 gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) | |
44 parser.add_option_group(gen_opts) | |
45 | |
46 # so the help formatter knows | |
47 parser.main = True # type: ignore | |
48 | |
49 # create command listing for description | |
50 description = [''] + [ | |
51 '%-27s %s' % (name, command_info.summary) | |
52 for name, command_info in commands_dict.items() | |
53 ] | |
54 parser.description = '\n'.join(description) | |
55 | |
56 return parser | |
57 | |
58 | |
59 def parse_command(args): | |
60 # type: (List[str]) -> Tuple[str, List[str]] | |
61 parser = create_main_parser() | |
62 | |
63 # Note: parser calls disable_interspersed_args(), so the result of this | |
64 # call is to split the initial args into the general options before the | |
65 # subcommand and everything else. | |
66 # For example: | |
67 # args: ['--timeout=5', 'install', '--user', 'INITools'] | |
68 # general_options: ['--timeout==5'] | |
69 # args_else: ['install', '--user', 'INITools'] | |
70 general_options, args_else = parser.parse_args(args) | |
71 | |
72 # --version | |
73 if general_options.version: | |
74 sys.stdout.write(parser.version) # type: ignore | |
75 sys.stdout.write(os.linesep) | |
76 sys.exit() | |
77 | |
78 # pip || pip help -> print_help() | |
79 if not args_else or (args_else[0] == 'help' and len(args_else) == 1): | |
80 parser.print_help() | |
81 sys.exit() | |
82 | |
83 # the subcommand name | |
84 cmd_name = args_else[0] | |
85 | |
86 if cmd_name not in commands_dict: | |
87 guess = get_similar_commands(cmd_name) | |
88 | |
89 msg = ['unknown command "%s"' % cmd_name] | |
90 if guess: | |
91 msg.append('maybe you meant "%s"' % guess) | |
92 | |
93 raise CommandError(' - '.join(msg)) | |
94 | |
95 # all the args without the subcommand | |
96 cmd_args = args[:] | |
97 cmd_args.remove(cmd_name) | |
98 | |
99 return cmd_name, cmd_args |