Revision 320af781 kamaki/cli/argument/__init__.py

b/kamaki/cli/argument/__init__.py
461 461
                cur, finish = next, '\n%s' % tab2
462 462
            return ret + '\n'
463 463

  
464
    @staticmethod
465
    def _patch_with_required_args(arguments, required):
466
        if isinstance(required, tuple):
467
            return ' '.join([ArgumentParseManager._patch_with_required_args(
468
                arguments, k) for k in required])
469
        elif isinstance(required, list):
470
            return '< %s >' % ' | '.join([
471
                ArgumentParseManager._patch_with_required_args(
472
                    arguments, k) for k in required])
473
        arg = arguments[required]
474
        return '/'.join(arg.parsed_name) + (
475
            ' %s [...]' % required.upper() if arg.arity < 0 else (
476
                ' %s' % required.upper() if arg.arity else ''))
477

  
464 478
    def print_help(self, out=stderr):
465 479
        if self.required:
466 480
            tmp_args = dict(self.arguments)
467 481
            for term in self.required2list(self.required):
468 482
                tmp_args.pop(term)
469 483
            tmp_parser = ArgumentParseManager(self._exe, tmp_args)
470
            tmp_parser.syntax = self.syntax
484
            tmp_parser.syntax = self.syntax + self._patch_with_required_args(
485
                self.arguments, self.required)
471 486
            tmp_parser.parser.description = '%s\n\nrequired arguments:\n%s' % (
472 487
                self.parser.description,
473 488
                self.required2str(self.required, self.arguments))
......
540 555
            pkargs = (new_args,) if new_args else ()
541 556
            self._parsed, unparsed = self.parser.parse_known_args(*pkargs)
542 557
            pdict = vars(self._parsed)
543
            diff = set(self.required or []).difference(
544
                [k for k in pdict if pdict[k] != None])
558
            diff = set(self.required or []).difference([
559
                k for k in pdict if pdict[k] != None])
545 560
            if diff:
546 561
                self.print_help()
547 562
                miss = ['/'.join(self.arguments[k].parsed_name) for k in diff]

Also available in: Unified diff