[signals] update FLAGS handling
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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"]:
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user