from website_generator.fields import PathMatcherField, PathField from website_generator.config import ActionConfig from website_generator.actions import Action import shutil import typesystem class CopyActionConfig(ActionConfig): src = PathMatcherField() dest = PathField(allow_null=True, must_exist=False, allow_folders=True) overwite = typesystem.Boolean(default=True) class CopyAction(Action): type = 'copy' def __init__(self, **params): config = CopyActionConfig.validate(params) params['src'] = config.src params['dest'] = config.dest params['overwrite'] = config.overwrite super().__init__(**params) def __call__(self): for source_path in self.src.all(): if source_path.is_dir(): shutil.copytree(str(source_path), str(self.dest)) else: shutil.copy2(str(source_path), str(self.dest))