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.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/gallery_dl/postprocessor/metadata.py b/gallery_dl/postprocessor/metadata.py
new file mode 100644
index 0000000..77be9c7
--- /dev/null
+++ b/gallery_dl/postprocessor/metadata.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+
+# Copyright 2019 Mike Fährmann
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+
+"""Write metadata to JSON files"""
+
+from .common import PostProcessor
+from .. import util
+
+
+class MetadataPP(PostProcessor):
+
+ def __init__(self, pathfmt, options):
+ PostProcessor.__init__(self)
+
+ mode = options.get("mode", "json")
+ ext = "txt"
+
+ if mode == "custom":
+ self.write = self._write_custom
+ self.formatter = util.Formatter(options.get("format"))
+ elif mode == "tags":
+ self.write = self._write_tags
+ else:
+ self.write = self._write_json
+ self.indent = options.get("indent", 4)
+ self.ascii = options.get("ascii", False)
+ ext = "json"
+
+ self.extension = options.get("extension", ext)
+
+ def run(self, pathfmt):
+ path = "{}.{}".format(pathfmt.realpath, self.extension)
+ with open(path, "w", encoding="utf-8") as file:
+ self.write(file, pathfmt)
+
+ def _write_custom(self, file, pathfmt):
+ output = self.formatter.format_map(pathfmt.keywords)
+ file.write(output)
+
+ def _write_tags(self, file, pathfmt):
+ kwds = pathfmt.keywords
+ tags = kwds.get("tags") or kwds.get("tag_string")
+
+ if not tags:
+ return
+
+ if not isinstance(tags, list):
+ taglist = tags.split(", ")
+ if len(taglist) < len(tags) / 16:
+ taglist = tags.split(" ")
+ tags = taglist
+
+ file.write("\n".join(tags))
+ file.write("\n")
+
+ def _write_json(self, file, pathfmt):
+ util.dump_json(pathfmt.keywords, file, self.ascii, self.indent)
+
+
+__postprocessor__ = MetadataPP