예제 #1
0
파일: core.py 프로젝트: darvid/borealis
 def __call__(self, parser, namespace, values, option_string=None):
     if (self.requires_action is not None and
         namespace.action != self.requires_action):
         error("invalid option")
     if self.arg_as_opts:
         if values:
             if " " in values:
                 raise argparse.ArgumentError(self, "invalid options")
             # FIXME
             parser.frontend.unhandled_opts += map(lambda v: "-" + v, values)
     namespace.action = self.capability
예제 #2
0
파일: core.py 프로젝트: darvid/borealis
 def print_package(self, package, **kwargs):
     if self.config.output_desc_wrap != -1:
         wrap = self.config.output_desc_wrap
         indent = " " * self.config.output_desc_indent
         package.metadata["description"] = "\n".join(textwrap.wrap(
             package.metadata["description"], width=wrap,
             initial_indent=indent, subsequent_indent=indent))
     kwargs.update(package.metadata)
     try:
         string = self._output_fmt.format(**kwargs)
         if package.installed and self.current_action != CAPABS.QUERY:
             string = self.config.output_fmt_installed.format(
                 fmt=string,
                 fmt_lines=string.split("\\n"),
                 installed_diff={
                     -1: self.config.output_fmt_installed_old,
                     0: self.config.output_fmt_installed_same,
                     1: self.config.output_fmt_installed_new
                 }[package.version.__cmp__(package.installed_version)],
                 **kwargs)
         string = string.replace("\\n", "\n")
         cprint(string)
     except KeyError:
         error("invalid format string")
예제 #3
0
파일: core.py 프로젝트: darvid/borealis
    def parse_arguments(self):
        # TODO: use getopt instead of argparse. argparse is convenient, but a
        # horrible choice for wrapping an application that uses getopt.
        parser = argparse.ArgumentParser(add_help=False)
        parser.frontend = self

        parser.add_argument("packages", nargs="*", default=[])

        sync = parser.add_argument_group("sync")
        sync.add_argument("-S", "--sync", action=OperationAction,
                          capability=CAPABS.SYNC)
        sync.add_argument("-s", "--search", action=OperationAction,
                          capability=CAPABS.SEARCH, requires_action=CAPABS.SYNC)

        query = parser.add_argument_group("query")
        sync.add_argument("-Q", "--query", action=OperationAction,
                          capability=CAPABS.QUERY, arg_as_opts=True)

        parser.add_argument("-h", "--help", action="store_true")
        parser.add_argument("--default-config", action="store_true")

        self.parsed_args = parser.parse_known_args()
        self.parsed_args[1].extend(self.unhandled_opts)
        arguments, remaining = self.parsed_args

        if remaining:
            remaining = (
                [self.get_switch_for_action(arguments.action)] +
                remaining +
                arguments.packages
            )
            print remaining
            arguments, discard = parser.parse_known_args(remaining)
            del discard

        if arguments.default_config:
            self.print_default_config()
            sys.exit(0)
        else:
            self.parse_config()

        action = None

        if arguments.help:
            self.generate_help()
            sys.exit(0)

        if arguments.action:
            # if any backend operator handler has an optional parameter,
            # don't warn about not supplying any on the command line.
            args_are_optional = False
            for backend in self.backends:
                method = backend.get_method(arguments.action)
                if method:
                    if inspect.getargspec(method).defaults:
                        args_are_optional = True
            if not args_are_optional and not arguments.packages:
                error("no targets specified (use -h for help)")
            elif args_are_optional and not arguments.packages:
                arguments.packages = [None]
            self.dispatch(arguments.action, arguments.packages)
        else:
            error("no operation specified (use -h for help)")