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)
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, ''
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, ''