Update to the latest version of argparse (#6786)
* Update to the latest version of argparse * Re-add colified logic
This commit is contained in:
parent
010334bf22
commit
088c193a78
1 changed files with 36 additions and 53 deletions
75
lib/spack/external/argparse.py
vendored
75
lib/spack/external/argparse.py
vendored
|
@ -1,25 +1,6 @@
|
||||||
# argparse is (c) 2006-2009 Steven J. Bethard <steven.bethard@gmail.com>.
|
|
||||||
#
|
|
||||||
# The argparse module was contributed to Python as of Python 2.7 and thus
|
|
||||||
# was licensed under the Python license. Same license applies to all files in
|
|
||||||
# the argparse package project.
|
|
||||||
#
|
|
||||||
# For details about the Python License, please see doc/Python-License.txt.
|
|
||||||
#
|
|
||||||
# History
|
|
||||||
# -------
|
|
||||||
#
|
|
||||||
# Before (and including) argparse 1.1, the argparse package was licensed under
|
|
||||||
# Apache License v2.0.
|
|
||||||
#
|
|
||||||
# After argparse 1.1, all project files from the argparse project were deleted
|
|
||||||
# due to license compatibility issues between Apache License 2.0 and GNU GPL v2.
|
|
||||||
#
|
|
||||||
# The project repository then had a clean start with some files taken from
|
|
||||||
# Python 2.7.1, so definitely all files are under Python License now.
|
|
||||||
#
|
|
||||||
# Author: Steven J. Bethard <steven.bethard@gmail.com>.
|
# Author: Steven J. Bethard <steven.bethard@gmail.com>.
|
||||||
#
|
# Maintainer: Thomas Waldmann <tw@waldmann-edv.de>
|
||||||
|
|
||||||
"""Command-line parsing library
|
"""Command-line parsing library
|
||||||
|
|
||||||
This module is an optparse-inspired command-line parsing library that:
|
This module is an optparse-inspired command-line parsing library that:
|
||||||
|
@ -81,7 +62,12 @@
|
||||||
still considered an implementation detail.)
|
still considered an implementation detail.)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = '1.2.1'
|
__version__ = '1.4.0' # we use our own version number independant of the
|
||||||
|
# one in stdlib and we release this on pypi.
|
||||||
|
|
||||||
|
__external_lib__ = True # to make sure the tests really test THIS lib,
|
||||||
|
# not the builtin one in Python stdlib
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'ArgumentParser',
|
'ArgumentParser',
|
||||||
'ArgumentError',
|
'ArgumentError',
|
||||||
|
@ -1134,9 +1120,8 @@ def __call__(self, parser, namespace, values, option_string=None):
|
||||||
try:
|
try:
|
||||||
parser = self._name_parser_map[parser_name]
|
parser = self._name_parser_map[parser_name]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
args = {'parser_name': parser_name,
|
tup = parser_name, ', '.join(self._name_parser_map)
|
||||||
'choices': ', '.join(self._name_parser_map)}
|
msg = _('unknown parser %r (choices: %s)' % tup)
|
||||||
msg = _('unknown parser %(parser_name)r (choices: %(choices)s)') % args
|
|
||||||
raise ArgumentError(self, msg)
|
raise ArgumentError(self, msg)
|
||||||
|
|
||||||
# parse all the remaining options into the namespace
|
# parse all the remaining options into the namespace
|
||||||
|
@ -1180,11 +1165,16 @@ def __call__(self, string):
|
||||||
msg = _('argument "-" with mode %r' % self._mode)
|
msg = _('argument "-" with mode %r' % self._mode)
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
|
try:
|
||||||
# all other arguments are used as file names
|
# all other arguments are used as file names
|
||||||
if self._bufsize:
|
if self._bufsize:
|
||||||
return open(string, self._mode, self._bufsize)
|
return open(string, self._mode, self._bufsize)
|
||||||
else:
|
else:
|
||||||
return open(string, self._mode)
|
return open(string, self._mode)
|
||||||
|
except IOError:
|
||||||
|
err = _sys.exc_info()[1]
|
||||||
|
message = _("can't open '%s': %s")
|
||||||
|
raise ArgumentTypeError(message % (string, err))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
args = [self._mode, self._bufsize]
|
args = [self._mode, self._bufsize]
|
||||||
|
@ -1720,21 +1710,6 @@ def _add_action(self, action):
|
||||||
self._positionals._add_action(action)
|
self._positionals._add_action(action)
|
||||||
return action
|
return action
|
||||||
|
|
||||||
|
|
||||||
def get_subparser(self, name):
|
|
||||||
"""Gets a subparser added with the supplied name.
|
|
||||||
This is an extension to the standard argparse API.
|
|
||||||
"""
|
|
||||||
subpasrsers_actions = [
|
|
||||||
action for action in self._actions
|
|
||||||
if isinstance(action, _SubParsersAction)]
|
|
||||||
for action in subpasrsers_actions:
|
|
||||||
for choice, subparser in action.choices.items():
|
|
||||||
if choice == name:
|
|
||||||
return subparser
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _get_optional_actions(self):
|
def _get_optional_actions(self):
|
||||||
return [action
|
return [action
|
||||||
for action in self._actions
|
for action in self._actions
|
||||||
|
@ -1769,10 +1744,7 @@ def parse_known_args(self, args=None, namespace=None):
|
||||||
if action.dest is not SUPPRESS:
|
if action.dest is not SUPPRESS:
|
||||||
if not hasattr(namespace, action.dest):
|
if not hasattr(namespace, action.dest):
|
||||||
if action.default is not SUPPRESS:
|
if action.default is not SUPPRESS:
|
||||||
default = action.default
|
setattr(namespace, action.dest, action.default)
|
||||||
if isinstance(action.default, basestring):
|
|
||||||
default = self._get_value(action, default)
|
|
||||||
setattr(namespace, action.dest, default)
|
|
||||||
|
|
||||||
# add any parser defaults that aren't present
|
# add any parser defaults that aren't present
|
||||||
for dest in self._defaults:
|
for dest in self._defaults:
|
||||||
|
@ -2000,12 +1972,23 @@ def consume_positionals(start_index):
|
||||||
if positionals:
|
if positionals:
|
||||||
self.error(_('too few arguments'))
|
self.error(_('too few arguments'))
|
||||||
|
|
||||||
# make sure all required actions were present
|
# make sure all required actions were present, and convert defaults.
|
||||||
for action in self._actions:
|
for action in self._actions:
|
||||||
if action.required:
|
|
||||||
if action not in seen_actions:
|
if action not in seen_actions:
|
||||||
|
if action.required:
|
||||||
name = _get_action_name(action)
|
name = _get_action_name(action)
|
||||||
self.error(_('argument %s is required') % name)
|
self.error(_('argument %s is required') % name)
|
||||||
|
else:
|
||||||
|
# Convert action default now instead of doing it before
|
||||||
|
# parsing arguments to avoid calling convert functions
|
||||||
|
# twice (which may fail) if the argument was given, but
|
||||||
|
# only if it was defined already in the namespace
|
||||||
|
if (action.default is not None and
|
||||||
|
isinstance(action.default, basestring) and
|
||||||
|
hasattr(namespace, action.dest) and
|
||||||
|
action.default is getattr(namespace, action.dest)):
|
||||||
|
setattr(namespace, action.dest,
|
||||||
|
self._get_value(action, action.default))
|
||||||
|
|
||||||
# make sure all required groups had one option present
|
# make sure all required groups had one option present
|
||||||
for group in self._mutually_exclusive_groups:
|
for group in self._mutually_exclusive_groups:
|
||||||
|
|
Loading…
Reference in a new issue