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.py34
1 files changed, 30 insertions, 4 deletions
diff --git a/gallery_dl/postprocessor/metadata.py b/gallery_dl/postprocessor/metadata.py
index e89b170..3ef9fbc 100644
--- a/gallery_dl/postprocessor/metadata.py
+++ b/gallery_dl/postprocessor/metadata.py
@@ -103,10 +103,10 @@ class MetadataPP(PostProcessor):
job.register_hooks({event: self.run for event in events}, options)
self._init_archive(job, options, "_MD_")
+ self.filter = self._make_filter(options)
self.mtime = options.get("mtime")
self.omode = options.get("open", omode)
self.encoding = options.get("encoding", "utf-8")
- self.private = options.get("private", False)
self.skip = options.get("skip", False)
def run(self, pathfmt):
@@ -114,7 +114,10 @@ class MetadataPP(PostProcessor):
if archive and archive.check(pathfmt.kwdict):
return
- directory = self._directory(pathfmt)
+ if util.WINDOWS and pathfmt.extended:
+ directory = pathfmt._extended_path(self._directory(pathfmt))
+ else:
+ directory = self._directory(pathfmt)
path = directory + self._filename(pathfmt)
if self.skip and os.path.exists(path):
@@ -231,10 +234,33 @@ class MetadataPP(PostProcessor):
fp.write("\n".join(tags) + "\n")
def _write_json(self, fp, kwdict):
- if not self.private:
- kwdict = util.filter_dict(kwdict)
+ if self.filter:
+ kwdict = self.filter(kwdict)
fp.write(self._json_encode(kwdict) + "\n")
+ def _make_filter(self, options):
+ include = options.get("include")
+ if include:
+ if isinstance(include, str):
+ include = include.split(",")
+ return lambda d: {k: d[k] for k in include if k in d}
+
+ exclude = options.get("exclude")
+ private = options.get("private")
+ if exclude:
+ if isinstance(exclude, str):
+ exclude = exclude.split(",")
+ exclude = set(exclude)
+
+ if private:
+ return lambda d: {k: v for k, v in d.items()
+ if k not in exclude}
+ return lambda d: {k: v for k, v in util.filter_dict(d).items()
+ if k not in exclude}
+
+ if not private:
+ return util.filter_dict
+
@staticmethod
def _make_encoder(options, indent=None):
return json.JSONEncoder(