From dd4a4a3fa622d3cf6030afb19e7474bd0feafb79 Mon Sep 17 00:00:00 2001 From: ClosedPort22 <44864697+ClosedPort22@users.noreply.github.com> Date: Sat, 17 Dec 2022 21:06:47 +0800 Subject: [PATCH] [e621] softcode the pagination threshold --- docs/configuration.rst | 19 +++++++++++-------- gallery_dl/extractor/danbooru.py | 9 ++++++--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 8c827f25..2e5e7f6a 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -1004,18 +1004,21 @@ Description Note: This requires 1 additional HTTP request for each post. -extractor.danbooru.pagination ------------------------------ +extractor.danbooru.threshold +---------------------------- Type - ``string`` + ``string`` or ``int`` Default - ``"length"`` + ``"auto"`` Description - Controls when to stop paginating over API results. + Stop paginating over API results if the length of a batch of returned + posts is less than the specified number. Defaults to the per-page limit + of the current instance, which is 320 for ``e621`` and 200 for + everything else. - * ``"length"``: Stop when the length of a batch of results is less than - the page limit. - * ``"manual"``: Only stop when a batch of results is empty. + Note: Changing this setting is normally not necessary. When the value is + greater than the per-page limit, gallery-dl will stop after the first + batch. The value cannot be less than 1. extractor.danbooru.ugoira diff --git a/gallery_dl/extractor/danbooru.py b/gallery_dl/extractor/danbooru.py index 3bcbff4b..ef17176e 100644 --- a/gallery_dl/extractor/danbooru.py +++ b/gallery_dl/extractor/danbooru.py @@ -41,7 +41,11 @@ class DanbooruExtractor(BaseExtractor): self.ugoira = self.config("ugoira", False) self.external = self.config("external", False) self.extended_metadata = self.config("metadata", False) - self.strategy = self.config("pagination", "length") + threshold = self.config("threshold") + if isinstance(threshold, int): + self.threshold = 1 if threshold < 1 else threshold + else: + self.threshold = self.per_page username, api_key = self._get_auth_info() if username: @@ -118,7 +122,6 @@ class DanbooruExtractor(BaseExtractor): def _pagination(self, endpoint, params, pagenum=False): url = self.root + endpoint - limit = self.per_page if self.strategy == "length" else 1 params["limit"] = self.per_page params["page"] = self.page_start @@ -128,7 +131,7 @@ class DanbooruExtractor(BaseExtractor): posts = posts["posts"] yield from posts - if len(posts) < limit: + if len(posts) < self.threshold: return if pagenum: