import logging import os import shutil from pathlib import Path from tags import Tags class Library: def __init__(self, dir_root: Path): self.dir_root = dir_root self.dir_orphan = Path(dir_root, '_orphan') self.dir_orphan.mkdir(exist_ok=True, parents=True) def move_to_orphan(self, p: Path) -> None: logging.info("%s move to orphan", p) shutil.move(os.fspath(p), os.fspath(self.dir_orphan)) def move(self, p: Path, tags: Tags) -> None: new_path = self.__compute_path(tags) new_path.mkdir(exist_ok=True, parents=True) logging.info("%s move to %s", p.name, new_path) shutil.move(os.fspath(p), os.fspath(new_path)) def __compute_path(self, tags: Tags) -> Path: p = self.dir_root if tags.copyrights == 'original': # Originals groups by artist p = p / "_originals" if tags.artists != "": artist = tags.artists.split(" ")[0] artist = self.__sanitize(artist) if (p / artist).exists(): p = p / artist return p # Main section if tags.copyrights != "": _copyright = tags.copyrights.split(" ")[0] p = p / self.__sanitize(_copyright) if tags.characters == "": return p # Characters section characters = tags.characters_sanitized() if len(characters) == 1: p = p / self.__sanitize(characters[0]) else: p = p / "_multiple" return p @staticmethod def __sanitize(s: str) -> str: s = "".join(x for x in s if x.isalnum() or x in "._-()") return s.replace("_", " ").strip()