diff --git a/simoc-sam.py b/simoc-sam.py index 91b4bd7..d9b0630 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,31 @@ 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}' + hyphen_cmd = cmd.replace('_', '-') + reload_func.__name__ = reload_func_name + reload_func.__doc__ = f"Same as teardown-{hyphen_cmd} + setup-{hyphen_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): @@ -386,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.""" @@ -409,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."""