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

54 lines
1.7 KiB
Python
Raw Normal View History

2021-04-14 23:23:56 +03:00
import logging
import os
2021-04-15 12:30:26 +03:00
import shutil
from pathlib import Path
from tags import Tags
2021-04-14 23:23:56 +03:00
class Library:
def __init__(self, dir_root: Path):
self.dir_root = dir_root
self.dir_orphan = Path(dir_root, '_orphan')
2021-04-14 23:23:56 +03:00
self.dir_orphan.mkdir(exist_ok=True, parents=True)
2021-04-15 12:30:26 +03:00
def move_to_orphan(self, p: Path) -> None:
2021-04-14 23:23:56 +03:00
logging.info("%s move to orphan", p)
shutil.move(os.fspath(p), os.fspath(self.dir_orphan))
2021-04-15 12:30:26 +03:00
def move(self, p: Path, tags: Tags) -> None:
2021-04-14 23:23:56 +03:00
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
2021-04-14 23:23:56 +03:00
return p
# Main section
if tags.copyrights != "":
2021-04-15 12:30:26 +03:00
_copyright = tags.copyrights.split(" ")[0]
p = p / self.__sanitize(_copyright)
2021-04-14 23:23:56 +03:00
if tags.characters == "":
return p
# Characters section
characters = tags.characters_sanitized()
2021-04-14 23:23:56 +03:00
if len(characters) == 1:
p = p / self.__sanitize(characters[0])
2021-04-14 23:23:56 +03:00
else:
p = p / "_multiple"
return p
2021-04-15 12:30:26 +03:00
@staticmethod
def __sanitize(s: str) -> str:
2021-04-14 23:23:56 +03:00
s = "".join(x for x in s if x.isalnum() or x in "._-()")
return s.replace("_", " ").strip()