diff options
Diffstat (limited to 'gallery_dl/postprocessor/metadata.py')
| -rw-r--r-- | gallery_dl/postprocessor/metadata.py | 64 |
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 |
