[job] refactor parent-child config paths (#7527)

- fixes TypeError when enabling 'category-transfer'
- fixes 'category-transfer' not applying to early config lookups
This commit is contained in:
Mike Fährmann
2025-05-31 17:41:54 +02:00
parent 9c3e458ced
commit 33f3ed9f57

View File

@@ -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