tools/someipigen/someipigen_repl.py (77 lines of code) (raw):

#!/usr/bin/env python3 # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import someipigen from prompt_toolkit import PromptSession from prompt_toolkit.completion import WordCompleter class SomeipigenRepl: def __init__(self, domain, instance, connection, values_filename=None): self.signal_holder = someipigen.SignalManager() if values_filename: self.load_values(values_filename) self.signal_holder.start(domain, instance, connection) self.running = True def set_value(self, signal, value): existing_value = self.signal_holder.get_value(signal) if existing_value is None: raise Exception(f"No existing value for {signal}") elif isinstance(existing_value, int): value = int(value) elif isinstance(existing_value, float): value = float(value) elif isinstance(existing_value, str): value = str(value) elif isinstance(existing_value, bool): value = bool(value) else: raise Exception(f"Unsupported type for {signal}: {type(existing_value)}") self.signal_holder.set_value(signal, value) def get_value(self, signal): return self.signal_holder.get_value(signal) def save_values(self, filename): self.signal_holder.save_values(filename) def load_values(self, filename): self.signal_holder.load_values(filename) def stop(self): self.running = False self.signal_holder.stop() def _get_signals(self): return self.signal_holder.get_signals() if __name__ == "__main__": session = PromptSession() someipigen_repl = SomeipigenRepl( domain="local", instance="commonapi.ExampleSomeipInterface", connection="someipigen" ) signals = someipigen_repl._get_signals() commands = ["set", "get", "save", "load", "help", "exit", "quit", "list"] command_completer = WordCompleter(commands + signals) while someipigen_repl.running: try: text = session.prompt("someipigen$ ", completer=command_completer).strip() if not text: continue cmd, *parts = text.split(maxsplit=1) if cmd == "set": if len(parts) == 1 and " " in parts[0]: signal, value = parts[0].split(maxsplit=1) someipigen_repl.set_value(signal, value) else: print("Usage: set [signal] [value]") elif cmd == "get" and len(parts) == 1: print(someipigen_repl.get_value(parts[0])) elif cmd == "save" and len(parts) == 1: someipigen_repl.save_values(parts[0]) elif cmd == "load" and len(parts) == 1: someipigen_repl.load_values(parts[0]) elif cmd == "list": signals = someipigen_repl._get_signals() for signal in signals: print(signal) elif cmd in ["help", "exit", "quit"]: if cmd == "help": print("Available commands: set, get, save, load, help, exit, quit, list") else: someipigen_repl.stop() else: print("Unknown command. Type 'help' for a list of commands.") except (EOFError, KeyboardInterrupt): someipigen_repl.stop() except Exception as e: print(f"Error: {e}")