summaryrefslogtreecommitdiffstats
path: root/gallery_dl/postprocessor/metadata.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/postprocessor/metadata.py')
-rw-r--r--gallery_dl/postprocessor/metadata.py39
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