cli (base): catch SystemExit to do a proper quit when Ctrl-C is pressed.

This commit is contained in:
Goffi 2023-10-18 15:33:38 +02:00
commit 3e51dc187c

View file

@ -116,7 +116,7 @@ class LiberviaCli:
sys.exit(1)
self.bridge = bridge_module.AIOBridge()
self._onQuitCallbacks = []
self._on_quit_callbacks = []
def get_config(self, name, section=C.CONFIG_SECTION, default=None):
"""Retrieve a setting value from sat.conf"""
@ -301,7 +301,7 @@ class LiberviaCli:
@param callback(callback): method to call
"""
self._onQuitCallbacks.append((callback, args, kwargs))
self._on_quit_callbacks.append((callback, args, kwargs))
def get_output_choices(self, output_type):
"""Return valid output filters for output_type
@ -730,7 +730,10 @@ class LiberviaCli:
def _run(self, args=None, namespace=None):
self.loop = LiberviaCLILoop()
self.loop.run(self, args, namespace)
try:
self.loop.run(self, args, namespace)
except SystemExit:
self.quit()
@classmethod
def run(cls):
@ -785,12 +788,13 @@ class LiberviaCli:
"""
# first the onQuitCallbacks
try:
callbacks_list = self._onQuitCallbacks
callbacks_list = self._on_quit_callbacks
except AttributeError:
pass
else:
for callback, args, kwargs in callbacks_list:
callback(*args, **kwargs)
callbacks_list.clear()
self.loop.quit(exit_code)
if raise_exc: