diff options
Diffstat (limited to 'gallery_dl/postprocessor/metadata.py')
| -rw-r--r-- | gallery_dl/postprocessor/metadata.py | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/gallery_dl/postprocessor/metadata.py b/gallery_dl/postprocessor/metadata.py index 2d16db8..d9baed3 100644 --- a/gallery_dl/postprocessor/metadata.py +++ b/gallery_dl/postprocessor/metadata.py @@ -30,6 +30,17 @@ class MetadataPP(PostProcessor): elif mode == "tags": self.write = self._write_tags ext = "txt" + elif mode == "modify": + self.run = self._run_modify + self.fields = { + name: formatter.parse(value, None, util.identity).format_map + for name, value in options.get("fields").items() + } + ext = None + elif mode == "delete": + self.run = self._run_delete + self.fields = options.get("fields") + ext = None else: self.write = self._write_json self.indent = options.get("indent", 4) @@ -99,7 +110,7 @@ class MetadataPP(PostProcessor): with open(path, "w", encoding="utf-8") as fp: self.write(fp, pathfmt.kwdict) except FileNotFoundError: - os.makedirs(directory) + os.makedirs(directory, exist_ok=True) with open(path, "w", encoding="utf-8") as fp: self.write(fp, pathfmt.kwdict) @@ -114,6 +125,32 @@ class MetadataPP(PostProcessor): def _run_stdout(self, pathfmt): self.write(sys.stdout, pathfmt.kwdict) + def _run_modify(self, pathfmt): + kwdict = pathfmt.kwdict + for key, func in self.fields.items(): + obj = kwdict + try: + while "[" in key: + name, _, key = key.partition("[") + obj = obj[name] + key = key.rstrip("]") + obj[key] = func(kwdict) + except Exception: + pass + + def _run_delete(self, pathfmt): + kwdict = pathfmt.kwdict + for key in self.fields: + obj = kwdict + try: + while "[" in key: + name, _, key = key.partition("[") + obj = obj[name] + key = key.rstrip("]") + del obj[key] + except Exception: + pass + def _directory(self, pathfmt): return pathfmt.realdirectory |
