def do_print_file_types(files: DictObj) -> None:
    """Print the file types supported by file_create.

    Args:
        files: The files DictObj returned from load_files_and_licenses
    """
    LOGGER.info('\nSupported File Types:')
    for key in files.keys():
        LOGGER.info("\t%s", key)
    raise SystemExit(0)
示例#2
0
class Projects:
    """Projects holder class

    paths: paths and backup name
    plugins: loaded plugins
    info: projects settings
    """
    def __init__(self, paths: Paths, plugins: DictObj, info: DictObj) -> None:
        self.map = DictObj(dict())

        self._setup(paths, plugins, info)

    def _setup(self, paths: Paths, plugins: DictObj, info: DictObj) -> None:
        projects = info.get('projects')
        if not projects:
            raise SyntaxError("no projects defined")

        for project_name, project_settings in projects.items():
            name = project_settings.pop('name', '')
            if not name:
                name = project_name

            subdir = project_settings.pop('backup_dir', '')
            if subdir:
                new_paths = paths.copy()
                new_paths.subdir = subdir
                self.map[project_name] = Project(new_paths, name, plugins,
                                                 project_settings)
            else:
                self.map[project_name] = Project(paths, name, plugins,
                                                 project_settings)

    def run(self) -> Tuple[bool, str]:
        """Run all defined projects

        Returns:
            bool: operations completed successfully
            str: if operations failed, the error message explaining what failed
        """
        for pos in sorted(list(self.map.keys())):
            finished, error_msg = self.map[pos].run()
            if not finished:
                return finished, error_msg

        return True, ''
示例#3
0
class Project:
    """Project holder class

    Args:
        paths: paths and backup name
        project: name of project
        plugins: loaded plugins
        info: project settings
    """
    def __init__(self, paths: Paths, project: str, plugins: DictObj,
                 info: DictObj):
        self.project = project
        self.map = DictObj(dict())

        self._setup(paths, plugins, info)

    def _setup(self, paths: Paths, plugins: DictObj, info: DictObj) -> None:
        for op_name, op_settings in info.items():
            plugin = op_settings.get('plugin')

            if not plugin:
                raise SyntaxError(
                    "no plugin defined for '{0!s}'".format(op_name))
            if plugin not in plugins:
                raise ValueError("plugin not found: {0!s}".format(plugin))

            self.map[op_name] = plugins[plugin]().setup(
                paths, self.project, op_settings)

    def run(self) -> Tuple[bool, str]:
        """Run operations for this project

        Returns:
            bool: operations completed successfully
            str: if operations failed, the error message explaining what failed
        """
        LOGGER.info("Project: %s", self.project)

        for pos in sorted(list(self.map.keys())):
            finished, error_msg = self.map[pos].run()
            if not finished:
                return finished, error_msg

        return True, ''