Beispiel #1
0
def run_cli():
    try:

        # load all components
        ext_mgr = ExtensionManager()
        ext_mgr.add_builtin_path()
        ext_mgr.load()

        # prepare local environment xii runs in
        paths.prepare_local_paths()

        # parse arguments
        parser = cli_arg_parser(ext_mgr)
        cli_args = parser.parse_args()

        # load variable store
        store = Store()

        # initialize variables
        init_runtime(store, cli_args)

        # parse definifition file
        defn = util.jinja_read(store.get("runtime/definition"), store)

        # construct component configurations
        definition.prepare_store(defn, store)

        # get command
        cmd = ext_mgr.get_command(cli_args.command)

        if not cmd:
            warn("Invalid command `{}`. Command not unknown.".format(
                cli_args.command))
            return 1

        command_arg_parser = cmd["class"].argument_parser()
        command_args = command_arg_parser.parse_args(cli_args.command_args)

        store.set("command/args", vars(command_args))

        instance = cmd["class"](command_args, cmd["templates"], store)
        prepare_command(instance, ext_mgr)

        return instance.run()
    except Interrupted:
        warn("interrupted... stopping immediately!")
        return 1

    except XiiError as e:
        it = iter(e.error())
        warn(e.error_title() + ": " + next(it))

        for line in it:
            warn(line)

        return 1
Beispiel #2
0
    def settings(self, key=None, default=None):
        """return validated settings

        This function will return the searched key or all settings if
        not `key` is specified.

        Args:
            key: Search key eg. "settingsdict/key1" or "foo" or None
            default: If key is not found in settings default is returned

        Returns:
            Value specified in `default` or None
        """
        if self.store().has_key(self.atype):
            s = self.store().derive(self.atype)
        elif self.has_defaults():
            s = Store(parent=self.defaults)
        else:
            raise error.Bug("Try to get default settings for {} but "
                            "no defaults are defined".format(self.entity()))
        if key is None:
            return s.values()
        return s.get(key, default)