From d8a370da0bf7c87d6879fee06385577eb47c2aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Fri, 11 Jul 2025 21:01:24 +0200 Subject: [PATCH] [signals] update FLAGS handling --- gallery_dl/__init__.py | 16 +++++++++++----- gallery_dl/job.py | 6 +++--- gallery_dl/util.py | 9 ++++++++- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/gallery_dl/__init__.py b/gallery_dl/__init__.py index a3296f95..cb040b65 100644 --- a/gallery_dl/__init__.py +++ b/gallery_dl/__init__.py @@ -91,16 +91,22 @@ def main(): if signals := config.get((), "signals-actions"): import signal + + def signals_handler(event, action): + def handler(signal_num, frame): + signal_name = signal.Signals(signal_num).name + output.stderr_write(f"{signal_name} received\n") + util.FLAGS.__dict__[event] = action + return handler + for signal_name, action in signals.items(): signal_num = getattr(signal, signal_name, None) if signal_num is None: log.warning("signal '%s' is not defined", signal_name) else: - def handler(signal_num, frame): - signal_name = signal.Signals(signal_num).name - output.stderr_write(f"{signal_name} received\n") - util.FLAGS.__dict__[action.upper()] = "stop" - signal.signal(signal_num, handler) + event, _, action = action.rpartition(":") + signal.signal(signal_num, signals_handler( + event.upper() if event else "FILE", action.lower())) # enable ANSI escape sequences on Windows if util.WINDOWS and config.get(("output",), "ansi", output.COLORS): diff --git a/gallery_dl/job.py b/gallery_dl/job.py index 6df633f0..76799bfe 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -202,7 +202,7 @@ class Job(): self.update_kwdict(kwdict) self.handle_url(url, kwdict) if FLAGS.FILE is not None: - FLAGS.FILE = FLAGS.process(FLAGS.FILE) + FLAGS.process("FILE") elif msg[0] == Message.Directory: self.update_kwdict(msg[1]) @@ -216,7 +216,7 @@ class Job(): self.update_kwdict(kwdict) self.handle_queue(url, kwdict) if FLAGS.CHILD is not None: - FLAGS.CHILD = FLAGS.process(FLAGS.CHILD) + FLAGS.process("CHILD") def handle_url(self, url, kwdict): """Handle Message.Url""" @@ -396,7 +396,7 @@ class DownloadJob(Job): for callback in self.hooks["post-after"]: callback(self.pathfmt) if FLAGS.POST is not None: - FLAGS.POST = FLAGS.process(FLAGS.POST) + FLAGS.process("POST") self.pathfmt.set_directory(kwdict) if "post" in self.hooks: for callback in self.hooks["post"]: diff --git a/gallery_dl/util.py b/gallery_dl/util.py index 4bad023b..22bb6e84 100644 --- a/gallery_dl/util.py +++ b/gallery_dl/util.py @@ -728,8 +728,15 @@ class Flags(): self.FILE = self.POST = self.CHILD = self.DOWNLOAD = None def process(self, flag): - if flag == "terminate": + value = self.__dict__[flag] + self.__dict__[flag] = None + + if value == "abort": + raise exception.AbortExtraction() + if value == "terminate": raise exception.TerminateExtraction() + if value == "restart": + raise exception.RestartExtraction() raise exception.StopExtraction()