Mercurial > cpython-lru_cache-weakref
annotate Lib/argparse.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | ec9a4b77f37b |
| children |
| rev | line source |
|---|---|
|
59987
cac661db7795
Merged revisions 79385 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59282
diff
changeset
|
1 # Author: Steven J. Bethard <steven.bethard@gmail.com>. |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
3 """Command-line parsing library |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
4 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
5 This module is an optparse-inspired command-line parsing library that: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
6 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
7 - handles both optional and positional arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
8 - produces highly informative usage messages |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
9 - supports parsers that dispatch to sub-parsers |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
10 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
11 The following is a simple usage example that sums integers from the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
12 command-line and writes the result to a file:: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
13 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
14 parser = argparse.ArgumentParser( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
15 description='sum the integers at the command line') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
16 parser.add_argument( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
17 'integers', metavar='int', nargs='+', type=int, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
18 help='an integer to be summed') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
19 parser.add_argument( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
20 '--log', default=sys.stdout, type=argparse.FileType('w'), |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
21 help='the file where the sum should be written') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
22 args = parser.parse_args() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
23 args.log.write('%s' % sum(args.integers)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
24 args.log.close() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
25 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
26 The module contains the following public classes: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
27 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
28 - ArgumentParser -- The main entry point for command-line parsing. As the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
29 example above shows, the add_argument() method is used to populate |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
30 the parser with actions for optional and positional arguments. Then |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
31 the parse_args() method is invoked to convert the args at the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
32 command-line into an object with attributes. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
33 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
34 - ArgumentError -- The exception raised by ArgumentParser objects when |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
35 there are errors with the parser's actions. Errors raised while |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
36 parsing the command-line are caught by ArgumentParser and emitted |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
37 as command-line messages. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
38 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
39 - FileType -- A factory for defining types of files to be created. As the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
40 example above shows, instances of FileType are typically passed as |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
41 the type= argument of add_argument() calls. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
42 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
43 - Action -- The base class for parser actions. Typically actions are |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
44 selected by passing strings like 'store_true' or 'append_const' to |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
45 the action= argument of add_argument(). However, for greater |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
46 customization of ArgumentParser actions, subclasses of Action may |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
47 be defined and passed as the action= argument. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
48 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
49 - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
50 ArgumentDefaultsHelpFormatter -- Formatter classes which |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
51 may be passed as the formatter_class= argument to the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
52 ArgumentParser constructor. HelpFormatter is the default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
53 RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
54 not to change the formatting for help text, and |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
55 ArgumentDefaultsHelpFormatter adds information about argument defaults |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
56 to the help. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
57 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
58 All other classes in this module are considered implementation details. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
59 (Also note that HelpFormatter and RawDescriptionHelpFormatter are only |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
60 considered public as object names -- the API of the formatter objects is |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
61 still considered an implementation detail.) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
62 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
63 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
64 __version__ = '1.1' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
65 __all__ = [ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
66 'ArgumentParser', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
67 'ArgumentError', |
|
65863
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
68 'ArgumentTypeError', |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
69 'FileType', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
70 'HelpFormatter', |
|
65863
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
71 'ArgumentDefaultsHelpFormatter', |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
72 'RawDescriptionHelpFormatter', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
73 'RawTextHelpFormatter', |
|
68966
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
74 'MetavarTypeHelpFormatter', |
|
65863
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
75 'Namespace', |
|
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
76 'Action', |
|
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
77 'ONE_OR_MORE', |
|
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
78 'OPTIONAL', |
|
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
79 'PARSER', |
|
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
80 'REMAINDER', |
|
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
81 'SUPPRESS', |
|
e71c2e1daf57
Get argparse.__all__ back up to date (issue 9353)
Steven Bethard <steven.bethard@gmail.com>
parents:
63690
diff
changeset
|
82 'ZERO_OR_MORE', |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
83 ] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
84 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
85 |
|
69003
74f9ed48ae5d
Issue #9026: Fix order of argparse sub-commands in help messages.
Steven Bethard <steven.bethard@gmail.com>
parents:
68967
diff
changeset
|
86 import collections as _collections |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
87 import copy as _copy |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
88 import os as _os |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
89 import re as _re |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
90 import sys as _sys |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
91 import textwrap as _textwrap |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
92 |
|
66721
1827a8ac9b18
Use proper plural forms in argparse (#4391)
Éric Araujo <merwok@netwok.org>
parents:
66661
diff
changeset
|
93 from gettext import gettext as _, ngettext |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
94 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
95 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
96 SUPPRESS = '==SUPPRESS==' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
97 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
98 OPTIONAL = '?' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
99 ZERO_OR_MORE = '*' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
100 ONE_OR_MORE = '+' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
101 PARSER = 'A...' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
102 REMAINDER = '...' |
|
65887
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
103 _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args' |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
104 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
105 # ============================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
106 # Utility functions and classes |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
107 # ============================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
108 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
109 class _AttributeHolder(object): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
110 """Abstract base class that provides __repr__. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
111 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
112 The __repr__ method returns a string in the format:: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
113 ClassName(attr=name, attr=name, ...) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
114 The attributes are determined either by a class-level attribute, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
115 '_kwarg_names', or by inspecting the instance __dict__. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
116 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
117 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
118 def __repr__(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
119 type_name = type(self).__name__ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
120 arg_strings = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
121 for arg in self._get_args(): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
122 arg_strings.append(repr(arg)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
123 for name, value in self._get_kwargs(): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
124 arg_strings.append('%s=%r' % (name, value)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
125 return '%s(%s)' % (type_name, ', '.join(arg_strings)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
126 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
127 def _get_kwargs(self): |
|
59282
b30f8ce82167
Merged revisions 78600-78601 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59275
diff
changeset
|
128 return sorted(self.__dict__.items()) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
129 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
130 def _get_args(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
131 return [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
132 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
133 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
134 def _ensure_value(namespace, name, value): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
135 if getattr(namespace, name, None) is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
136 setattr(namespace, name, value) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
137 return getattr(namespace, name) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
138 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
139 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
140 # =============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
141 # Formatting Help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
142 # =============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
143 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
144 class HelpFormatter(object): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
145 """Formatter for generating usage messages and argument help strings. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
146 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
147 Only the name of this class is considered a public API. All the methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
148 provided by the class are considered an implementation detail. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
149 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
150 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
151 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
152 prog, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
153 indent_increment=2, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
154 max_help_position=24, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
155 width=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
156 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
157 # default setting for width |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
158 if width is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
159 try: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
160 width = int(_os.environ['COLUMNS']) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
161 except (KeyError, ValueError): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
162 width = 80 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
163 width -= 2 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
164 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
165 self._prog = prog |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
166 self._indent_increment = indent_increment |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
167 self._max_help_position = max_help_position |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
168 self._width = width |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
169 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
170 self._current_indent = 0 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
171 self._level = 0 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
172 self._action_max_length = 0 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
173 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
174 self._root_section = self._Section(self, None) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
175 self._current_section = self._root_section |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
176 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
177 self._whitespace_matcher = _re.compile(r'\s+') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
178 self._long_break_matcher = _re.compile(r'\n\n\n+') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
179 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
180 # =============================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
181 # Section and indentation methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
182 # =============================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
183 def _indent(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
184 self._current_indent += self._indent_increment |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
185 self._level += 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
186 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
187 def _dedent(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
188 self._current_indent -= self._indent_increment |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
189 assert self._current_indent >= 0, 'Indent decreased below 0.' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
190 self._level -= 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
191 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
192 class _Section(object): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
193 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
194 def __init__(self, formatter, parent, heading=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
195 self.formatter = formatter |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
196 self.parent = parent |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
197 self.heading = heading |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
198 self.items = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
199 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
200 def format_help(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
201 # format the indented section |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
202 if self.parent is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
203 self.formatter._indent() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
204 join = self.formatter._join_parts |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
205 for func, args in self.items: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
206 func(*args) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
207 item_help = join([func(*args) for func, args in self.items]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
208 if self.parent is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
209 self.formatter._dedent() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
210 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
211 # return nothing if the section was empty |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
212 if not item_help: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
213 return '' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
214 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
215 # add the heading if the section was non-empty |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
216 if self.heading is not SUPPRESS and self.heading is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
217 current_indent = self.formatter._current_indent |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
218 heading = '%*s%s:\n' % (current_indent, '', self.heading) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
219 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
220 heading = '' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
221 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
222 # join the section-initial newline, the heading and the help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
223 return join(['\n', heading, item_help, '\n']) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
224 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
225 def _add_item(self, func, args): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
226 self._current_section.items.append((func, args)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
227 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
228 # ======================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
229 # Message building methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
230 # ======================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
231 def start_section(self, heading): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
232 self._indent() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
233 section = self._Section(self, self._current_section, heading) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
234 self._add_item(section.format_help, []) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
235 self._current_section = section |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
236 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
237 def end_section(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
238 self._current_section = self._current_section.parent |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
239 self._dedent() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
240 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
241 def add_text(self, text): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
242 if text is not SUPPRESS and text is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
243 self._add_item(self._format_text, [text]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
244 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
245 def add_usage(self, usage, actions, groups, prefix=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
246 if usage is not SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
247 args = usage, actions, groups, prefix |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
248 self._add_item(self._format_usage, args) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
249 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
250 def add_argument(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
251 if action.help is not SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
252 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
253 # find all invocations |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
254 get_invocation = self._format_action_invocation |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
255 invocations = [get_invocation(action)] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
256 for subaction in self._iter_indented_subactions(action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
257 invocations.append(get_invocation(subaction)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
258 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
259 # update the maximum item length |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
260 invocation_length = max([len(s) for s in invocations]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
261 action_length = invocation_length + self._current_indent |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
262 self._action_max_length = max(self._action_max_length, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
263 action_length) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
264 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
265 # add the item to the list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
266 self._add_item(self._format_action, [action]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
267 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
268 def add_arguments(self, actions): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
269 for action in actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
270 self.add_argument(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
271 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
272 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
273 # Help-formatting methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
274 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
275 def format_help(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
276 help = self._root_section.format_help() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
277 if help: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
278 help = self._long_break_matcher.sub('\n\n', help) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
279 help = help.strip('\n') + '\n' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
280 return help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
281 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
282 def _join_parts(self, part_strings): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
283 return ''.join([part |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
284 for part in part_strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
285 if part and part is not SUPPRESS]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
286 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
287 def _format_usage(self, usage, actions, groups, prefix): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
288 if prefix is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
289 prefix = _('usage: ') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
290 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
291 # if usage is specified, use that |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
292 if usage is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
293 usage = usage % dict(prog=self._prog) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
294 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
295 # if no optionals or positionals are available, usage is just prog |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
296 elif usage is None and not actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
297 usage = '%(prog)s' % dict(prog=self._prog) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
298 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
299 # if optionals and positionals are available, calculate usage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
300 elif usage is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
301 prog = '%(prog)s' % dict(prog=self._prog) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
302 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
303 # split optionals from positionals |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
304 optionals = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
305 positionals = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
306 for action in actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
307 if action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
308 optionals.append(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
309 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
310 positionals.append(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
311 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
312 # build full usage string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
313 format = self._format_actions_usage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
314 action_usage = format(optionals + positionals, groups) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
315 usage = ' '.join([s for s in [prog, action_usage] if s]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
316 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
317 # wrap the usage parts if it's too long |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
318 text_width = self._width - self._current_indent |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
319 if len(prefix) + len(usage) > text_width: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
320 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
321 # break usage into wrappable parts |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
322 part_regexp = r'\(.*?\)+|\[.*?\]+|\S+' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
323 opt_usage = format(optionals, groups) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
324 pos_usage = format(positionals, groups) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
325 opt_parts = _re.findall(part_regexp, opt_usage) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
326 pos_parts = _re.findall(part_regexp, pos_usage) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
327 assert ' '.join(opt_parts) == opt_usage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
328 assert ' '.join(pos_parts) == pos_usage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
329 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
330 # helper for wrapping lines |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
331 def get_lines(parts, indent, prefix=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
332 lines = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
333 line = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
334 if prefix is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
335 line_len = len(prefix) - 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
336 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
337 line_len = len(indent) - 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
338 for part in parts: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
339 if line_len + 1 + len(part) > text_width: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
340 lines.append(indent + ' '.join(line)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
341 line = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
342 line_len = len(indent) - 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
343 line.append(part) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
344 line_len += len(part) + 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
345 if line: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
346 lines.append(indent + ' '.join(line)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
347 if prefix is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
348 lines[0] = lines[0][len(indent):] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
349 return lines |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
350 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
351 # if prog is short, follow it with optionals or positionals |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
352 if len(prefix) + len(prog) <= 0.75 * text_width: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
353 indent = ' ' * (len(prefix) + len(prog) + 1) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
354 if opt_parts: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
355 lines = get_lines([prog] + opt_parts, indent, prefix) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
356 lines.extend(get_lines(pos_parts, indent)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
357 elif pos_parts: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
358 lines = get_lines([prog] + pos_parts, indent, prefix) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
359 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
360 lines = [prog] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
361 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
362 # if prog is long, put it on its own line |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
363 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
364 indent = ' ' * len(prefix) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
365 parts = opt_parts + pos_parts |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
366 lines = get_lines(parts, indent) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
367 if len(lines) > 1: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
368 lines = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
369 lines.extend(get_lines(opt_parts, indent)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
370 lines.extend(get_lines(pos_parts, indent)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
371 lines = [prog] + lines |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
372 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
373 # join lines into usage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
374 usage = '\n'.join(lines) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
375 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
376 # prefix with 'usage:' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
377 return '%s%s\n\n' % (prefix, usage) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
378 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
379 def _format_actions_usage(self, actions, groups): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
380 # find group indices and identify actions in groups |
|
59282
b30f8ce82167
Merged revisions 78600-78601 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59275
diff
changeset
|
381 group_actions = set() |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
382 inserts = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
383 for group in groups: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
384 try: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
385 start = actions.index(group._group_actions[0]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
386 except ValueError: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
387 continue |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
388 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
389 end = start + len(group._group_actions) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
390 if actions[start:end] == group._group_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
391 for action in group._group_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
392 group_actions.add(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
393 if not group.required: |
|
65869
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
394 if start in inserts: |
|
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
395 inserts[start] += ' [' |
|
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
396 else: |
|
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
397 inserts[start] = '[' |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
398 inserts[end] = ']' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
399 else: |
|
65869
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
400 if start in inserts: |
|
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
401 inserts[start] += ' (' |
|
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
402 else: |
|
d8ab35ec486e
Fix for issue 9355 where with multiple mutually exclusive arguments, some brackets were being lost in the usage messages
Steven Bethard <steven.bethard@gmail.com>
parents:
65867
diff
changeset
|
403 inserts[start] = '(' |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
404 inserts[end] = ')' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
405 for i in range(start + 1, end): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
406 inserts[i] = '|' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
407 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
408 # collect all actions format strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
409 parts = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
410 for i, action in enumerate(actions): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
411 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
412 # suppressed arguments are marked with None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
413 # remove | separators for suppressed arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
414 if action.help is SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
415 parts.append(None) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
416 if inserts.get(i) == '|': |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
417 inserts.pop(i) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
418 elif inserts.get(i + 1) == '|': |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
419 inserts.pop(i + 1) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
420 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
421 # produce all arg strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
422 elif not action.option_strings: |
|
68966
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
423 default = self._get_default_metavar_for_positional(action) |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
424 part = self._format_args(action, default) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
425 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
426 # if it's in a group, strip the outer [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
427 if action in group_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
428 if part[0] == '[' and part[-1] == ']': |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
429 part = part[1:-1] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
430 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
431 # add the action string to the list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
432 parts.append(part) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
433 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
434 # produce the first way to invoke the option in brackets |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
435 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
436 option_string = action.option_strings[0] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
437 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
438 # if the Optional doesn't take a value, format is: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
439 # -s or --long |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
440 if action.nargs == 0: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
441 part = '%s' % option_string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
442 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
443 # if the Optional takes a value, format is: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
444 # -s ARGS or --long ARGS |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
445 else: |
|
68966
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
446 default = self._get_default_metavar_for_optional(action) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
447 args_string = self._format_args(action, default) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
448 part = '%s %s' % (option_string, args_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
449 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
450 # make it look optional if it's not required or in a group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
451 if not action.required and action not in group_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
452 part = '[%s]' % part |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
453 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
454 # add the action string to the list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
455 parts.append(part) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
456 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
457 # insert things at the necessary indices |
|
59282
b30f8ce82167
Merged revisions 78600-78601 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59275
diff
changeset
|
458 for i in sorted(inserts, reverse=True): |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
459 parts[i:i] = [inserts[i]] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
460 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
461 # join all the action items with spaces |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
462 text = ' '.join([item for item in parts if item is not None]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
463 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
464 # clean up separators for mutually exclusive groups |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
465 open = r'[\[(]' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
466 close = r'[\])]' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
467 text = _re.sub(r'(%s) ' % open, r'\1', text) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
468 text = _re.sub(r' (%s)' % close, r'\1', text) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
469 text = _re.sub(r'%s *%s' % (open, close), r'', text) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
470 text = _re.sub(r'\(([^|]*)\)', r'\1', text) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
471 text = text.strip() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
472 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
473 # return the text |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
474 return text |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
475 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
476 def _format_text(self, text): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
477 if '%(prog)' in text: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
478 text = text % dict(prog=self._prog) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
479 text_width = self._width - self._current_indent |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
480 indent = ' ' * self._current_indent |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
481 return self._fill_text(text, text_width, indent) + '\n\n' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
482 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
483 def _format_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
484 # determine the required width and the entry label |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
485 help_position = min(self._action_max_length + 2, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
486 self._max_help_position) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
487 help_width = self._width - help_position |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
488 action_width = help_position - self._current_indent - 2 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
489 action_header = self._format_action_invocation(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
490 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
491 # ho nelp; start on same line and add a final newline |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
492 if not action.help: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
493 tup = self._current_indent, '', action_header |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
494 action_header = '%*s%s\n' % tup |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
495 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
496 # short action name; start on the same line and pad two spaces |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
497 elif len(action_header) <= action_width: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
498 tup = self._current_indent, '', action_width, action_header |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
499 action_header = '%*s%-*s ' % tup |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
500 indent_first = 0 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
501 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
502 # long action name; start on the next line |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
503 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
504 tup = self._current_indent, '', action_header |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
505 action_header = '%*s%s\n' % tup |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
506 indent_first = help_position |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
507 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
508 # collect the pieces of the action help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
509 parts = [action_header] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
510 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
511 # if there was help for the action, add lines of help text |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
512 if action.help: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
513 help_text = self._expand_help(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
514 help_lines = self._split_lines(help_text, help_width) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
515 parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
516 for line in help_lines[1:]: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
517 parts.append('%*s%s\n' % (help_position, '', line)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
518 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
519 # or add a newline if the description doesn't end with one |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
520 elif not action_header.endswith('\n'): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
521 parts.append('\n') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
522 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
523 # if there are any sub-actions, add their help as well |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
524 for subaction in self._iter_indented_subactions(action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
525 parts.append(self._format_action(subaction)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
526 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
527 # return a single string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
528 return self._join_parts(parts) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
529 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
530 def _format_action_invocation(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
531 if not action.option_strings: |
|
68966
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
532 default = self._get_default_metavar_for_positional(action) |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
533 metavar, = self._metavar_formatter(action, default)(1) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
534 return metavar |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
535 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
536 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
537 parts = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
538 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
539 # if the Optional doesn't take a value, format is: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
540 # -s, --long |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
541 if action.nargs == 0: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
542 parts.extend(action.option_strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
543 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
544 # if the Optional takes a value, format is: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
545 # -s ARGS, --long ARGS |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
546 else: |
|
68966
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
547 default = self._get_default_metavar_for_optional(action) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
548 args_string = self._format_args(action, default) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
549 for option_string in action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
550 parts.append('%s %s' % (option_string, args_string)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
551 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
552 return ', '.join(parts) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
553 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
554 def _metavar_formatter(self, action, default_metavar): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
555 if action.metavar is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
556 result = action.metavar |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
557 elif action.choices is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
558 choice_strs = [str(choice) for choice in action.choices] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
559 result = '{%s}' % ','.join(choice_strs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
560 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
561 result = default_metavar |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
562 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
563 def format(tuple_size): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
564 if isinstance(result, tuple): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
565 return result |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
566 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
567 return (result, ) * tuple_size |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
568 return format |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
569 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
570 def _format_args(self, action, default_metavar): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
571 get_metavar = self._metavar_formatter(action, default_metavar) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
572 if action.nargs is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
573 result = '%s' % get_metavar(1) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
574 elif action.nargs == OPTIONAL: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
575 result = '[%s]' % get_metavar(1) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
576 elif action.nargs == ZERO_OR_MORE: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
577 result = '[%s [%s ...]]' % get_metavar(2) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
578 elif action.nargs == ONE_OR_MORE: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
579 result = '%s [%s ...]' % get_metavar(2) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
580 elif action.nargs == REMAINDER: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
581 result = '...' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
582 elif action.nargs == PARSER: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
583 result = '%s ...' % get_metavar(1) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
584 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
585 formats = ['%s' for _ in range(action.nargs)] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
586 result = ' '.join(formats) % get_metavar(action.nargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
587 return result |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
588 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
589 def _expand_help(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
590 params = dict(vars(action), prog=self._prog) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
591 for name in list(params): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
592 if params[name] is SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
593 del params[name] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
594 for name in list(params): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
595 if hasattr(params[name], '__name__'): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
596 params[name] = params[name].__name__ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
597 if params.get('choices') is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
598 choices_str = ', '.join([str(c) for c in params['choices']]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
599 params['choices'] = choices_str |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
600 return self._get_help_string(action) % params |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
601 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
602 def _iter_indented_subactions(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
603 try: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
604 get_subactions = action._get_subactions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
605 except AttributeError: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
606 pass |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
607 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
608 self._indent() |
| 79378 | 609 yield from get_subactions() |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
610 self._dedent() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
611 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
612 def _split_lines(self, text, width): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
613 text = self._whitespace_matcher.sub(' ', text).strip() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
614 return _textwrap.wrap(text, width) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
615 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
616 def _fill_text(self, text, width, indent): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
617 text = self._whitespace_matcher.sub(' ', text).strip() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
618 return _textwrap.fill(text, width, initial_indent=indent, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
619 subsequent_indent=indent) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
620 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
621 def _get_help_string(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
622 return action.help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
623 |
|
68966
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
624 def _get_default_metavar_for_optional(self, action): |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
625 return action.dest.upper() |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
626 |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
627 def _get_default_metavar_for_positional(self, action): |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
628 return action.dest |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
629 |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
630 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
631 class RawDescriptionHelpFormatter(HelpFormatter): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
632 """Help message formatter which retains any formatting in descriptions. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
633 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
634 Only the name of this class is considered a public API. All the methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
635 provided by the class are considered an implementation detail. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
636 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
637 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
638 def _fill_text(self, text, width, indent): |
|
72485
83f43b58c988
#13012: use splitlines(keepends=True/False) instead of splitlines(0/1).
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70741
diff
changeset
|
639 return ''.join(indent + line for line in text.splitlines(keepends=True)) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
640 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
641 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
642 class RawTextHelpFormatter(RawDescriptionHelpFormatter): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
643 """Help message formatter which retains formatting of all help text. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
644 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
645 Only the name of this class is considered a public API. All the methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
646 provided by the class are considered an implementation detail. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
647 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
648 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
649 def _split_lines(self, text, width): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
650 return text.splitlines() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
651 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
652 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
653 class ArgumentDefaultsHelpFormatter(HelpFormatter): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
654 """Help message formatter which adds default values to argument help. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
655 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
656 Only the name of this class is considered a public API. All the methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
657 provided by the class are considered an implementation detail. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
658 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
659 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
660 def _get_help_string(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
661 help = action.help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
662 if '%(default)' not in action.help: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
663 if action.default is not SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
664 defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
665 if action.option_strings or action.nargs in defaulting_nargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
666 help += ' (default: %(default)s)' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
667 return help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
668 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
669 |
|
68966
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
670 class MetavarTypeHelpFormatter(HelpFormatter): |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
671 """Help message formatter which uses the argument 'type' as the default |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
672 metavar value (instead of the argument 'dest') |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
673 |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
674 Only the name of this class is considered a public API. All the methods |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
675 provided by the class are considered an implementation detail. |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
676 """ |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
677 |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
678 def _get_default_metavar_for_optional(self, action): |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
679 return action.type.__name__ |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
680 |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
681 def _get_default_metavar_for_positional(self, action): |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
682 return action.type.__name__ |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
683 |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
684 |
|
a15d65d8f269
Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
685 |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
686 # ===================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
687 # Options and Arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
688 # ===================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
689 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
690 def _get_action_name(argument): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
691 if argument is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
692 return None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
693 elif argument.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
694 return '/'.join(argument.option_strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
695 elif argument.metavar not in (None, SUPPRESS): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
696 return argument.metavar |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
697 elif argument.dest not in (None, SUPPRESS): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
698 return argument.dest |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
699 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
700 return None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
701 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
702 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
703 class ArgumentError(Exception): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
704 """An error from creating or using an argument (optional or positional). |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
705 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
706 The string value of this exception is the message, augmented with |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
707 information about the argument that caused it. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
708 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
709 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
710 def __init__(self, argument, message): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
711 self.argument_name = _get_action_name(argument) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
712 self.message = message |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
713 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
714 def __str__(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
715 if self.argument_name is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
716 format = '%(message)s' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
717 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
718 format = 'argument %(argument_name)s: %(message)s' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
719 return format % dict(message=self.message, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
720 argument_name=self.argument_name) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
721 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
722 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
723 class ArgumentTypeError(Exception): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
724 """An error from trying to convert a command line string to a type.""" |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
725 pass |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
726 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
727 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
728 # ============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
729 # Action classes |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
730 # ============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
731 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
732 class Action(_AttributeHolder): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
733 """Information about how to convert command line strings to Python objects. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
734 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
735 Action objects are used by an ArgumentParser to represent the information |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
736 needed to parse a single argument from one or more strings from the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
737 command line. The keyword arguments to the Action constructor are also |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
738 all attributes of Action instances. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
739 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
740 Keyword Arguments: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
741 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
742 - option_strings -- A list of command-line option strings which |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
743 should be associated with this action. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
744 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
745 - dest -- The name of the attribute to hold the created object(s) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
746 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
747 - nargs -- The number of command-line arguments that should be |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
748 consumed. By default, one argument will be consumed and a single |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
749 value will be produced. Other values include: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
750 - N (an integer) consumes N arguments (and produces a list) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
751 - '?' consumes zero or one arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
752 - '*' consumes zero or more arguments (and produces a list) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
753 - '+' consumes one or more arguments (and produces a list) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
754 Note that the difference between the default and nargs=1 is that |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
755 with the default, a single value will be produced, while with |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
756 nargs=1, a list containing a single value will be produced. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
757 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
758 - const -- The value to be produced if the option is specified and the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
759 option uses an action that takes no values. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
760 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
761 - default -- The value to be produced if the option is not specified. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
762 |
|
78226
e7f205ce080e
#14391: clarify docstring discussion of Action's 'type' argument's value.
R David Murray <rdmurray@bitdance.com>
parents:
73165
diff
changeset
|
763 - type -- A callable that accepts a single string argument, and |
|
e7f205ce080e
#14391: clarify docstring discussion of Action's 'type' argument's value.
R David Murray <rdmurray@bitdance.com>
parents:
73165
diff
changeset
|
764 returns the converted value. The standard Python types str, int, |
|
e7f205ce080e
#14391: clarify docstring discussion of Action's 'type' argument's value.
R David Murray <rdmurray@bitdance.com>
parents:
73165
diff
changeset
|
765 float, and complex are useful examples of such callables. If None, |
|
e7f205ce080e
#14391: clarify docstring discussion of Action's 'type' argument's value.
R David Murray <rdmurray@bitdance.com>
parents:
73165
diff
changeset
|
766 str is used. |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
767 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
768 - choices -- A container of values that should be allowed. If not None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
769 after a command-line argument has been converted to the appropriate |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
770 type, an exception will be raised if it is not a member of this |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
771 collection. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
772 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
773 - required -- True if the action must always be specified at the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
774 command line. This is only meaningful for optional command-line |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
775 arguments. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
776 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
777 - help -- The help string describing the argument. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
778 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
779 - metavar -- The name to be used for the option's argument with the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
780 help string. If None, the 'dest' value will be used as the name. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
781 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
782 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
783 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
784 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
785 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
786 nargs=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
787 const=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
788 default=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
789 type=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
790 choices=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
791 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
792 help=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
793 metavar=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
794 self.option_strings = option_strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
795 self.dest = dest |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
796 self.nargs = nargs |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
797 self.const = const |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
798 self.default = default |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
799 self.type = type |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
800 self.choices = choices |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
801 self.required = required |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
802 self.help = help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
803 self.metavar = metavar |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
804 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
805 def _get_kwargs(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
806 names = [ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
807 'option_strings', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
808 'dest', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
809 'nargs', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
810 'const', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
811 'default', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
812 'type', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
813 'choices', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
814 'help', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
815 'metavar', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
816 ] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
817 return [(name, getattr(self, name)) for name in names] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
818 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
819 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
820 raise NotImplementedError(_('.__call__() not defined')) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
821 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
822 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
823 class _StoreAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
824 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
825 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
826 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
827 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
828 nargs=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
829 const=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
830 default=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
831 type=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
832 choices=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
833 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
834 help=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
835 metavar=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
836 if nargs == 0: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
837 raise ValueError('nargs for store actions must be > 0; if you ' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
838 'have nothing to store, actions such as store ' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
839 'true or store const may be more appropriate') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
840 if const is not None and nargs != OPTIONAL: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
841 raise ValueError('nargs must be %r to supply const' % OPTIONAL) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
842 super(_StoreAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
843 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
844 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
845 nargs=nargs, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
846 const=const, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
847 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
848 type=type, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
849 choices=choices, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
850 required=required, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
851 help=help, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
852 metavar=metavar) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
853 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
854 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
855 setattr(namespace, self.dest, values) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
856 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
857 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
858 class _StoreConstAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
859 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
860 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
861 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
862 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
863 const, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
864 default=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
865 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
866 help=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
867 metavar=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
868 super(_StoreConstAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
869 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
870 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
871 nargs=0, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
872 const=const, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
873 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
874 required=required, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
875 help=help) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
876 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
877 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
878 setattr(namespace, self.dest, self.const) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
879 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
880 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
881 class _StoreTrueAction(_StoreConstAction): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
882 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
883 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
884 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
885 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
886 default=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
887 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
888 help=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
889 super(_StoreTrueAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
890 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
891 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
892 const=True, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
893 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
894 required=required, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
895 help=help) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
896 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
897 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
898 class _StoreFalseAction(_StoreConstAction): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
899 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
900 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
901 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
902 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
903 default=True, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
904 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
905 help=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
906 super(_StoreFalseAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
907 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
908 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
909 const=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
910 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
911 required=required, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
912 help=help) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
913 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
914 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
915 class _AppendAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
916 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
917 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
918 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
919 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
920 nargs=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
921 const=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
922 default=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
923 type=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
924 choices=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
925 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
926 help=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
927 metavar=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
928 if nargs == 0: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
929 raise ValueError('nargs for append actions must be > 0; if arg ' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
930 'strings are not supplying the value to append, ' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
931 'the append const action may be more appropriate') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
932 if const is not None and nargs != OPTIONAL: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
933 raise ValueError('nargs must be %r to supply const' % OPTIONAL) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
934 super(_AppendAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
935 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
936 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
937 nargs=nargs, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
938 const=const, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
939 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
940 type=type, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
941 choices=choices, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
942 required=required, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
943 help=help, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
944 metavar=metavar) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
945 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
946 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
947 items = _copy.copy(_ensure_value(namespace, self.dest, [])) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
948 items.append(values) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
949 setattr(namespace, self.dest, items) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
950 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
951 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
952 class _AppendConstAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
953 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
954 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
955 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
956 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
957 const, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
958 default=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
959 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
960 help=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
961 metavar=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
962 super(_AppendConstAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
963 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
964 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
965 nargs=0, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
966 const=const, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
967 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
968 required=required, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
969 help=help, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
970 metavar=metavar) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
971 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
972 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
973 items = _copy.copy(_ensure_value(namespace, self.dest, [])) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
974 items.append(self.const) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
975 setattr(namespace, self.dest, items) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
976 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
977 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
978 class _CountAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
979 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
980 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
981 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
982 dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
983 default=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
984 required=False, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
985 help=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
986 super(_CountAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
987 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
988 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
989 nargs=0, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
990 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
991 required=required, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
992 help=help) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
993 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
994 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
995 new_count = _ensure_value(namespace, self.dest, 0) + 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
996 setattr(namespace, self.dest, new_count) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
997 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
998 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
999 class _HelpAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1000 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1001 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1002 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1003 dest=SUPPRESS, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1004 default=SUPPRESS, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1005 help=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1006 super(_HelpAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1007 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1008 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1009 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1010 nargs=0, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1011 help=help) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1012 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1013 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1014 parser.print_help() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1015 parser.exit() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1016 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1017 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1018 class _VersionAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1019 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1020 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1021 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1022 version=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1023 dest=SUPPRESS, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1024 default=SUPPRESS, |
|
61880
036017f2e74c
Merged revisions 81492 via svnmerge from
Steven Bethard <steven.bethard@gmail.com>
parents:
59987
diff
changeset
|
1025 help="show program's version number and exit"): |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1026 super(_VersionAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1027 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1028 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1029 default=default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1030 nargs=0, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1031 help=help) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1032 self.version = version |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1033 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1034 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1035 version = self.version |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1036 if version is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1037 version = parser.version |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1038 formatter = parser._get_formatter() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1039 formatter.add_text(version) |
|
85572
ec9a4b77f37b
Issue #18920: argparse's default version action (for -v, --version) should
Eli Bendersky <eliben@gmail.com>
parents:
82623
diff
changeset
|
1040 parser._print_message(formatter.format_help(), _sys.stdout) |
|
ec9a4b77f37b
Issue #18920: argparse's default version action (for -v, --version) should
Eli Bendersky <eliben@gmail.com>
parents:
82623
diff
changeset
|
1041 parser.exit() |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1042 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1043 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1044 class _SubParsersAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1045 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1046 class _ChoicesPseudoAction(Action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1047 |
|
67009
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1048 def __init__(self, name, aliases, help): |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1049 metavar = dest = name |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1050 if aliases: |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1051 metavar += ' (%s)' % ', '.join(aliases) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1052 sup = super(_SubParsersAction._ChoicesPseudoAction, self) |
|
67009
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1053 sup.__init__(option_strings=[], dest=dest, help=help, |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1054 metavar=metavar) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1055 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1056 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1057 option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1058 prog, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1059 parser_class, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1060 dest=SUPPRESS, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1061 help=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1062 metavar=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1063 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1064 self._prog_prefix = prog |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1065 self._parser_class = parser_class |
|
69003
74f9ed48ae5d
Issue #9026: Fix order of argparse sub-commands in help messages.
Steven Bethard <steven.bethard@gmail.com>
parents:
68967
diff
changeset
|
1066 self._name_parser_map = _collections.OrderedDict() |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1067 self._choices_actions = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1068 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1069 super(_SubParsersAction, self).__init__( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1070 option_strings=option_strings, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1071 dest=dest, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1072 nargs=PARSER, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1073 choices=self._name_parser_map, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1074 help=help, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1075 metavar=metavar) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1076 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1077 def add_parser(self, name, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1078 # set prog from the existing prefix |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1079 if kwargs.get('prog') is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1080 kwargs['prog'] = '%s %s' % (self._prog_prefix, name) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1081 |
|
67009
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1082 aliases = kwargs.pop('aliases', ()) |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1083 |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1084 # create a pseudo-action to hold the choice help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1085 if 'help' in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1086 help = kwargs.pop('help') |
|
67009
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1087 choice_action = self._ChoicesPseudoAction(name, aliases, help) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1088 self._choices_actions.append(choice_action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1089 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1090 # create the parser and add it to the map |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1091 parser = self._parser_class(**kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1092 self._name_parser_map[name] = parser |
|
67009
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1093 |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1094 # make parser available under aliases also |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1095 for alias in aliases: |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1096 self._name_parser_map[alias] = parser |
|
4c0426261148
Add subparser aliases for argparse. Resolves issue 9324. Approved by Georg for beta2 on the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
66721
diff
changeset
|
1097 |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1098 return parser |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1099 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1100 def _get_subactions(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1101 return self._choices_actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1102 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1103 def __call__(self, parser, namespace, values, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1104 parser_name = values[0] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1105 arg_strings = values[1:] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1106 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1107 # set the parser name if requested |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1108 if self.dest is not SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1109 setattr(namespace, self.dest, parser_name) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1110 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1111 # select the parser |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1112 try: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1113 parser = self._name_parser_map[parser_name] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1114 except KeyError: |
|
66661
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1115 args = {'parser_name': parser_name, |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1116 'choices': ', '.join(self._name_parser_map)} |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1117 msg = _('unknown parser %(parser_name)r (choices: %(choices)s)') % args |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1118 raise ArgumentError(self, msg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1119 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1120 # parse all the remaining options into the namespace |
|
65887
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1121 # store any unrecognized options on the object, so that the top |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1122 # level parser can decide what to do with them |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1123 namespace, arg_strings = parser.parse_known_args(arg_strings, namespace) |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1124 if arg_strings: |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1125 vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, []) |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1126 getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1127 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1128 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1129 # ============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1130 # Type classes |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1131 # ============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1132 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1133 class FileType(object): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1134 """Factory for creating file object types |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1135 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1136 Instances of FileType are typically passed as type= arguments to the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1137 ArgumentParser add_argument() method. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1138 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1139 Keyword Arguments: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1140 - mode -- A string indicating how the file is to be opened. Accepts the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1141 same values as the builtin open() function. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1142 - bufsize -- The file's desired buffer size. Accepts the same values as |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1143 the builtin open() function. |
|
80864
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1144 - encoding -- The file's encoding. Accepts the same values as the |
|
82623
0a26a8b13193
Issue #17047: remove doubled words added in 3.4,
Terry Jan Reedy <tjreedy@udel.edu>
parents:
82168
diff
changeset
|
1145 builtin open() function. |
|
80864
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1146 - errors -- A string indicating how encoding and decoding errors are to |
|
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1147 be handled. Accepts the same value as the builtin open() function. |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1148 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1149 |
|
80864
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1150 def __init__(self, mode='r', bufsize=-1, encoding=None, errors=None): |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1151 self._mode = mode |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1152 self._bufsize = bufsize |
|
80864
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1153 self._encoding = encoding |
|
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1154 self._errors = errors |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1155 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1156 def __call__(self, string): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1157 # the special argument "-" means sys.std{in,out} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1158 if string == '-': |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1159 if 'r' in self._mode: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1160 return _sys.stdin |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1161 elif 'w' in self._mode: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1162 return _sys.stdout |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1163 else: |
|
66655
83ad00a3a489
Fix incorrect use of gettext in argparse (#10497).
Éric Araujo <merwok@netwok.org>
parents:
65887
diff
changeset
|
1164 msg = _('argument "-" with mode %r') % self._mode |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1165 raise ValueError(msg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1166 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1167 # all other arguments are used as file names |
|
67746
8a30a2cb4b9e
Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
67009
diff
changeset
|
1168 try: |
|
80864
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1169 return open(string, self._mode, self._bufsize, self._encoding, |
|
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1170 self._errors) |
|
81039
7d69d04522e3
Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80864
diff
changeset
|
1171 except OSError as e: |
|
67746
8a30a2cb4b9e
Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
67009
diff
changeset
|
1172 message = _("can't open '%s': %s") |
|
8a30a2cb4b9e
Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
67009
diff
changeset
|
1173 raise ArgumentTypeError(message % (string, e)) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1174 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1175 def __repr__(self): |
|
67746
8a30a2cb4b9e
Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Steven Bethard <steven.bethard@gmail.com>
parents:
67009
diff
changeset
|
1176 args = self._mode, self._bufsize |
|
80864
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1177 kwargs = [('encoding', self._encoding), ('errors', self._errors)] |
|
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1178 args_str = ', '.join([repr(arg) for arg in args if arg != -1] + |
|
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1179 ['%s=%r' % (kw, arg) for kw, arg in kwargs |
|
d5a0698a8354
#11175: argparse.FileType now accepts encoding and errors arguments.
Petri Lehtinen <petri@digip.org>
parents:
79378
diff
changeset
|
1180 if arg is not None]) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1181 return '%s(%s)' % (type(self).__name__, args_str) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1182 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1183 # =========================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1184 # Optional and Positional Parsing |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1185 # =========================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1186 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1187 class Namespace(_AttributeHolder): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1188 """Simple object for storing attributes. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1189 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1190 Implements equality by attribute names and values, and provides a simple |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1191 string representation. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1192 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1193 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1194 def __init__(self, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1195 for name in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1196 setattr(self, name, kwargs[name]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1197 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1198 def __eq__(self, other): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1199 return vars(self) == vars(other) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1200 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1201 def __ne__(self, other): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1202 return not (self == other) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1203 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1204 def __contains__(self, key): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1205 return key in self.__dict__ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1206 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1207 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1208 class _ActionsContainer(object): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1209 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1210 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1211 description, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1212 prefix_chars, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1213 argument_default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1214 conflict_handler): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1215 super(_ActionsContainer, self).__init__() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1216 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1217 self.description = description |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1218 self.argument_default = argument_default |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1219 self.prefix_chars = prefix_chars |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1220 self.conflict_handler = conflict_handler |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1221 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1222 # set up registries |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1223 self._registries = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1224 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1225 # register actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1226 self.register('action', None, _StoreAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1227 self.register('action', 'store', _StoreAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1228 self.register('action', 'store_const', _StoreConstAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1229 self.register('action', 'store_true', _StoreTrueAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1230 self.register('action', 'store_false', _StoreFalseAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1231 self.register('action', 'append', _AppendAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1232 self.register('action', 'append_const', _AppendConstAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1233 self.register('action', 'count', _CountAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1234 self.register('action', 'help', _HelpAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1235 self.register('action', 'version', _VersionAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1236 self.register('action', 'parsers', _SubParsersAction) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1237 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1238 # raise an exception if the conflict handler is invalid |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1239 self._get_handler() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1240 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1241 # action storage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1242 self._actions = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1243 self._option_string_actions = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1244 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1245 # groups |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1246 self._action_groups = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1247 self._mutually_exclusive_groups = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1248 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1249 # defaults storage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1250 self._defaults = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1251 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1252 # determines whether an "option" looks like a negative number |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1253 self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1254 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1255 # whether or not there are any optionals that look like negative |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1256 # numbers -- uses a list so it can be shared and edited |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1257 self._has_negative_number_optionals = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1258 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1259 # ==================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1260 # Registration methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1261 # ==================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1262 def register(self, registry_name, value, object): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1263 registry = self._registries.setdefault(registry_name, {}) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1264 registry[value] = object |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1265 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1266 def _registry_get(self, registry_name, value, default=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1267 return self._registries[registry_name].get(value, default) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1268 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1269 # ================================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1270 # Namespace default accessor methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1271 # ================================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1272 def set_defaults(self, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1273 self._defaults.update(kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1274 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1275 # if these defaults match any existing arguments, replace |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1276 # the previous default on the object with the new one |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1277 for action in self._actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1278 if action.dest in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1279 action.default = kwargs[action.dest] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1280 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1281 def get_default(self, dest): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1282 for action in self._actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1283 if action.dest == dest and action.default is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1284 return action.default |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1285 return self._defaults.get(dest, None) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1286 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1287 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1288 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1289 # Adding argument actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1290 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1291 def add_argument(self, *args, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1292 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1293 add_argument(dest, ..., name=value, ...) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1294 add_argument(option_string, option_string, ..., name=value, ...) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1295 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1296 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1297 # if no positional args are supplied or only one is supplied and |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1298 # it doesn't look like an option string, parse a positional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1299 # argument |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1300 chars = self.prefix_chars |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1301 if not args or len(args) == 1 and args[0][0] not in chars: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1302 if args and 'dest' in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1303 raise ValueError('dest supplied twice for positional argument') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1304 kwargs = self._get_positional_kwargs(*args, **kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1305 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1306 # otherwise, we're adding an optional argument |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1307 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1308 kwargs = self._get_optional_kwargs(*args, **kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1309 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1310 # if no default was supplied, use the parser-level default |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1311 if 'default' not in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1312 dest = kwargs['dest'] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1313 if dest in self._defaults: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1314 kwargs['default'] = self._defaults[dest] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1315 elif self.argument_default is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1316 kwargs['default'] = self.argument_default |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1317 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1318 # create the action object, and add it to the parser |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1319 action_class = self._pop_action_class(kwargs) |
|
73165
8e57b5d8f58f
Closes #13258: Use callable() built-in in the standard library.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
69126
diff
changeset
|
1320 if not callable(action_class): |
|
69126
69ab5251f3f0
Issue #9347: Fix formatting for tuples in argparse type= error messages.
Steven Bethard <steven.bethard@gmail.com>
parents:
69003
diff
changeset
|
1321 raise ValueError('unknown action "%s"' % (action_class,)) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1322 action = action_class(**kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1323 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1324 # raise an error if the action type is not callable |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1325 type_func = self._registry_get('type', action.type, action.type) |
|
73165
8e57b5d8f58f
Closes #13258: Use callable() built-in in the standard library.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
69126
diff
changeset
|
1326 if not callable(type_func): |
|
69126
69ab5251f3f0
Issue #9347: Fix formatting for tuples in argparse type= error messages.
Steven Bethard <steven.bethard@gmail.com>
parents:
69003
diff
changeset
|
1327 raise ValueError('%r is not callable' % (type_func,)) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1328 |
|
68967
c89db9b36ea6
Issue #9348: Raise an early error if argparse nargs and metavar don't match.
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
1329 # raise an error if the metavar does not match the type |
|
c89db9b36ea6
Issue #9348: Raise an early error if argparse nargs and metavar don't match.
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
1330 if hasattr(self, "_get_formatter"): |
|
c89db9b36ea6
Issue #9348: Raise an early error if argparse nargs and metavar don't match.
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
1331 try: |
|
c89db9b36ea6
Issue #9348: Raise an early error if argparse nargs and metavar don't match.
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
1332 self._get_formatter()._format_args(action, None) |
|
c89db9b36ea6
Issue #9348: Raise an early error if argparse nargs and metavar don't match.
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
1333 except TypeError: |
|
c89db9b36ea6
Issue #9348: Raise an early error if argparse nargs and metavar don't match.
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
1334 raise ValueError("length of metavar tuple does not match nargs") |
|
c89db9b36ea6
Issue #9348: Raise an early error if argparse nargs and metavar don't match.
Steven Bethard <steven.bethard@gmail.com>
parents:
67819
diff
changeset
|
1335 |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1336 return self._add_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1337 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1338 def add_argument_group(self, *args, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1339 group = _ArgumentGroup(self, *args, **kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1340 self._action_groups.append(group) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1341 return group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1342 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1343 def add_mutually_exclusive_group(self, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1344 group = _MutuallyExclusiveGroup(self, **kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1345 self._mutually_exclusive_groups.append(group) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1346 return group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1347 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1348 def _add_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1349 # resolve any conflicts |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1350 self._check_conflict(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1351 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1352 # add to actions list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1353 self._actions.append(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1354 action.container = self |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1355 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1356 # index the action by any option strings it has |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1357 for option_string in action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1358 self._option_string_actions[option_string] = action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1359 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1360 # set the flag if any option strings look like negative numbers |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1361 for option_string in action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1362 if self._negative_number_matcher.match(option_string): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1363 if not self._has_negative_number_optionals: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1364 self._has_negative_number_optionals.append(True) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1365 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1366 # return the created action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1367 return action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1368 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1369 def _remove_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1370 self._actions.remove(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1371 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1372 def _add_container_actions(self, container): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1373 # collect groups by titles |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1374 title_group_map = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1375 for group in self._action_groups: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1376 if group.title in title_group_map: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1377 msg = _('cannot merge actions - two groups are named %r') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1378 raise ValueError(msg % (group.title)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1379 title_group_map[group.title] = group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1380 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1381 # map each action to its group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1382 group_map = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1383 for group in container._action_groups: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1384 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1385 # if a group with the title exists, use that, otherwise |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1386 # create a new group matching the container's group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1387 if group.title not in title_group_map: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1388 title_group_map[group.title] = self.add_argument_group( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1389 title=group.title, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1390 description=group.description, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1391 conflict_handler=group.conflict_handler) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1392 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1393 # map the actions to their new group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1394 for action in group._group_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1395 group_map[action] = title_group_map[group.title] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1396 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1397 # add container's mutually exclusive groups |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1398 # NOTE: if add_mutually_exclusive_group ever gains title= and |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1399 # description= then this code will need to be expanded as above |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1400 for group in container._mutually_exclusive_groups: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1401 mutex_group = self.add_mutually_exclusive_group( |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1402 required=group.required) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1403 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1404 # map the actions to their new mutex group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1405 for action in group._group_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1406 group_map[action] = mutex_group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1407 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1408 # add all actions to this container or their group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1409 for action in container._actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1410 group_map.get(action, self)._add_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1411 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1412 def _get_positional_kwargs(self, dest, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1413 # make sure required is not specified |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1414 if 'required' in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1415 msg = _("'required' is an invalid argument for positionals") |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1416 raise TypeError(msg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1417 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1418 # mark positional arguments as required if at least one is |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1419 # always required |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1420 if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1421 kwargs['required'] = True |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1422 if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1423 kwargs['required'] = True |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1424 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1425 # return the keyword arguments with no option strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1426 return dict(kwargs, dest=dest, option_strings=[]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1427 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1428 def _get_optional_kwargs(self, *args, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1429 # determine short and long option strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1430 option_strings = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1431 long_option_strings = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1432 for option_string in args: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1433 # error on strings that don't start with an appropriate prefix |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1434 if not option_string[0] in self.prefix_chars: |
|
66661
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1435 args = {'option': option_string, |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1436 'prefix_chars': self.prefix_chars} |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1437 msg = _('invalid option string %(option)r: ' |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1438 'must start with a character %(prefix_chars)r') |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
1439 raise ValueError(msg % args) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1440 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1441 # strings starting with two prefix characters are long options |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1442 option_strings.append(option_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1443 if option_string[0] in self.prefix_chars: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1444 if len(option_string) > 1: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1445 if option_string[1] in self.prefix_chars: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1446 long_option_strings.append(option_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1447 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1448 # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1449 dest = kwargs.pop('dest', None) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1450 if dest is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1451 if long_option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1452 dest_option_string = long_option_strings[0] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1453 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1454 dest_option_string = option_strings[0] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1455 dest = dest_option_string.lstrip(self.prefix_chars) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1456 if not dest: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1457 msg = _('dest= is required for options like %r') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1458 raise ValueError(msg % option_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1459 dest = dest.replace('-', '_') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1460 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1461 # return the updated keyword arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1462 return dict(kwargs, dest=dest, option_strings=option_strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1463 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1464 def _pop_action_class(self, kwargs, default=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1465 action = kwargs.pop('action', default) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1466 return self._registry_get('action', action, action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1467 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1468 def _get_handler(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1469 # determine function from conflict handler string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1470 handler_func_name = '_handle_conflict_%s' % self.conflict_handler |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1471 try: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1472 return getattr(self, handler_func_name) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1473 except AttributeError: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1474 msg = _('invalid conflict_resolution value: %r') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1475 raise ValueError(msg % self.conflict_handler) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1476 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1477 def _check_conflict(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1478 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1479 # find all options that conflict with this option |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1480 confl_optionals = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1481 for option_string in action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1482 if option_string in self._option_string_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1483 confl_optional = self._option_string_actions[option_string] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1484 confl_optionals.append((option_string, confl_optional)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1485 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1486 # resolve any conflicts |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1487 if confl_optionals: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1488 conflict_handler = self._get_handler() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1489 conflict_handler(action, confl_optionals) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1490 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1491 def _handle_conflict_error(self, action, conflicting_actions): |
|
66721
1827a8ac9b18
Use proper plural forms in argparse (#4391)
Éric Araujo <merwok@netwok.org>
parents:
66661
diff
changeset
|
1492 message = ngettext('conflicting option string: %s', |
|
1827a8ac9b18
Use proper plural forms in argparse (#4391)
Éric Araujo <merwok@netwok.org>
parents:
66661
diff
changeset
|
1493 'conflicting option strings: %s', |
|
1827a8ac9b18
Use proper plural forms in argparse (#4391)
Éric Araujo <merwok@netwok.org>
parents:
66661
diff
changeset
|
1494 len(conflicting_actions)) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1495 conflict_string = ', '.join([option_string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1496 for option_string, action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1497 in conflicting_actions]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1498 raise ArgumentError(action, message % conflict_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1499 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1500 def _handle_conflict_resolve(self, action, conflicting_actions): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1501 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1502 # remove all conflicting options |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1503 for option_string, action in conflicting_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1504 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1505 # remove the conflicting option |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1506 action.option_strings.remove(option_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1507 self._option_string_actions.pop(option_string, None) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1508 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1509 # if the option now has no option string, remove it from the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1510 # container holding it |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1511 if not action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1512 action.container._remove_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1513 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1514 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1515 class _ArgumentGroup(_ActionsContainer): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1516 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1517 def __init__(self, container, title=None, description=None, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1518 # add any missing keyword arguments by checking the container |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1519 update = kwargs.setdefault |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1520 update('conflict_handler', container.conflict_handler) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1521 update('prefix_chars', container.prefix_chars) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1522 update('argument_default', container.argument_default) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1523 super_init = super(_ArgumentGroup, self).__init__ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1524 super_init(description=description, **kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1525 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1526 # group attributes |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1527 self.title = title |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1528 self._group_actions = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1529 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1530 # share most attributes with the container |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1531 self._registries = container._registries |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1532 self._actions = container._actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1533 self._option_string_actions = container._option_string_actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1534 self._defaults = container._defaults |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1535 self._has_negative_number_optionals = \ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1536 container._has_negative_number_optionals |
|
67819
2bef7ab6256b
#10680: fix mutually exclusive arguments in argument groups.
Georg Brandl <georg@python.org>
parents:
67746
diff
changeset
|
1537 self._mutually_exclusive_groups = container._mutually_exclusive_groups |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1538 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1539 def _add_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1540 action = super(_ArgumentGroup, self)._add_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1541 self._group_actions.append(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1542 return action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1543 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1544 def _remove_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1545 super(_ArgumentGroup, self)._remove_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1546 self._group_actions.remove(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1547 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1548 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1549 class _MutuallyExclusiveGroup(_ArgumentGroup): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1550 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1551 def __init__(self, container, required=False): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1552 super(_MutuallyExclusiveGroup, self).__init__(container) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1553 self.required = required |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1554 self._container = container |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1555 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1556 def _add_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1557 if action.required: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1558 msg = _('mutually exclusive arguments must be optional') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1559 raise ValueError(msg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1560 action = self._container._add_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1561 self._group_actions.append(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1562 return action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1563 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1564 def _remove_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1565 self._container._remove_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1566 self._group_actions.remove(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1567 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1568 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1569 class ArgumentParser(_AttributeHolder, _ActionsContainer): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1570 """Object for parsing command line strings into Python objects. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1571 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1572 Keyword Arguments: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1573 - prog -- The name of the program (default: sys.argv[0]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1574 - usage -- A usage message (default: auto-generated from arguments) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1575 - description -- A description of what the program does |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1576 - epilog -- Text following the argument descriptions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1577 - parents -- Parsers whose arguments should be copied into this one |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1578 - formatter_class -- HelpFormatter class for printing help messages |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1579 - prefix_chars -- Characters that prefix optional arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1580 - fromfile_prefix_chars -- Characters that prefix files containing |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1581 additional arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1582 - argument_default -- The default value for all arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1583 - conflict_handler -- String indicating how to handle conflicts |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1584 - add_help -- Add a -h/-help option |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1585 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1586 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1587 def __init__(self, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1588 prog=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1589 usage=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1590 description=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1591 epilog=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1592 parents=[], |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1593 formatter_class=HelpFormatter, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1594 prefix_chars='-', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1595 fromfile_prefix_chars=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1596 argument_default=None, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1597 conflict_handler='error', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1598 add_help=True): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1599 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1600 superinit = super(ArgumentParser, self).__init__ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1601 superinit(description=description, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1602 prefix_chars=prefix_chars, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1603 argument_default=argument_default, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1604 conflict_handler=conflict_handler) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1605 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1606 # default setting for prog |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1607 if prog is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1608 prog = _os.path.basename(_sys.argv[0]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1609 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1610 self.prog = prog |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1611 self.usage = usage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1612 self.epilog = epilog |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1613 self.formatter_class = formatter_class |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1614 self.fromfile_prefix_chars = fromfile_prefix_chars |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1615 self.add_help = add_help |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1616 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1617 add_group = self.add_argument_group |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1618 self._positionals = add_group(_('positional arguments')) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1619 self._optionals = add_group(_('optional arguments')) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1620 self._subparsers = None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1621 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1622 # register types |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1623 def identity(string): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1624 return string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1625 self.register('type', None, identity) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1626 |
|
77972
5393382c1b1d
Issue #13248: argparse: Remove obsolete argument "version" of ArgumentParser.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
73166
diff
changeset
|
1627 # add help argument if necessary |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1628 # (using explicit default to override global argument_default) |
|
63690
2850bd919277
#9444: use first of prefix_chars for help opt instead of raising error
R. David Murray <rdmurray@bitdance.com>
parents:
61880
diff
changeset
|
1629 default_prefix = '-' if '-' in prefix_chars else prefix_chars[0] |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1630 if self.add_help: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1631 self.add_argument( |
|
63690
2850bd919277
#9444: use first of prefix_chars for help opt instead of raising error
R. David Murray <rdmurray@bitdance.com>
parents:
61880
diff
changeset
|
1632 default_prefix+'h', default_prefix*2+'help', |
|
2850bd919277
#9444: use first of prefix_chars for help opt instead of raising error
R. David Murray <rdmurray@bitdance.com>
parents:
61880
diff
changeset
|
1633 action='help', default=SUPPRESS, |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1634 help=_('show this help message and exit')) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1635 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1636 # add parent arguments and defaults |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1637 for parent in parents: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1638 self._add_container_actions(parent) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1639 try: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1640 defaults = parent._defaults |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1641 except AttributeError: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1642 pass |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1643 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1644 self._defaults.update(defaults) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1645 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1646 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1647 # Pretty __repr__ methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1648 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1649 def _get_kwargs(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1650 names = [ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1651 'prog', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1652 'usage', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1653 'description', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1654 'formatter_class', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1655 'conflict_handler', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1656 'add_help', |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1657 ] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1658 return [(name, getattr(self, name)) for name in names] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1659 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1660 # ================================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1661 # Optional/Positional adding methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1662 # ================================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1663 def add_subparsers(self, **kwargs): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1664 if self._subparsers is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1665 self.error(_('cannot have multiple subparser arguments')) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1666 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1667 # add the parser class to the arguments if it's not present |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1668 kwargs.setdefault('parser_class', type(self)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1669 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1670 if 'title' in kwargs or 'description' in kwargs: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1671 title = _(kwargs.pop('title', 'subcommands')) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1672 description = _(kwargs.pop('description', None)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1673 self._subparsers = self.add_argument_group(title, description) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1674 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1675 self._subparsers = self._positionals |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1676 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1677 # prog defaults to the usage message of this parser, skipping |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1678 # optional arguments and with no "usage:" prefix |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1679 if kwargs.get('prog') is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1680 formatter = self._get_formatter() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1681 positionals = self._get_positional_actions() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1682 groups = self._mutually_exclusive_groups |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1683 formatter.add_usage(self.usage, positionals, groups, '') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1684 kwargs['prog'] = formatter.format_help().strip() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1685 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1686 # create the parsers action and add it to the positionals list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1687 parsers_class = self._pop_action_class(kwargs, 'parsers') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1688 action = parsers_class(option_strings=[], **kwargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1689 self._subparsers._add_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1690 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1691 # return the created parsers action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1692 return action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1693 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1694 def _add_action(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1695 if action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1696 self._optionals._add_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1697 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1698 self._positionals._add_action(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1699 return action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1700 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1701 def _get_optional_actions(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1702 return [action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1703 for action in self._actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1704 if action.option_strings] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1705 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1706 def _get_positional_actions(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1707 return [action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1708 for action in self._actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1709 if not action.option_strings] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1710 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1711 # ===================================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1712 # Command line argument parsing methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1713 # ===================================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1714 def parse_args(self, args=None, namespace=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1715 args, argv = self.parse_known_args(args, namespace) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1716 if argv: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1717 msg = _('unrecognized arguments: %s') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1718 self.error(msg % ' '.join(argv)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1719 return args |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1720 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1721 def parse_known_args(self, args=None, namespace=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1722 if args is None: |
|
78879
5d8454fcc629
#15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents:
78821
diff
changeset
|
1723 # args default to the system args |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1724 args = _sys.argv[1:] |
|
78879
5d8454fcc629
#15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents:
78821
diff
changeset
|
1725 else: |
|
5d8454fcc629
#15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents:
78821
diff
changeset
|
1726 # make sure that args are mutable |
|
5d8454fcc629
#15847: allow args to be a tuple in parse_args
R David Murray <rdmurray@bitdance.com>
parents:
78821
diff
changeset
|
1727 args = list(args) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1728 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1729 # default Namespace built from parser defaults |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1730 if namespace is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1731 namespace = Namespace() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1732 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1733 # add any action defaults that aren't present |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1734 for action in self._actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1735 if action.dest is not SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1736 if not hasattr(namespace, action.dest): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1737 if action.default is not SUPPRESS: |
|
78821
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1738 setattr(namespace, action.dest, action.default) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1739 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1740 # add any parser defaults that aren't present |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1741 for dest in self._defaults: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1742 if not hasattr(namespace, dest): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1743 setattr(namespace, dest, self._defaults[dest]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1744 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1745 # parse the arguments and exit if there are any errors |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1746 try: |
|
65887
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1747 namespace, args = self._parse_known_args(args, namespace) |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1748 if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1749 args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1750 delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) |
|
ff6f39b3c38e
Fix bug 9340 - argparse parse_known_args didn't work with subparsers
Steven Bethard <steven.bethard@gmail.com>
parents:
65869
diff
changeset
|
1751 return namespace, args |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1752 except ArgumentError: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1753 err = _sys.exc_info()[1] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1754 self.error(str(err)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1755 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1756 def _parse_known_args(self, arg_strings, namespace): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1757 # replace arg strings that are file references |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1758 if self.fromfile_prefix_chars is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1759 arg_strings = self._read_args_from_files(arg_strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1760 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1761 # map all mutually exclusive arguments to the other arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1762 # they can't occur with |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1763 action_conflicts = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1764 for mutex_group in self._mutually_exclusive_groups: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1765 group_actions = mutex_group._group_actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1766 for i, mutex_action in enumerate(mutex_group._group_actions): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1767 conflicts = action_conflicts.setdefault(mutex_action, []) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1768 conflicts.extend(group_actions[:i]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1769 conflicts.extend(group_actions[i + 1:]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1770 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1771 # find all option indices, and determine the arg_string_pattern |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1772 # which has an 'O' if there is an option at an index, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1773 # an 'A' if there is an argument, or a '-' if there is a '--' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1774 option_string_indices = {} |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1775 arg_string_pattern_parts = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1776 arg_strings_iter = iter(arg_strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1777 for i, arg_string in enumerate(arg_strings_iter): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1778 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1779 # all args after -- are non-options |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1780 if arg_string == '--': |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1781 arg_string_pattern_parts.append('-') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1782 for arg_string in arg_strings_iter: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1783 arg_string_pattern_parts.append('A') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1784 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1785 # otherwise, add the arg to the arg strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1786 # and note the index if it was an option |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1787 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1788 option_tuple = self._parse_optional(arg_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1789 if option_tuple is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1790 pattern = 'A' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1791 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1792 option_string_indices[i] = option_tuple |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1793 pattern = 'O' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1794 arg_string_pattern_parts.append(pattern) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1795 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1796 # join the pieces together to form the pattern |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1797 arg_strings_pattern = ''.join(arg_string_pattern_parts) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1798 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1799 # converts arg strings to the appropriate and then takes the action |
|
59282
b30f8ce82167
Merged revisions 78600-78601 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59275
diff
changeset
|
1800 seen_actions = set() |
|
b30f8ce82167
Merged revisions 78600-78601 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59275
diff
changeset
|
1801 seen_non_default_actions = set() |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1802 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1803 def take_action(action, argument_strings, option_string=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1804 seen_actions.add(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1805 argument_values = self._get_values(action, argument_strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1806 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1807 # error if this argument is not allowed with other previously |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1808 # seen arguments, assuming that actions that use the default |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1809 # value don't really count as "present" |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1810 if argument_values is not action.default: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1811 seen_non_default_actions.add(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1812 for conflict_action in action_conflicts.get(action, []): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1813 if conflict_action in seen_non_default_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1814 msg = _('not allowed with argument %s') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1815 action_name = _get_action_name(conflict_action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1816 raise ArgumentError(action, msg % action_name) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1817 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1818 # take the action if we didn't receive a SUPPRESS value |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1819 # (e.g. from a default) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1820 if argument_values is not SUPPRESS: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1821 action(self, namespace, argument_values, option_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1822 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1823 # function to convert arg_strings into an optional action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1824 def consume_optional(start_index): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1825 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1826 # get the optional identified at this index |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1827 option_tuple = option_string_indices[start_index] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1828 action, option_string, explicit_arg = option_tuple |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1829 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1830 # identify additional optionals in the same arg string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1831 # (e.g. -xyz is the same as -x -y -z if no args are required) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1832 match_argument = self._match_argument |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1833 action_tuples = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1834 while True: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1835 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1836 # if we found no optional action, skip it |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1837 if action is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1838 extras.append(arg_strings[start_index]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1839 return start_index + 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1840 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1841 # if there is an explicit argument, try to match the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1842 # optional's string arguments to only this |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1843 if explicit_arg is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1844 arg_count = match_argument(action, 'A') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1845 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1846 # if the action is a single-dash option and takes no |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1847 # arguments, try to parse more single-dash options out |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1848 # of the tail of the option string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1849 chars = self.prefix_chars |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1850 if arg_count == 0 and option_string[1] not in chars: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1851 action_tuples.append((action, [], option_string)) |
|
65867
cb9e10034e4a
Fix bug 9352 where characters were being lost in parsing some short options
Steven Bethard <steven.bethard@gmail.com>
parents:
65863
diff
changeset
|
1852 char = option_string[0] |
|
cb9e10034e4a
Fix bug 9352 where characters were being lost in parsing some short options
Steven Bethard <steven.bethard@gmail.com>
parents:
65863
diff
changeset
|
1853 option_string = char + explicit_arg[0] |
|
cb9e10034e4a
Fix bug 9352 where characters were being lost in parsing some short options
Steven Bethard <steven.bethard@gmail.com>
parents:
65863
diff
changeset
|
1854 new_explicit_arg = explicit_arg[1:] or None |
|
cb9e10034e4a
Fix bug 9352 where characters were being lost in parsing some short options
Steven Bethard <steven.bethard@gmail.com>
parents:
65863
diff
changeset
|
1855 optionals_map = self._option_string_actions |
|
cb9e10034e4a
Fix bug 9352 where characters were being lost in parsing some short options
Steven Bethard <steven.bethard@gmail.com>
parents:
65863
diff
changeset
|
1856 if option_string in optionals_map: |
|
cb9e10034e4a
Fix bug 9352 where characters were being lost in parsing some short options
Steven Bethard <steven.bethard@gmail.com>
parents:
65863
diff
changeset
|
1857 action = optionals_map[option_string] |
|
cb9e10034e4a
Fix bug 9352 where characters were being lost in parsing some short options
Steven Bethard <steven.bethard@gmail.com>
parents:
65863
diff
changeset
|
1858 explicit_arg = new_explicit_arg |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1859 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1860 msg = _('ignored explicit argument %r') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1861 raise ArgumentError(action, msg % explicit_arg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1862 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1863 # if the action expect exactly one argument, we've |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1864 # successfully matched the option; exit the loop |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1865 elif arg_count == 1: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1866 stop = start_index + 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1867 args = [explicit_arg] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1868 action_tuples.append((action, args, option_string)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1869 break |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1870 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1871 # error if a double-dash option did not use the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1872 # explicit argument |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1873 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1874 msg = _('ignored explicit argument %r') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1875 raise ArgumentError(action, msg % explicit_arg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1876 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1877 # if there is no explicit argument, try to match the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1878 # optional's string arguments with the following strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1879 # if successful, exit the loop |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1880 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1881 start = start_index + 1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1882 selected_patterns = arg_strings_pattern[start:] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1883 arg_count = match_argument(action, selected_patterns) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1884 stop = start + arg_count |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1885 args = arg_strings[start:stop] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1886 action_tuples.append((action, args, option_string)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1887 break |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1888 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1889 # add the Optional to the list and return the index at which |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1890 # the Optional's string args stopped |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1891 assert action_tuples |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1892 for action, args, option_string in action_tuples: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1893 take_action(action, args, option_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1894 return stop |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1895 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1896 # the list of Positionals left to be parsed; this is modified |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1897 # by consume_positionals() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1898 positionals = self._get_positional_actions() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1899 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1900 # function to convert arg_strings into positional actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1901 def consume_positionals(start_index): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1902 # match as many Positionals as possible |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1903 match_partial = self._match_arguments_partial |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1904 selected_pattern = arg_strings_pattern[start_index:] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1905 arg_counts = match_partial(positionals, selected_pattern) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1906 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1907 # slice off the appropriate arg strings for each Positional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1908 # and add the Positional and its args to the list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1909 for action, arg_count in zip(positionals, arg_counts): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1910 args = arg_strings[start_index: start_index + arg_count] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1911 start_index += arg_count |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1912 take_action(action, args) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1913 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1914 # slice off the Positionals that we just parsed and return the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1915 # index at which the Positionals' string args stopped |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1916 positionals[:] = positionals[len(arg_counts):] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1917 return start_index |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1918 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1919 # consume Positionals and Optionals alternately, until we have |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1920 # passed the last option string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1921 extras = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1922 start_index = 0 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1923 if option_string_indices: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1924 max_option_string_index = max(option_string_indices) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1925 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1926 max_option_string_index = -1 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1927 while start_index <= max_option_string_index: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1928 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1929 # consume any Positionals preceding the next option |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1930 next_option_string_index = min([ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1931 index |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1932 for index in option_string_indices |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1933 if index >= start_index]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1934 if start_index != next_option_string_index: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1935 positionals_end_index = consume_positionals(start_index) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1936 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1937 # only try to parse the next optional if we didn't consume |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1938 # the option string during the positionals parsing |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1939 if positionals_end_index > start_index: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1940 start_index = positionals_end_index |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1941 continue |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1942 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1943 start_index = positionals_end_index |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1944 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1945 # if we consumed all the positionals we could and we're not |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1946 # at the index of an option string, there were extra arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1947 if start_index not in option_string_indices: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1948 strings = arg_strings[start_index:next_option_string_index] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1949 extras.extend(strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1950 start_index = next_option_string_index |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1951 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1952 # consume the next optional and any arguments for it |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1953 start_index = consume_optional(start_index) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1954 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1955 # consume any positionals following the last Optional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1956 stop_index = consume_positionals(start_index) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1957 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1958 # if we didn't consume all the argument strings, there were extras |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1959 extras.extend(arg_strings[stop_index:]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1960 |
|
78822
74f6d87cd471
Merge #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
diff
changeset
|
1961 # make sure all required actions were present and also convert |
|
74f6d87cd471
Merge #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
diff
changeset
|
1962 # action defaults which were not given as arguments |
|
74f6d87cd471
Merge #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
diff
changeset
|
1963 required_actions = [] |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1964 for action in self._actions: |
|
78821
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1965 if action not in seen_actions: |
|
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1966 if action.required: |
|
78822
74f6d87cd471
Merge #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
diff
changeset
|
1967 required_actions.append(_get_action_name(action)) |
|
78821
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1968 else: |
|
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1969 # Convert action default now instead of doing it before |
|
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1970 # parsing arguments to avoid calling convert functions |
|
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1971 # twice (which may fail) if the argument was given, but |
|
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1972 # only if it was defined already in the namespace |
|
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1973 if (action.default is not None and |
|
79017
9ae9326cd79a
Merge 3.2 fix updates and tests for issue #15906.
Barry Warsaw <barry@python.org>
diff
changeset
|
1974 isinstance(action.default, str) and |
|
78822
74f6d87cd471
Merge #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
diff
changeset
|
1975 hasattr(namespace, action.dest) and |
|
74f6d87cd471
Merge #12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
diff
changeset
|
1976 action.default is getattr(namespace, action.dest)): |
|
78821
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1977 setattr(namespace, action.dest, |
|
1b614921aefa
#12776,#11839: call argparse type function only once.
R David Murray <rdmurray@bitdance.com>
parents:
78232
diff
changeset
|
1978 self._get_value(action, action.default)) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1979 |
|
70741
cab204a79e09
#10424: argument names are now included in the missing argument message
R David Murray <rdmurray@bitdance.com>
parents:
69127
diff
changeset
|
1980 if required_actions: |
|
cab204a79e09
#10424: argument names are now included in the missing argument message
R David Murray <rdmurray@bitdance.com>
parents:
69127
diff
changeset
|
1981 self.error(_('the following arguments are required: %s') % |
|
cab204a79e09
#10424: argument names are now included in the missing argument message
R David Murray <rdmurray@bitdance.com>
parents:
69127
diff
changeset
|
1982 ', '.join(required_actions)) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1983 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1984 # make sure all required groups had one option present |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1985 for group in self._mutually_exclusive_groups: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1986 if group.required: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1987 for action in group._group_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1988 if action in seen_non_default_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1989 break |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1990 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1991 # if no actions were used, report the error |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1992 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1993 names = [_get_action_name(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1994 for action in group._group_actions |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1995 if action.help is not SUPPRESS] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1996 msg = _('one of the arguments %s is required') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1997 self.error(msg % ' '.join(names)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1998 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
1999 # return the updated namespace and the extra arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2000 return namespace, extras |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2001 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2002 def _read_args_from_files(self, arg_strings): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2003 # expand arguments referencing files |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2004 new_arg_strings = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2005 for arg_string in arg_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2006 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2007 # for regular arguments, just add them back into the list |
|
78229
ac53876d1cc8
#12353: argparse now correctly handles null argument values.
R David Murray <rdmurray@bitdance.com>
parents:
78226
diff
changeset
|
2008 if not arg_string or arg_string[0] not in self.fromfile_prefix_chars: |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2009 new_arg_strings.append(arg_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2010 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2011 # replace arguments referencing files with the file content |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2012 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2013 try: |
|
82168
cb876235f29d
modernize some modules' code by using with statement around open()
Giampaolo Rodola' <g.rodola@gmail.com>
parents:
81039
diff
changeset
|
2014 with open(arg_string[1:]) as args_file: |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2015 arg_strings = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2016 for arg_line in args_file.read().splitlines(): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2017 for arg in self.convert_arg_line_to_args(arg_line): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2018 arg_strings.append(arg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2019 arg_strings = self._read_args_from_files(arg_strings) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2020 new_arg_strings.extend(arg_strings) |
|
81039
7d69d04522e3
Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80864
diff
changeset
|
2021 except OSError: |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2022 err = _sys.exc_info()[1] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2023 self.error(str(err)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2024 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2025 # return the modified argument list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2026 return new_arg_strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2027 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2028 def convert_arg_line_to_args(self, arg_line): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2029 return [arg_line] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2030 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2031 def _match_argument(self, action, arg_strings_pattern): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2032 # match the pattern for this action to the arg strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2033 nargs_pattern = self._get_nargs_pattern(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2034 match = _re.match(nargs_pattern, arg_strings_pattern) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2035 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2036 # raise an exception if we weren't able to find a match |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2037 if match is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2038 nargs_errors = { |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2039 None: _('expected one argument'), |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2040 OPTIONAL: _('expected at most one argument'), |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2041 ONE_OR_MORE: _('expected at least one argument'), |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2042 } |
|
66721
1827a8ac9b18
Use proper plural forms in argparse (#4391)
Éric Araujo <merwok@netwok.org>
parents:
66661
diff
changeset
|
2043 default = ngettext('expected %s argument', |
|
1827a8ac9b18
Use proper plural forms in argparse (#4391)
Éric Araujo <merwok@netwok.org>
parents:
66661
diff
changeset
|
2044 'expected %s arguments', |
|
1827a8ac9b18
Use proper plural forms in argparse (#4391)
Éric Araujo <merwok@netwok.org>
parents:
66661
diff
changeset
|
2045 action.nargs) % action.nargs |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2046 msg = nargs_errors.get(action.nargs, default) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2047 raise ArgumentError(action, msg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2048 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2049 # return the number of arguments matched |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2050 return len(match.group(1)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2051 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2052 def _match_arguments_partial(self, actions, arg_strings_pattern): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2053 # progressively shorten the actions list by slicing off the |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2054 # final actions until we find a match |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2055 result = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2056 for i in range(len(actions), 0, -1): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2057 actions_slice = actions[:i] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2058 pattern = ''.join([self._get_nargs_pattern(action) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2059 for action in actions_slice]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2060 match = _re.match(pattern, arg_strings_pattern) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2061 if match is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2062 result.extend([len(string) for string in match.groups()]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2063 break |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2064 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2065 # return the list of arg string counts |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2066 return result |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2067 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2068 def _parse_optional(self, arg_string): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2069 # if it's an empty string, it was meant to be a positional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2070 if not arg_string: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2071 return None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2072 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2073 # if it doesn't start with a prefix, it was meant to be positional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2074 if not arg_string[0] in self.prefix_chars: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2075 return None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2076 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2077 # if the option string is present in the parser, return the action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2078 if arg_string in self._option_string_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2079 action = self._option_string_actions[arg_string] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2080 return action, arg_string, None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2081 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2082 # if it's just a single character, it was meant to be positional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2083 if len(arg_string) == 1: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2084 return None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2085 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2086 # if the option string before the "=" is present, return the action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2087 if '=' in arg_string: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2088 option_string, explicit_arg = arg_string.split('=', 1) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2089 if option_string in self._option_string_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2090 action = self._option_string_actions[option_string] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2091 return action, option_string, explicit_arg |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2092 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2093 # search through all possible prefixes of the option string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2094 # and all actions in the parser for possible interpretations |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2095 option_tuples = self._get_option_tuples(arg_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2096 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2097 # if multiple actions match, the option string was ambiguous |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2098 if len(option_tuples) > 1: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2099 options = ', '.join([option_string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2100 for action, option_string, explicit_arg in option_tuples]) |
|
66661
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2101 args = {'option': arg_string, 'matches': options} |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2102 msg = _('ambiguous option: %(option)s could match %(matches)s') |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2103 self.error(msg % args) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2104 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2105 # if exactly one action matched, this segmentation is good, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2106 # so return the parsed action |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2107 elif len(option_tuples) == 1: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2108 option_tuple, = option_tuples |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2109 return option_tuple |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2110 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2111 # if it was not found as an option, but it looks like a negative |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2112 # number, it was meant to be positional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2113 # unless there are negative-number-like options |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2114 if self._negative_number_matcher.match(arg_string): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2115 if not self._has_negative_number_optionals: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2116 return None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2117 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2118 # if it contains a space, it was meant to be a positional |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2119 if ' ' in arg_string: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2120 return None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2121 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2122 # it was meant to be an optional but there is no such option |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2123 # in this parser (though it might be a valid option in a subparser) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2124 return None, arg_string, None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2125 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2126 def _get_option_tuples(self, option_string): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2127 result = [] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2128 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2129 # option strings starting with two prefix characters are only |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2130 # split at the '=' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2131 chars = self.prefix_chars |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2132 if option_string[0] in chars and option_string[1] in chars: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2133 if '=' in option_string: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2134 option_prefix, explicit_arg = option_string.split('=', 1) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2135 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2136 option_prefix = option_string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2137 explicit_arg = None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2138 for option_string in self._option_string_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2139 if option_string.startswith(option_prefix): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2140 action = self._option_string_actions[option_string] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2141 tup = action, option_string, explicit_arg |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2142 result.append(tup) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2143 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2144 # single character options can be concatenated with their arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2145 # but multiple character options always have to have their argument |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2146 # separate |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2147 elif option_string[0] in chars and option_string[1] not in chars: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2148 option_prefix = option_string |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2149 explicit_arg = None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2150 short_option_prefix = option_string[:2] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2151 short_explicit_arg = option_string[2:] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2152 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2153 for option_string in self._option_string_actions: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2154 if option_string == short_option_prefix: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2155 action = self._option_string_actions[option_string] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2156 tup = action, option_string, short_explicit_arg |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2157 result.append(tup) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2158 elif option_string.startswith(option_prefix): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2159 action = self._option_string_actions[option_string] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2160 tup = action, option_string, explicit_arg |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2161 result.append(tup) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2162 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2163 # shouldn't ever get here |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2164 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2165 self.error(_('unexpected option string: %s') % option_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2166 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2167 # return the collected option tuples |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2168 return result |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2169 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2170 def _get_nargs_pattern(self, action): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2171 # in all examples below, we have to allow for '--' args |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2172 # which are represented as '-' in the pattern |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2173 nargs = action.nargs |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2174 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2175 # the default (None) is assumed to be a single argument |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2176 if nargs is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2177 nargs_pattern = '(-*A-*)' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2178 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2179 # allow zero or one arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2180 elif nargs == OPTIONAL: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2181 nargs_pattern = '(-*A?-*)' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2182 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2183 # allow zero or more arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2184 elif nargs == ZERO_OR_MORE: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2185 nargs_pattern = '(-*[A-]*)' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2186 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2187 # allow one or more arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2188 elif nargs == ONE_OR_MORE: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2189 nargs_pattern = '(-*A[A-]*)' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2190 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2191 # allow any number of options or arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2192 elif nargs == REMAINDER: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2193 nargs_pattern = '([-AO]*)' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2194 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2195 # allow one argument followed by any number of options or arguments |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2196 elif nargs == PARSER: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2197 nargs_pattern = '(-*A[-AO]*)' |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2198 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2199 # all others should be integers |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2200 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2201 nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2202 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2203 # if this is an optional action, -- is not allowed |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2204 if action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2205 nargs_pattern = nargs_pattern.replace('-*', '') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2206 nargs_pattern = nargs_pattern.replace('-', '') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2207 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2208 # return the pattern |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2209 return nargs_pattern |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2210 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2211 # ======================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2212 # Value conversion methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2213 # ======================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2214 def _get_values(self, action, arg_strings): |
|
78232
18b114be013e
#13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents:
78229
diff
changeset
|
2215 # for everything but PARSER, REMAINDER args, strip out first '--' |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2216 if action.nargs not in [PARSER, REMAINDER]: |
|
78232
18b114be013e
#13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents:
78229
diff
changeset
|
2217 try: |
|
18b114be013e
#13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents:
78229
diff
changeset
|
2218 arg_strings.remove('--') |
|
18b114be013e
#13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents:
78229
diff
changeset
|
2219 except ValueError: |
|
18b114be013e
#13922: argparse no longer incorrectly strips '--' after the first one.
R David Murray <rdmurray@bitdance.com>
parents:
78229
diff
changeset
|
2220 pass |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2221 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2222 # optional argument produces a default when not present |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2223 if not arg_strings and action.nargs == OPTIONAL: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2224 if action.option_strings: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2225 value = action.const |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2226 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2227 value = action.default |
|
59282
b30f8ce82167
Merged revisions 78600-78601 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59275
diff
changeset
|
2228 if isinstance(value, str): |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2229 value = self._get_value(action, value) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2230 self._check_value(action, value) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2231 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2232 # when nargs='*' on a positional, if there were no command-line |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2233 # args, use the default if it is anything other than None |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2234 elif (not arg_strings and action.nargs == ZERO_OR_MORE and |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2235 not action.option_strings): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2236 if action.default is not None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2237 value = action.default |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2238 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2239 value = arg_strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2240 self._check_value(action, value) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2241 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2242 # single argument or optional argument produces a single value |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2243 elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2244 arg_string, = arg_strings |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2245 value = self._get_value(action, arg_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2246 self._check_value(action, value) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2247 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2248 # REMAINDER arguments convert all values, checking none |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2249 elif action.nargs == REMAINDER: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2250 value = [self._get_value(action, v) for v in arg_strings] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2251 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2252 # PARSER arguments convert all values, but check only the first |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2253 elif action.nargs == PARSER: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2254 value = [self._get_value(action, v) for v in arg_strings] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2255 self._check_value(action, value[0]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2256 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2257 # all other types of nargs produce a list |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2258 else: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2259 value = [self._get_value(action, v) for v in arg_strings] |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2260 for v in value: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2261 self._check_value(action, v) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2262 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2263 # return the converted value |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2264 return value |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2265 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2266 def _get_value(self, action, arg_string): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2267 type_func = self._registry_get('type', action.type, action.type) |
|
73165
8e57b5d8f58f
Closes #13258: Use callable() built-in in the standard library.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
69126
diff
changeset
|
2268 if not callable(type_func): |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2269 msg = _('%r is not callable') |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2270 raise ArgumentError(action, msg % type_func) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2271 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2272 # convert the value to the appropriate type |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2273 try: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2274 result = type_func(arg_string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2275 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2276 # ArgumentTypeErrors indicate errors |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2277 except ArgumentTypeError: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2278 name = getattr(action.type, '__name__', repr(action.type)) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2279 msg = str(_sys.exc_info()[1]) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2280 raise ArgumentError(action, msg) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2281 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2282 # TypeErrors or ValueErrors also indicate errors |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2283 except (TypeError, ValueError): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2284 name = getattr(action.type, '__name__', repr(action.type)) |
|
66661
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2285 args = {'type': name, 'value': arg_string} |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2286 msg = _('invalid %(type)s value: %(value)r') |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2287 raise ArgumentError(action, msg % args) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2288 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2289 # return the converted value |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2290 return result |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2291 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2292 def _check_value(self, action, value): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2293 # converted value must be one of the choices (if specified) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2294 if action.choices is not None and value not in action.choices: |
|
66661
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2295 args = {'value': value, |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2296 'choices': ', '.join(map(repr, action.choices))} |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2297 msg = _('invalid choice: %(value)r (choose from %(choices)s)') |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2298 raise ArgumentError(action, msg % args) |
|
59275
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2299 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2300 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2301 # Help-formatting methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2302 # ======================= |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2303 def format_usage(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2304 formatter = self._get_formatter() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2305 formatter.add_usage(self.usage, self._actions, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2306 self._mutually_exclusive_groups) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2307 return formatter.format_help() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2308 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2309 def format_help(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2310 formatter = self._get_formatter() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2311 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2312 # usage |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2313 formatter.add_usage(self.usage, self._actions, |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2314 self._mutually_exclusive_groups) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2315 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2316 # description |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2317 formatter.add_text(self.description) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2318 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2319 # positionals, optionals and user-defined groups |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2320 for action_group in self._action_groups: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2321 formatter.start_section(action_group.title) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2322 formatter.add_text(action_group.description) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2323 formatter.add_arguments(action_group._group_actions) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2324 formatter.end_section() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2325 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2326 # epilog |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2327 formatter.add_text(self.epilog) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2328 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2329 # determine help from format above |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2330 return formatter.format_help() |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2331 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2332 def _get_formatter(self): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2333 return self.formatter_class(prog=self.prog) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2334 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2335 # ===================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2336 # Help-printing methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2337 # ===================== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2338 def print_usage(self, file=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2339 if file is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2340 file = _sys.stdout |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2341 self._print_message(self.format_usage(), file) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2342 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2343 def print_help(self, file=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2344 if file is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2345 file = _sys.stdout |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2346 self._print_message(self.format_help(), file) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2347 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2348 def _print_message(self, message, file=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2349 if message: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2350 if file is None: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2351 file = _sys.stderr |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2352 file.write(message) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2353 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2354 # =============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2355 # Exiting methods |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2356 # =============== |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2357 def exit(self, status=0, message=None): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2358 if message: |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2359 self._print_message(message, _sys.stderr) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2360 _sys.exit(status) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2361 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2362 def error(self, message): |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2363 """error(message: string) |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2364 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2365 Prints a usage message incorporating the message to stderr and |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2366 exits. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2367 |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2368 If you override this in a subclass, it should not return -- it |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2369 should either exit or raise an exception. |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2370 """ |
|
12bcb69938b3
Merged revisions 78586-78593 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59257
diff
changeset
|
2371 self.print_usage(_sys.stderr) |
|
66661
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2372 args = {'prog': self.prog, 'message': message} |
|
4c9844732925
Allow translators to reorder placeholders in localizable messages from
Éric Araujo <merwok@netwok.org>
parents:
66655
diff
changeset
|
2373 self.exit(2, _('%(prog)s: error: %(message)s\n') % args) |
