1
0
mirror of https://gist.github.com/6ba37e4d4084e858f917e271550ce5f6.git synced 2024-09-20 00:34:20 +03:00
picsorter/library.py

61 lines
2.0 KiB
Python

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) -> str:
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))
return str(new_path).replace("\\", "/") + "/" + p.name
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()
num = len(characters)
if num == 1:
p = p / self.__sanitize(characters[0])
elif num == 2 and characters[0] in characters[1]:
p = p / self.__sanitize(characters[0])
elif num == 2 and characters[1] in characters[0]:
p = p / self.__sanitize(characters[1])
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()