commit 7753976dc7477a86fa8bc923292af3a09da7d660 Author: Damian Johnson atagar@torproject.org Date: Mon Feb 9 08:18:22 2015 -0800
Balk if an unrecognized argument is provided
Interesting, thought getopt did this. For both run_tests.py and the tor-prompt providing an error when unrecognized arguments are provided. Caught by Sebastian on...
https://trac.torproject.org/projects/tor/ticket/14804 --- run_tests.py | 11 ++++++++++- stem/interpreter/arguments.py | 8 ++++++-- 2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/run_tests.py b/run_tests.py index dbead2d..63102a4 100755 --- a/run_tests.py +++ b/run_tests.py @@ -343,7 +343,16 @@ def _get_args(argv):
args = dict(ARGS)
- for opt, arg in getopt.getopt(argv, OPT, OPT_EXPANDED)[0]: + try: + recognized_args, unrecognized_args = getopt.getopt(argv, OPT, OPT_EXPANDED) + + if unrecognized_args: + error_msg = "aren't recognized arguments" if len(unrecognized_args) > 1 else "isn't a recognized argument" + raise ValueError("'%s' %s" % ("', '".join(unrecognized_args), error_msg)) + except getopt.GetoptError as exc: + raise ValueError('%s (for usage provide --help)' % exc) + + for opt, arg in recognized_args: if opt in ('-a', '--all'): args['run_unit'] = True args['run_integ'] = True diff --git a/stem/interpreter/arguments.py b/stem/interpreter/arguments.py index d62a386..acf6d42 100644 --- a/stem/interpreter/arguments.py +++ b/stem/interpreter/arguments.py @@ -45,11 +45,15 @@ def parse(argv): args = dict(DEFAULT_ARGS)
try: - getopt_results = getopt.getopt(argv, OPT, OPT_EXPANDED)[0] + recognized_args, unrecognized_args = getopt.getopt(argv, OPT, OPT_EXPANDED) + + if unrecognized_args: + error_msg = "aren't recognized arguments" if len(unrecognized_args) > 1 else "isn't a recognized argument" + raise ValueError("'%s' %s" % ("', '".join(unrecognized_args), error_msg)) except getopt.GetoptError as exc: raise ValueError('%s (for usage provide --help)' % exc)
- for opt, arg in getopt_results: + for opt, arg in recognized_args: if opt in ('-i', '--interface'): if ':' in arg: address, port = arg.split(':', 1)