Minor argparse improvement.
This commit is contained in:
parent
1b67c8493e
commit
a8ed1ec414
6
lib/spack/external/argparse.py
vendored
6
lib/spack/external/argparse.py
vendored
@ -108,6 +108,8 @@
|
||||
import sys as _sys
|
||||
import textwrap as _textwrap
|
||||
|
||||
from llnl.util.tty.colify import colified
|
||||
|
||||
from gettext import gettext as _
|
||||
|
||||
try:
|
||||
@ -2285,8 +2287,8 @@ def _get_value(self, action, arg_string):
|
||||
def _check_value(self, action, value):
|
||||
# converted value must be one of the choices (if specified)
|
||||
if action.choices is not None and value not in action.choices:
|
||||
tup = value, ', '.join(map(repr, action.choices))
|
||||
msg = _('invalid choice: %r (choose from %s)') % tup
|
||||
cols = colified(sorted(action.choices), indent=4, tty=True)
|
||||
msg = _('invalid choice: %r choose from:\n%s') % (value, cols)
|
||||
raise ArgumentError(action, msg)
|
||||
|
||||
# =======================
|
||||
|
@ -37,9 +37,11 @@
|
||||
import fcntl
|
||||
import termios
|
||||
import struct
|
||||
from StringIO import StringIO
|
||||
|
||||
from llnl.util.tty import terminal_size
|
||||
|
||||
|
||||
class ColumnConfig:
|
||||
def __init__(self, cols):
|
||||
self.cols = cols
|
||||
@ -102,16 +104,18 @@ def colify(elts, **options):
|
||||
output = options.get("output", sys.stdout)
|
||||
indent = options.get("indent", 0)
|
||||
padding = options.get("padding", 2)
|
||||
tty = options.get('tty', None)
|
||||
|
||||
# elts needs to be an array of strings so we can count the elements
|
||||
elts = [str(elt) for elt in elts]
|
||||
if not elts:
|
||||
return
|
||||
|
||||
if not isatty(output):
|
||||
for elt in elts:
|
||||
output.write("%s\n" % elt)
|
||||
return
|
||||
if not tty:
|
||||
if tty is False or not isatty(output):
|
||||
for elt in elts:
|
||||
output.write("%s\n" % elt)
|
||||
return
|
||||
|
||||
console_cols = options.get("cols", None)
|
||||
if not console_cols:
|
||||
@ -147,6 +151,15 @@ def colify(elts, **options):
|
||||
cols -= 1
|
||||
|
||||
|
||||
def colified(elts, **options):
|
||||
"""Invokes the colify() function but returns the result as a string
|
||||
instead of writing it to an output string."""
|
||||
sio = StringIO()
|
||||
options['output'] = sio
|
||||
colify(elts, **options)
|
||||
return sio.getvalue()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import optparse
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user