Revision 0b052394 kamaki/cli/argument/__init__.py
b/kamaki/cli/argument/__init__.py | ||
---|---|---|
556 | 556 |
self._arguments.update(new_arguments) |
557 | 557 |
self.update_parser() |
558 | 558 |
|
559 |
def _parse_required_arguments(self, required, parsed_args): |
|
560 |
if not required: |
|
561 |
return True |
|
562 |
if isinstance(required, tuple): |
|
563 |
for item in required: |
|
564 |
if not self._parse_required_arguments(item, parsed_args): |
|
565 |
return False |
|
566 |
return True |
|
567 |
if isinstance(required, list): |
|
568 |
for item in required: |
|
569 |
if self._parse_required_arguments(item, parsed_args): |
|
570 |
return True |
|
571 |
return False |
|
572 |
return required in parsed_args |
|
573 |
|
|
559 | 574 |
def parse(self, new_args=None): |
560 | 575 |
"""Parse user input""" |
561 | 576 |
try: |
562 | 577 |
pkargs = (new_args,) if new_args else () |
563 | 578 |
self._parsed, unparsed = self.parser.parse_known_args(*pkargs) |
564 |
pdict = vars(self._parsed) |
|
565 |
diff = set(self.required or []).difference( |
|
566 |
[k for k in pdict if pdict[k] not in (None, )]) |
|
567 |
if diff: |
|
579 |
parsed_args = [ |
|
580 |
k for k, v in vars(self._parsed).items() if v not in (None, )] |
|
581 |
if not self._parse_required_arguments(self.required, parsed_args): |
|
568 | 582 |
self.print_help() |
569 |
miss = ['/'.join(self.arguments[k].parsed_name) for k in diff] |
|
570 |
raise CLISyntaxError( |
|
571 |
'Missing required arguments (%s)' % ', '.join(miss)) |
|
583 |
raise CLISyntaxError('Missing required arguments') |
|
584 |
|
|
572 | 585 |
except SystemExit: |
573 | 586 |
raiseCLIError(CLISyntaxError('Argument Syntax Error')) |
574 | 587 |
for name, arg in self.arguments.items(): |
Also available in: Unified diff