From 83f465faca3107c6406972d913d3f194412d9494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Sun, 7 Mar 2021 22:23:52 +0100 Subject: [PATCH] [deviantart] refactor 'extra' (#1356) - change its expected type to string - let users specify a list of sources (stash, posts) or 'all' --- docs/configuration.rst | 17 +++++++++------ docs/gallery-dl.conf | 2 +- gallery_dl/extractor/deviantart.py | 34 +++++++++++++----------------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 7171238d..266a309f 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -745,15 +745,20 @@ Description extractor.deviantart.extra -------------------------- Type - ``bool`` or ``string`` + ``string`` or ``list`` of ``strings`` Default - ``false`` + ``null`` +Example + ``stash,posts`` Description - Download embedded Deviations and Sta.sh resources from - description texts and journals. + A (comma-separated) list of extra content to extract + from description texts and journals. - Set this option to ``"stash"`` or ``"deviations"`` - to select only one of them as a source. + Possible values are + ``"posts"`` (embedded DeviantArt posts) and + ``"stash"`` (Sta.sh resources). + + You can use ``"all"`` instead of listing all values separately. Note: Enabling this option also enables `deviantart.metadata `_. diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index acf60c7e..12b8e4fb 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -58,7 +58,7 @@ }, "deviantart": { - "extra": false, + "extra": null, "flat": true, "folders": false, "include": "gallery", diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index acbaf5be..dca61f9a 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -80,18 +80,19 @@ class DeviantartExtractor(Extractor): extra = self.extra if extra: - if extra == "stash": - extra_stash = DeviantartStashExtractor.pattern.finditer - extra_deviation = None - elif extra == "deviations": - extra_deviation = DeviantartDeviationExtractor.pattern.finditer - extra_stash = None + if extra is True or extra == "all": + extra = (DeviantartStashExtractor, + DeviantartDeviationExtractor) else: - extra_stash = DeviantartStashExtractor.pattern.finditer - extra_deviation = DeviantartDeviationExtractor.pattern.finditer - extra = True + items = extra + extra = [] + if isinstance(items, str): + items = items.split(",") + if "stash" in items: + extra.append(DeviantartStashExtractor) + if "posts" in items: + extra.append(DeviantartDeviationExtractor) - yield Message.Version, 1 for deviation in self.deviations(): if isinstance(deviation, tuple): url, data = deviation @@ -147,15 +148,10 @@ class DeviantartExtractor(Extractor): if extra: txt = (deviation.get("description", "") + deviation.get("_journal", "")) - if extra_stash: - for match in extra_stash(txt): + for extr in extra: + for match in extr.pattern.finditer(txt): url = text.ensure_http_scheme(match.group(0)) - deviation["_extractor"] = DeviantartStashExtractor - yield Message.Queue, url, deviation - if extra_deviation: - for match in extra_deviation(txt): - url = text.ensure_http_scheme(match.group(0)) - deviation["_extractor"] = DeviantartDeviationExtractor + deviation["_extractor"] = extr yield Message.Queue, url, deviation def deviations(self): @@ -784,7 +780,7 @@ class DeviantartDeviationExtractor(DeviantartExtractor): }), # sta.sh URLs from description (#302) (("https://www.deviantart.com/uotapo/art/INANAKI-Memo-590297498"), { - "options": (("extra", 1), ("original", 0)), + "options": (("extra", "stash"), ("original", False)), "pattern": DeviantartStashExtractor.pattern, "range": "2-", "count": 4,