[job] enable all 'parent-…' options for parent extractors by default

- parent-directory
- parent-metadata
- parent-session
- parent-skip

- add general 'parent' option
This commit is contained in:
Mike Fährmann
2026-01-27 11:14:05 +01:00
parent 250fbd3294
commit eaaa25b6e4
3 changed files with 36 additions and 21 deletions

View File

@@ -212,12 +212,34 @@ Description
Specifying a default |Path|_ with ``""`` is required. Specifying a default |Path|_ with ``""`` is required.
extractor.*.parent
------------------
Type
``bool``
Default
``true``
``[chevereto]`` |
``erome`` |
``[imagehost]``
``false``
otherwise
Description
Mark an extractor as a `parent` and enable
* `parent-directory <extractor.*.parent-directory_>`__
* `parent-metadata <extractor.*.parent-metadata_>`__
* `parent-session <extractor.*.parent-session_>`__
* `parent-skip <extractor.*.parent-skip_>`__
for it by default.
extractor.*.parent-directory extractor.*.parent-directory
---------------------------- ----------------------------
Type Type
``bool`` ``bool``
Default Default
``false`` `extractor.parent <extractor.*.parent_>`__
Description Description
Use an extractor's current target directory as Use an extractor's current target directory as
base-directory_ for any spawned child extractors. base-directory_ for any spawned child extractors.
@@ -231,11 +253,7 @@ Type
* ``bool`` * ``bool``
* ``string`` * ``string``
Default Default
``true`` `extractor.parent <extractor.*.parent_>`__
``[chevereto]`` |
``[imagehost]``
``false``
otherwise
Description Description
Forward a parent's metadata to its child extractors. Forward a parent's metadata to its child extractors.
@@ -256,11 +274,7 @@ extractor.*.parent-session
Type Type
``bool`` ``bool``
Default Default
``true`` `extractor.parent <extractor.*.parent_>`__
``[chevereto]`` |
``[imagehost]``
``false``
otherwise
Description Description
Share a parent's Share a parent's
`session <https://requests.readthedocs.io/en/latest/user/advanced/#session-objects>`__ `session <https://requests.readthedocs.io/en/latest/user/advanced/#session-objects>`__
@@ -275,7 +289,7 @@ extractor.*.parent-skip
Type Type
``bool`` ``bool``
Default Default
``false`` `extractor.parent <extractor.*.parent_>`__
Description Description
Share number of skipped downloads between parent and child extractors. Share number of skipped downloads between parent and child extractors.

View File

@@ -58,6 +58,7 @@
"keywords-eval" : false, "keywords-eval" : false,
"keywords-global" : {}, "keywords-global" : {},
"parent" : false,
"parent-directory": false, "parent-directory": false,
"parent-metadata" : false, "parent-metadata" : false,
"parent-session" : false, "parent-session" : false,
@@ -307,6 +308,7 @@
"erome": "erome":
{ {
"user": { "user": {
"parent" : true,
"reposts": false "reposts": false
} }
}, },
@@ -1023,9 +1025,8 @@
"chevereto": "chevereto":
{ {
"parent-metadata": true, "parent" : true,
"parent-session" : true, "password": ""
"password" : ""
}, },
"Danbooru": "Danbooru":
@@ -1099,8 +1100,7 @@
"imagehost": "imagehost":
{ {
"parent-metadata": true, "parent": true
"parent-session" : true
}, },
"mastodon": "mastodon":

View File

@@ -440,14 +440,15 @@ class DownloadJob(Job):
job = self.__class__(extr, self) job = self.__class__(extr, self)
pfmt = self.pathfmt pfmt = self.pathfmt
pextr = self.extractor pextr = self.extractor
parent = pextr.config("parent", pextr.parent)
if pfmt and pextr.config("parent-directory"): if pfmt and pextr.config("parent-directory", parent):
extr._parentdir = pfmt.directory extr._parentdir = pfmt.directory
else: else:
extr._parentdir = pextr._parentdir extr._parentdir = pextr._parentdir
if pmeta := pextr.config2( if pmeta := pextr.config2(
"parent-metadata", "metadata-parent", pextr.parent): "parent-metadata", "metadata-parent", parent):
if isinstance(pmeta, str): if isinstance(pmeta, str):
data = self.kwdict.copy() data = self.kwdict.copy()
if kwdict: if kwdict:
@@ -459,12 +460,12 @@ class DownloadJob(Job):
if kwdict: if kwdict:
job.kwdict.update(kwdict) job.kwdict.update(kwdict)
if pextr.config("parent-session", pextr.parent): if pextr.config("parent-session", parent):
extr.session = pextr.session extr.session = pextr.session
while True: while True:
try: try:
if pextr.config("parent-skip"): if pextr.config("parent-skip", parent):
job._skipcnt = self._skipcnt job._skipcnt = self._skipcnt
status = job.run() status = job.run()
self._skipcnt = job._skipcnt self._skipcnt = job._skipcnt