From 33f3ed9f572297c83aa2f80b575479096764989a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Sat, 31 May 2025 17:41:54 +0200 Subject: [PATCH] [job] refactor parent-child config paths (#7527) - fixes TypeError when enabling 'category-transfer' - fixes 'category-transfer' not applying to early config lookups --- gallery_dl/job.py | 76 ++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/gallery_dl/job.py b/gallery_dl/job.py index a88f5361..7966ebc1 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -47,35 +47,12 @@ class Job(): self.kwdict = {} self.kwdict_eval = False - cfgpath = [] - if parent: - if extr.category == parent.extractor.category or \ - extr.category in parent.parents: - parents = parent.parents - else: - parents = parent.parents + (parent.extractor.category,) - - if parents: - for category in parents: - cat = "{}>{}".format(category, extr.category) - cfgpath.append((cat, extr.subcategory)) - cfgpath.append((category + ">*", extr.subcategory)) - cfgpath.append((extr.category, extr.subcategory)) - self.parents = parents - else: - self.parents = () - else: - self.parents = () - - if extr.basecategory: - if not cfgpath: - cfgpath.append((extr.category, extr.subcategory)) - cfgpath.append((extr.basecategory, extr.subcategory)) - + cfgpath = self._build_config_path(parent) if cfgpath: + if isinstance(cfgpath, list): + extr.config = extr._config_shared + extr.config_accumulate = extr._config_shared_accumulate extr._cfgpath = cfgpath - extr.config = extr._config_shared - extr.config_accumulate = extr._config_shared_accumulate actions = extr.config("actions") if actions: @@ -93,16 +70,6 @@ class Job(): extr.log = self._wrap_logger(extr.log) extr.log.debug("Using %s for '%s'", extr.__class__.__name__, extr.url) - # data from parent job - if parent: - pextr = parent.extractor - - # transfer (sub)category - if pextr.config("category-transfer", pextr.categorytransfer): - extr._cfgpath = pextr._cfgpath - extr.category = pextr.category - extr.subcategory = pextr.subcategory - self.metadata_url = extr.config2("metadata-url", "url-metadata") self.metadata_http = extr.config2("metadata-http", "http-metadata") metadata_path = extr.config2("metadata-path", "path-metadata") @@ -134,6 +101,41 @@ class Job(): else: self.kwdict.update(kwdict) + def _build_config_path(self, parent): + extr = self.extractor + cfgpath = [] + + if parent: + pextr = parent.extractor + if extr.category == pextr.category or \ + extr.category in parent.parents: + parents = parent.parents + else: + parents = parent.parents + (pextr.category,) + self.parents = parents + + if pextr.config("category-transfer", pextr.categorytransfer): + extr.category = pextr.category + extr.subcategory = pextr.subcategory + return pextr._cfgpath + + if parents: + sub = extr.subcategory + for category in parents: + cat = "{}>{}".format(category, extr.category) + cfgpath.append((cat, sub)) + cfgpath.append((category + ">*", sub)) + cfgpath.append((extr.category, sub)) + else: + self.parents = () + + if extr.basecategory: + if not cfgpath: + cfgpath.append((extr.category, extr.subcategory)) + cfgpath.append((extr.basecategory, extr.subcategory)) + + return cfgpath + def run(self): """Execute or run the job""" extractor = self.extractor