From 01a0fa5f049dbabdddb87ff76b9826c65cdcf181 Mon Sep 17 00:00:00 2001 From: Nitesh Sharma Date: Mon, 23 Jul 2018 21:01:53 +0530 Subject: [PATCH 1/4] Show appropriate error message This catches code exception if wrong arguments passed to cmd options It also adds error message that suggests correct arguments to pass Fixes: https://github.com/pypa/pip/issues/5616 --- news/5644.bugfix | 1 + src/pip/_internal/baseparser.py | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 news/5644.bugfix diff --git a/news/5644.bugfix b/news/5644.bugfix new file mode 100644 index 00000000000..8cbbcaf13c1 --- /dev/null +++ b/news/5644.bugfix @@ -0,0 +1 @@ +Show appropriate error message if invalid args passed \ No newline at end of file diff --git a/src/pip/_internal/baseparser.py b/src/pip/_internal/baseparser.py index 9a8d129747e..68a29655f5c 100644 --- a/src/pip/_internal/baseparser.py +++ b/src/pip/_internal/baseparser.py @@ -192,7 +192,17 @@ def _update_defaults(self, defaults): continue if option.action in ('store_true', 'store_false', 'count'): - val = strtobool(val) + try: + val = strtobool(val) + except ValueError: + self.error( + "#{0} is not a valid value. Valid true values" + "are {1}, {2}, {3}, {4} and valid false values" + "are {5}, {6}, {7}, {8}".format( + val, "true", "yes", "on", 1, + "false", "no", "off", 0 + ) + ) elif option.action == 'append': val = val.split() val = [self.check_default(option, key, v) for v in val] From e5dc3cf85432f3e04845874c2941120d30a982a3 Mon Sep 17 00:00:00 2001 From: Nitesh Sharma Date: Tue, 24 Jul 2018 18:57:38 +0530 Subject: [PATCH 2/4] show error message with wrong configuration option --- news/5644.bugfix | 2 +- src/pip/_internal/baseparser.py | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/news/5644.bugfix b/news/5644.bugfix index 8cbbcaf13c1..39b72077266 100644 --- a/news/5644.bugfix +++ b/news/5644.bugfix @@ -1 +1 @@ -Show appropriate error message if invalid args passed \ No newline at end of file +Show a better error message when a configuration option has an invalid value. \ No newline at end of file diff --git a/src/pip/_internal/baseparser.py b/src/pip/_internal/baseparser.py index 68a29655f5c..8d9cec6fb7e 100644 --- a/src/pip/_internal/baseparser.py +++ b/src/pip/_internal/baseparser.py @@ -196,11 +196,8 @@ def _update_defaults(self, defaults): val = strtobool(val) except ValueError: self.error( - "#{0} is not a valid value. Valid true values" - "are {1}, {2}, {3}, {4} and valid false values" - "are {5}, {6}, {7}, {8}".format( - val, "true", "yes", "on", 1, - "false", "no", "off", 0 + self.invalid_config_error_message( + option.action, key, val ) ) elif option.action == 'append': @@ -245,6 +242,18 @@ def get_default_values(self): defaults[option.dest] = option.check_value(opt_str, default) return optparse.Values(defaults) + def invalid_config_error_message(self, action, key, val): + """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) + def error(self, msg): self.print_usage(sys.stderr) self.exit(2, "%s\n" % msg) From e22cf6cce1dda8c68fa1f30119ca40b548bc64e9 Mon Sep 17 00:00:00 2001 From: Nitesh Sharma Date: Wed, 25 Jul 2018 22:57:55 +0530 Subject: [PATCH 3/4] make error message function helper one --- src/pip/_internal/baseparser.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/pip/_internal/baseparser.py b/src/pip/_internal/baseparser.py index 8d9cec6fb7e..9acc195652e 100644 --- a/src/pip/_internal/baseparser.py +++ b/src/pip/_internal/baseparser.py @@ -195,11 +195,11 @@ def _update_defaults(self, defaults): try: val = strtobool(val) except ValueError: - self.error( - self.invalid_config_error_message( - option.action, key, val - ) + error_msg = invalid_config_error_message( + option.action, key, val ) + self.error(error_msg) + elif option.action == 'append': val = val.split() val = [self.check_default(option, key, v) for v in val] @@ -242,18 +242,18 @@ def get_default_values(self): defaults[option.dest] = option.check_value(opt_str, default) return optparse.Values(defaults) - def invalid_config_error_message(self, action, key, val): - """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) - def error(self, msg): self.print_usage(sys.stderr) self.exit(2, "%s\n" % msg) + +def invalid_config_error_message(action, key, val): + """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) From ad783151c5eb2ee32f5e6eb1451c51d8ae8d88ef Mon Sep 17 00:00:00 2001 From: Nitesh Sharma Date: Wed, 25 Jul 2018 23:01:17 +0530 Subject: [PATCH 4/4] fix pylint issue with space --- src/pip/_internal/baseparser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pip/_internal/baseparser.py b/src/pip/_internal/baseparser.py index 9acc195652e..f2f205f8a05 100644 --- a/src/pip/_internal/baseparser.py +++ b/src/pip/_internal/baseparser.py @@ -246,6 +246,7 @@ def error(self, msg): self.print_usage(sys.stderr) self.exit(2, "%s\n" % msg) + def invalid_config_error_message(action, key, val): """Returns a better error message when invalid configuration option is provided."""