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.py64
1 files changed, 42 insertions, 22 deletions
diff --git a/gallery_dl/postprocessor/metadata.py b/gallery_dl/postprocessor/metadata.py
index f88dde7..27f9c03 100644
--- a/gallery_dl/postprocessor/metadata.py
+++ b/gallery_dl/postprocessor/metadata.py
@@ -6,7 +6,7 @@
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
-"""Write metadata to JSON files"""
+"""Write metadata to external files"""
from .common import PostProcessor
from .. import util
@@ -24,7 +24,7 @@ class MetadataPP(PostProcessor):
cfmt = options.get("content-format") or options.get("format")
if isinstance(cfmt, list):
cfmt = "\n".join(cfmt) + "\n"
- self.contentfmt = util.Formatter(cfmt).format_map
+ self._content_fmt = util.Formatter(cfmt).format_map
ext = "txt"
elif mode == "tags":
self.write = self._write_tags
@@ -39,47 +39,68 @@ class MetadataPP(PostProcessor):
if directory:
self._directory = self._directory_custom
sep = os.sep + (os.altsep or "")
- self.metadir = directory.rstrip(sep) + os.sep
+ self._metadir = directory.rstrip(sep) + os.sep
+ filename = options.get("filename")
extfmt = options.get("extension-format")
- if extfmt:
+ if filename:
self._filename = self._filename_custom
- self.extfmt = util.Formatter(extfmt).format_map
+ self._filename_fmt = util.Formatter(filename).format_map
+ elif extfmt:
+ self._filename = self._filename_extfmt
+ self._extension_fmt = util.Formatter(extfmt).format_map
else:
self.extension = options.get("extension", ext)
- if options.get("bypost"):
- self.run_metadata, self.run = self.run, self.run_metadata
+ events = options.get("event")
+ if events is None:
+ events = ("file",)
+ if options.get("bypost"):
+ self.log.warning("'bypost' is deprecated, use '\"event\": "
+ "\"post\"' and 'filename' instead")
+ events = ("metadata",)
+ elif isinstance(events, str):
+ events = events.split(",")
+ for event in events:
+ job.hooks[event].append(self.run)
def run(self, pathfmt):
- path = self._directory(pathfmt) + self._filename(pathfmt)
- with open(path, "w", encoding="utf-8") as file:
- self.write(file, pathfmt.kwdict)
+ directory = self._directory(pathfmt)
+ path = directory + self._filename(pathfmt)
+
+ try:
+ with open(path, "w", encoding="utf-8") as fp:
+ self.write(fp, pathfmt.kwdict)
+ except FileNotFoundError:
+ os.makedirs(directory, exist_ok=True)
+ with open(path, "w", encoding="utf-8") as fp:
+ self.write(fp, pathfmt.kwdict)
def _directory(self, pathfmt):
return pathfmt.realdirectory
def _directory_custom(self, pathfmt):
- directory = os.path.join(pathfmt.realdirectory, self.metadir)
- os.makedirs(directory, exist_ok=True)
- return directory
+ return os.path.join(pathfmt.realdirectory, self._metadir)
def _filename(self, pathfmt):
- return pathfmt.filename + "." + self.extension
+ return (pathfmt.filename or "metadata") + "." + self.extension
def _filename_custom(self, pathfmt):
+ return self._filename_fmt(pathfmt.kwdict)
+
+ def _filename_extfmt(self, pathfmt):
kwdict = pathfmt.kwdict
ext = kwdict["extension"]
kwdict["extension"] = pathfmt.extension
- kwdict["extension"] = pathfmt.prefix + self.extfmt(kwdict)
+ kwdict["extension"] = pathfmt.prefix + self._extension_fmt(kwdict)
filename = pathfmt.build_filename()
kwdict["extension"] = ext
return filename
- def _write_custom(self, file, kwdict):
- file.write(self.contentfmt(kwdict))
+ def _write_custom(self, fp, kwdict):
+ fp.write(self._content_fmt(kwdict))
- def _write_tags(self, file, kwdict):
+ def _write_tags(self, fp, kwdict):
tags = kwdict.get("tags") or kwdict.get("tag_string")
if not tags:
@@ -91,11 +112,10 @@ class MetadataPP(PostProcessor):
taglist = tags.split(" ")
tags = taglist
- file.write("\n".join(tags))
- file.write("\n")
+ fp.write("\n".join(tags) + "\n")
- def _write_json(self, file, kwdict):
- util.dump_json(util.filter_dict(kwdict), file, self.ascii, self.indent)
+ def _write_json(self, fp, kwdict):
+ util.dump_json(util.filter_dict(kwdict), fp, self.ascii, self.indent)
__postprocessor__ = MetadataPP