From dba992637d34b8e4f77e98039066c81c0a8047eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Gia=20Phong?= Date: Mon, 13 Jul 2020 11:39:03 +0700 Subject: [PATCH] Allow verbose/quite level to be specified via config file or env var --- src/pip/_internal/cli/parser.py | 43 +++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/pip/_internal/cli/parser.py b/src/pip/_internal/cli/parser.py index 04e00b72132..07e90917bff 100644 --- a/src/pip/_internal/cli/parser.py +++ b/src/pip/_internal/cli/parser.py @@ -197,15 +197,20 @@ def _update_defaults(self, defaults): if option is None: continue - if option.action in ('store_true', 'store_false', 'count'): + if option.action in ('store_true', 'store_false'): try: val = strtobool(val) except ValueError: - error_msg = invalid_config_error_message( - option.action, key, val - ) - self.error(error_msg) - + self.error(invalid_store_bool_message(key, val)) + elif option.action == 'count': + try: + value = int(val) + except ValueError: + self.error(invalid_count_message(key, val)) + if value < 0: + self.error(invalid_count_message(key, val)) + else: + val = value elif option.action == 'append': val = val.split() val = [self.check_default(option, key, v) for v in val] @@ -253,14 +258,20 @@ def error(self, msg): self.exit(UNKNOWN_ERROR, "{}\n".format(msg)) -def invalid_config_error_message(action, key, val): +def invalid_store_bool_message(key, value): + # type: (str, str) -> str + """Returns a better error message when invalid configuration option + of action store_false or store_true is provided. + """ + return ("{} is not a valid value for {} option, " + "please specify a boolean value like yes/no, " + "true/false or 1/0 instead.").format(value, key) + + +def invalid_count_message(key, value): + # type: (str, str) -> str """Returns a better error message when invalid configuration option - is provided.""" - if action in ('store_true', 'store_false'): - return ("{0} is not a valid value for {1} option, " - "please specify a boolean value like yes/no, " - "true/false or 1/0 instead.").format(val, key) - - return ("{0} is not a valid value for {1} option, " - "please specify a numerical value like 1/0 " - "instead.").format(val, key) + of action count is provided. + """ + return ("{} is not a valid value for {} option, " + "please specify a natural number instead.").format(value, key)