[signals] update FLAGS handling
This commit is contained in:
@@ -91,16 +91,22 @@ def main():
|
|||||||
|
|
||||||
if signals := config.get((), "signals-actions"):
|
if signals := config.get((), "signals-actions"):
|
||||||
import signal
|
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():
|
for signal_name, action in signals.items():
|
||||||
signal_num = getattr(signal, signal_name, None)
|
signal_num = getattr(signal, signal_name, None)
|
||||||
if signal_num is None:
|
if signal_num is None:
|
||||||
log.warning("signal '%s' is not defined", signal_name)
|
log.warning("signal '%s' is not defined", signal_name)
|
||||||
else:
|
else:
|
||||||
def handler(signal_num, frame):
|
event, _, action = action.rpartition(":")
|
||||||
signal_name = signal.Signals(signal_num).name
|
signal.signal(signal_num, signals_handler(
|
||||||
output.stderr_write(f"{signal_name} received\n")
|
event.upper() if event else "FILE", action.lower()))
|
||||||
util.FLAGS.__dict__[action.upper()] = "stop"
|
|
||||||
signal.signal(signal_num, handler)
|
|
||||||
|
|
||||||
# enable ANSI escape sequences on Windows
|
# enable ANSI escape sequences on Windows
|
||||||
if util.WINDOWS and config.get(("output",), "ansi", output.COLORS):
|
if util.WINDOWS and config.get(("output",), "ansi", output.COLORS):
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ class Job():
|
|||||||
self.update_kwdict(kwdict)
|
self.update_kwdict(kwdict)
|
||||||
self.handle_url(url, kwdict)
|
self.handle_url(url, kwdict)
|
||||||
if FLAGS.FILE is not None:
|
if FLAGS.FILE is not None:
|
||||||
FLAGS.FILE = FLAGS.process(FLAGS.FILE)
|
FLAGS.process("FILE")
|
||||||
|
|
||||||
elif msg[0] == Message.Directory:
|
elif msg[0] == Message.Directory:
|
||||||
self.update_kwdict(msg[1])
|
self.update_kwdict(msg[1])
|
||||||
@@ -216,7 +216,7 @@ class Job():
|
|||||||
self.update_kwdict(kwdict)
|
self.update_kwdict(kwdict)
|
||||||
self.handle_queue(url, kwdict)
|
self.handle_queue(url, kwdict)
|
||||||
if FLAGS.CHILD is not None:
|
if FLAGS.CHILD is not None:
|
||||||
FLAGS.CHILD = FLAGS.process(FLAGS.CHILD)
|
FLAGS.process("CHILD")
|
||||||
|
|
||||||
def handle_url(self, url, kwdict):
|
def handle_url(self, url, kwdict):
|
||||||
"""Handle Message.Url"""
|
"""Handle Message.Url"""
|
||||||
@@ -396,7 +396,7 @@ class DownloadJob(Job):
|
|||||||
for callback in self.hooks["post-after"]:
|
for callback in self.hooks["post-after"]:
|
||||||
callback(self.pathfmt)
|
callback(self.pathfmt)
|
||||||
if FLAGS.POST is not None:
|
if FLAGS.POST is not None:
|
||||||
FLAGS.POST = FLAGS.process(FLAGS.POST)
|
FLAGS.process("POST")
|
||||||
self.pathfmt.set_directory(kwdict)
|
self.pathfmt.set_directory(kwdict)
|
||||||
if "post" in self.hooks:
|
if "post" in self.hooks:
|
||||||
for callback in self.hooks["post"]:
|
for callback in self.hooks["post"]:
|
||||||
|
|||||||
@@ -728,8 +728,15 @@ class Flags():
|
|||||||
self.FILE = self.POST = self.CHILD = self.DOWNLOAD = None
|
self.FILE = self.POST = self.CHILD = self.DOWNLOAD = None
|
||||||
|
|
||||||
def process(self, flag):
|
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()
|
raise exception.TerminateExtraction()
|
||||||
|
if value == "restart":
|
||||||
|
raise exception.RestartExtraction()
|
||||||
raise exception.StopExtraction()
|
raise exception.StopExtraction()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user