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