From 895e633c4492b36c81902eaf4567df3bc59d3ed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Wed, 22 May 2024 22:51:12 +0200 Subject: [PATCH] implement 'keywords-eval' option (#5621) to allow evaluating 'keywords' values as format strings --- docs/configuration.rst | 11 +++++++++++ gallery_dl/job.py | 17 +++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 4eebca2c..54379858 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -692,6 +692,17 @@ Description Additional name-value pairs to be added to each metadata dictionary. +extractor.*.keywords-eval +------------------------- +Type + ``bool`` +Default + ``false`` +Description + Evaluate each `keywords `__ ``string`` value + as a `format string`_. + + extractor.*.keywords-default ---------------------------- Type diff --git a/gallery_dl/job.py b/gallery_dl/job.py index 2822fc9a..4562b05d 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -42,8 +42,9 @@ class Job(): self.extractor = extr self.pathfmt = None - self.kwdict = {} self.status = 0 + self.kwdict = {} + self.kwdict_eval = False cfgpath = [] if parent: @@ -120,7 +121,16 @@ class Job(): # user-supplied metadata kwdict = extr.config("keywords") if kwdict: - self.kwdict.update(kwdict) + if extr.config("keywords-eval"): + self.kwdict_eval = [] + for key, value in kwdict.items(): + if isinstance(value, str): + fmt = formatter.parse(value, None, util.identity) + self.kwdict_eval.append((key, fmt.format_map)) + else: + self.kwdict[key] = value + else: + self.kwdict.update(kwdict) def run(self): """Execute or run the job""" @@ -215,6 +225,9 @@ class Job(): kwdict.pop(self.metadata_http, None) if self.kwdict: kwdict.update(self.kwdict) + if self.kwdict_eval: + for key, valuegen in self.kwdict_eval: + kwdict[key] = valuegen(kwdict) def _init(self): self.extractor.initialize()