예제 #1
0
    def test_parse_positional_signature(self):
        optionals = partial(map, lambda positional: positional.optional)

        self.assert_true(all(not optional for optional in optionals(
            parse_positional_signature((Bytes(), Bytes(), Bytes()))
        )))
        self.assert_true(all(optionals(
            parse_positional_signature([[Bytes(), [Bytes(), [Bytes()]]]])
        )))
        positionals = parse_positional_signature((Bytes(), [Bytes(), Bytes()]))
        self.assert_true(not positionals[0].optional)
        self.assert_true(positionals[1].optional)
        self.assert_true(not positionals[2].optional)
예제 #2
0
파일: __init__.py 프로젝트: DasIch/awwparse
    def _parse_signature(self, signature):
        if len(signature) < 2:
            raise TypeError(
                "expected at least 2 positional arguments"
                ", got {0}".format(len(signature))
            )

        short = long = None
        if isinstance(signature[0], str) and isinstance(signature[1], str):
            short = signature[0]
            long = signature[1]
            positionals = signature[2:]
        elif isinstance(signature[0], str):
            if len(signature[0]) == 2:
                short = signature[0]
            else:
                long = signature[0]
            positionals = signature[1:]
        else:
            raise TypeError(
                "expected short or long as first argument,"
                "got {0!r}".format(
                    signature[0]
                )
            )
        positionals = parse_positional_signature(positionals)
        if positionals[0].optional:
            raise ValueError(
                "first positional must not be optional: {0!r}".format(
                    positionals[0]
                )
            )
        return short, long, positionals
예제 #3
0
파일: __init__.py 프로젝트: DasIch/awwparse
    def __init__(self, options=None, commands=None, positionals=None):
        self.options = OrderedDict()
        self.add_option("__awwparse_help", HelpOption())
        self.add_options(self.__class__.options)
        if options is not None:
            self.add_options(options)

        self.commands = OrderedDict()
        self.add_commands(self.__class__.commands)
        if commands is not None:
            self.add_commands(commands)

        self.positionals = parse_positional_signature(
            force_list(self.__class__.positionals),
            require_metavar=True
        )
        if positionals is not None:
            self.add_positionals(positionals)

        self.parent = None

        signature = Signature.from_method(self.main)
        if signature.annotations:
            self._populate_from_signature(self, signature)

        for name in dir(self):
            try:
                attribute = getattr(self, name)
            except AttributeError:
                # maybe raised by properties; can be safely ignored
                continue
            if isinstance(attribute, Command):
                if not isinstance(attribute.main, MethodType):
                    attribute.main = partial(attribute.main, self)
                self.add_command(name, attribute)