forked from LBRYCommunity/lbry-sdk
improve error messages
This commit is contained in:
parent
8c525b6dfc
commit
c3884352db
2 changed files with 9 additions and 3 deletions
|
@ -159,7 +159,9 @@ def parse_method(method, expanders: dict) -> dict:
|
||||||
raise Exception(f"Expander '{expander_name}' not found, used by {d['name']}.")
|
raise Exception(f"Expander '{expander_name}' not found, used by {d['name']}.")
|
||||||
for expanded in expanders[expander_name]:
|
for expanded in expanders[expander_name]:
|
||||||
if expanded['name'] in known_names:
|
if expanded['name'] in known_names:
|
||||||
raise Exception(f"Expander '{expander_name}' argument repeated: {expanded['name']}.")
|
raise Exception(
|
||||||
|
f"Expander '{expander_name}' argument repeated '{expanded['name']}' used by {d['name']}."
|
||||||
|
)
|
||||||
d['arguments'].append(expanded)
|
d['arguments'].append(expanded)
|
||||||
d['kwargs'].append(expanded)
|
d['kwargs'].append(expanded)
|
||||||
known_names.add(expanded['name'])
|
known_names.add(expanded['name'])
|
||||||
|
@ -213,11 +215,12 @@ def generate_options(method, indent) -> List[str]:
|
||||||
if 'default' in arg:
|
if 'default' in arg:
|
||||||
if arg['type'] != 'bool':
|
if arg['type'] != 'bool':
|
||||||
text += f" [default: {arg['default']}]"
|
text += f" [default: {arg['default']}]"
|
||||||
wrapped = textwrap.wrap(text, LINE_WIDTH-len(left))
|
wrapped = textwrap.wrap(text, LINE_WIDTH-len(left), break_long_words=False)
|
||||||
lines = [f"{left}{wrapped.pop(0)}"]
|
lines = [f"{left}{wrapped.pop(0)}"]
|
||||||
# dont break on -- or docopt will parse as a new option
|
# dont break on -- or docopt will parse as a new option
|
||||||
for line in wrapped:
|
for line in wrapped:
|
||||||
if line.strip().startswith('--'):
|
if line.strip().startswith('--'):
|
||||||
|
print(f"Full text before continuation error: \"{text}\"")
|
||||||
raise Exception(f"Continuation line starts with -- on {method['cli']}: \"{line.strip()}\"")
|
raise Exception(f"Continuation line starts with -- on {method['cli']}: \"{line.strip()}\"")
|
||||||
lines.append(f"{' ' * len(left)} {line}")
|
lines.append(f"{' ' * len(left)} {line}")
|
||||||
options.extend(lines)
|
options.extend(lines)
|
||||||
|
|
|
@ -97,7 +97,10 @@ class TestParser(TestCase):
|
||||||
def test_parse_does_not_allow_duplicate_arguments(self):
|
def test_parse_does_not_allow_duplicate_arguments(self):
|
||||||
with self.assertRaises(Exception) as exc:
|
with self.assertRaises(Exception) as exc:
|
||||||
parse_method(BadAPI.thing_search, get_expanders())
|
parse_method(BadAPI.thing_search, get_expanders())
|
||||||
self.assertEqual(exc.exception.args[0], "Expander 'another_test' argument repeated: somevalue.")
|
self.assertEqual(
|
||||||
|
exc.exception.args[0],
|
||||||
|
"Expander 'another_test' argument repeated 'somevalue' used by thing_search."
|
||||||
|
)
|
||||||
|
|
||||||
def test_parse_does_not_allow_line_break_with_two_dashes(self):
|
def test_parse_does_not_allow_line_break_with_two_dashes(self):
|
||||||
# breaking with two dashes breaks docopt parsing
|
# breaking with two dashes breaks docopt parsing
|
||||||
|
|
Loading…
Reference in a new issue