From 3e51dc187c7ac6cb7338ba2da1787bf503e5c9df Mon Sep 17 00:00:00 2001 From: Goffi Date: Wed, 18 Oct 2023 15:33:38 +0200 Subject: [PATCH] cli (base): catch `SystemExit` to do a proper `quit` when `Ctrl-C` is pressed. --- libervia/cli/base.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libervia/cli/base.py b/libervia/cli/base.py index 9c31f056..81450b80 100644 --- a/libervia/cli/base.py +++ b/libervia/cli/base.py @@ -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: