From 41ab8ede404d01d61ed2e35c42bfb641ead217b5 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Wed, 25 Mar 2026 03:55:33 +0100 Subject: [PATCH 1/3] Automatically add reload-* cmd that performs teardown-* + setup-* --- simoc-sam.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/simoc-sam.py b/simoc-sam.py index 91b4bd7..e8f9ab1 100644 --- a/simoc-sam.py +++ b/simoc-sam.py @@ -7,6 +7,7 @@ import shutil import socket import pathlib +import inspect import argparse import datetime import tempfile @@ -49,9 +50,30 @@ COMMANDS = {} +def add_reload_function(cmd): + """Add a reload-cmd function that performs teardown-cmd + setup-cmd.""" + teardown_func = COMMANDS.get(f'teardown_{cmd}') + setup_func = COMMANDS.get(f'setup_{cmd}') + def reload_func(*args, **kwargs): + if inspect.signature(teardown_func).parameters: + teardown_func(*args, **kwargs) + else: + teardown_func() + return setup_func(*args, **kwargs) + reload_func_name = f'reload_{cmd}' + reload_func.__name__ = reload_func_name + reload_func.__doc__ = f"Same as teardown-{cmd} + setup-{cmd}." + COMMANDS[reload_func_name] = reload_func + def cmd(func): """Decorator to add commands to the COMMANDS dict.""" - COMMANDS[func.__name__] = func + func_name = func.__name__ + COMMANDS[func_name] = func + if func_name.startswith('teardown_'): + suffix = func_name.removeprefix('teardown_') + if f'setup_{suffix}' in COMMANDS: + # if both setup-* and teardown-* exist, add reload-* + add_reload_function(suffix) return func def run(args, **kwargs): From cf04568ed297822b7103b4f5847fea907e2f2827 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Wed, 25 Mar 2026 04:08:36 +0100 Subject: [PATCH 2/3] Fix command display name in docstring --- simoc-sam.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/simoc-sam.py b/simoc-sam.py index e8f9ab1..bc17f28 100644 --- a/simoc-sam.py +++ b/simoc-sam.py @@ -61,8 +61,9 @@ def reload_func(*args, **kwargs): teardown_func() return setup_func(*args, **kwargs) reload_func_name = f'reload_{cmd}' + hyphen_cmd = cmd.replace('_', '-') reload_func.__name__ = reload_func_name - reload_func.__doc__ = f"Same as teardown-{cmd} + setup-{cmd}." + reload_func.__doc__ = f"Same as teardown-{hyphen_cmd} + setup-{hyphen_cmd}." COMMANDS[reload_func_name] = reload_func def cmd(func): From ef8b1fb01e846d91206047d0bf9c61955e3d581e Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Wed, 25 Mar 2026 04:09:12 +0100 Subject: [PATCH 3/3] Remove two extra decorators --- simoc-sam.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/simoc-sam.py b/simoc-sam.py index bc17f28..d9b0630 100644 --- a/simoc-sam.py +++ b/simoc-sam.py @@ -409,7 +409,6 @@ def teardown_systemd_unit(name, unit_type='service', stop=True, disable=True): pathlib.Path(SYSTEMD_DIR / unit_name).unlink(missing_ok=True) -@cmd @needs_root def setup_or_teardown_sensors(function, sensors=None): """Setup systemd services that run the sensors.""" @@ -432,7 +431,6 @@ def teardown_sensors(sensors=None): """Revert the changes made by the setup-sensors command.""" setup_or_teardown_sensors(teardown_systemd_unit, sensors) -@cmd @needs_root def setup_or_teardown_display(function, display=None): """Setup/teardown systemd service that runs the display."""