From d2f50ecf0954c51297a1f7491e9318550695b36a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Fri, 10 May 2024 22:56:51 +0200 Subject: [PATCH] add 'skip-filter' option (#5255) --- docs/configuration.rst | 9 +++++++++ gallery_dl/job.py | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 3f4539f8..4eebca2c 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -337,6 +337,15 @@ Description filename extension (``file.1.ext``, ``file.2.ext``, etc.) +extractor.*.skip-filter +----------------------- +Type + ``string`` +Description + Python expression controlling which skipped files to count towards + ``"abort"`` / ``"terminate"`` / ``"exit"``. + + extractor.*.sleep ----------------- Type diff --git a/gallery_dl/job.py b/gallery_dl/job.py index b4efb26f..2822fc9a 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -468,9 +468,12 @@ class DownloadJob(Job): for callback in self.hooks["skip"]: callback(pathfmt) if self._skipexc: - self._skipcnt += 1 - if self._skipcnt >= self._skipmax: - raise self._skipexc() + if not self._skipftr or self._skipftr(pathfmt.kwdict): + self._skipcnt += 1 + if self._skipcnt >= self._skipmax: + raise self._skipexc() + else: + self._skipcnt = 0 def download(self, url): """Download 'url'""" @@ -559,6 +562,12 @@ class DownloadJob(Job): elif skip == "exit": self._skipexc = SystemExit self._skipmax = text.parse_int(smax) + + skip_filter = cfg("skip-filter") + if skip_filter: + self._skipftr = util.compile_expression(skip_filter) + else: + self._skipftr = None else: # monkey-patch methods to always return False pathfmt.exists = lambda x=None: False