From 5e22d1d9a63f821ef2b2d35026f8bb9d41aee943 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 14 Apr 2021 23:59:28 +0300 Subject: [PATCH] Sanitize character tags by removing copyright suffix --- _README.md | 3 +++ library.py | 11 +++-------- metadata.py | 2 +- tags.py | 18 ++++++++++++++++++ 4 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 _README.md diff --git a/_README.md b/_README.md new file mode 100644 index 0000000..06b84df --- /dev/null +++ b/_README.md @@ -0,0 +1,3 @@ +## PicSorter + +Finds an image on danbooru, writes tags as IPTC keywords, than places the image in the library \ No newline at end of file diff --git a/library.py b/library.py index d2068c9..8f34d7c 100644 --- a/library.py +++ b/library.py @@ -7,7 +7,7 @@ import os class Library: def __init__(self, dir_root: Path): self.dir_root = dir_root - self.dir_orphan = Path(dir_root, 'orphan') + self.dir_orphan = Path(dir_root, '_orphan') self.dir_orphan.mkdir(exist_ok=True, parents=True) def move_to_orphan(self, p: Path): @@ -37,14 +37,9 @@ class Library: if tags.characters == "": return p # Characters section - characters = tags.characters.split(" ") + characters = tags.characters_sanitized() if len(characters) == 1: - character = characters[0] \ - .replace(copyright, "") \ - .replace("("+copyright+")", "") \ - .replace("()", "") \ - .strip() - p = p / self.__sanitize(character) + p = p / self.__sanitize(characters[0]) else: p = p / "_multiple" return p diff --git a/metadata.py b/metadata.py index cdb516b..cbbac06 100644 --- a/metadata.py +++ b/metadata.py @@ -91,7 +91,7 @@ class Metadata: def __format_filename(self, tags: Tags): filename = '{} {} by {} at {}.jpg'.format( tags.copyrights.split(" ")[0] or "", - ", ".join(tags.characters.split(" ")[:2]), + ", ".join(tags.characters_sanitized()[:2]), tags.artists.split(" ")[0] or "", datetime.now().strftime('%Y%m%d_%H%M%S') ) diff --git a/tags.py b/tags.py index 40f3d5e..619858c 100644 --- a/tags.py +++ b/tags.py @@ -14,6 +14,24 @@ class Tags: self.tags = self.__union_tags() self.tags_string = " ".join(self.tags) + def characters_sanitized(self) -> list: + if self.copyrights == "": + # No need to sanitize tags + return self.characters.split(" ") + copyrights = self.copyrights.split(" ") + return _(self.characters) \ + .split(" ") \ + .filter(lambda s: s != "") \ + .map(lambda s: self.__rename(s, copyrights)) \ + ._ + + def __rename(self, s: str, substrings: list) -> str: + for substring in substrings: + s = s.replace("_("+substring+")", "") \ + .replace("("+substring+")", "") \ + .strip() + return s + def __union_tags(self): tags = self.general.split(" ") tags += self.__prefix_tags(self.copyrights, 'copyright_')