From e414ea2631e946bcfb690218dd4fb9fa04ef7cec Mon Sep 17 00:00:00 2001 From: "R. Richard" Date: Wed, 7 Aug 2019 09:47:28 +0200 Subject: [PATCH] Simplify terminal handler --- tfw/components/terminal/terminal_handler.py | 55 ++++----------------- 1 file changed, 9 insertions(+), 46 deletions(-) diff --git a/tfw/components/terminal/terminal_handler.py b/tfw/components/terminal/terminal_handler.py index c8df229..7d3e041 100644 --- a/tfw/components/terminal/terminal_handler.py +++ b/tfw/components/terminal/terminal_handler.py @@ -7,40 +7,25 @@ LOG = logging.getLogger(__name__) class TerminalHandler: - keys = ['shell'] - """ - Event handler responsible for managing terminal sessions for frontend xterm - sessions to connect to. You need to instanciate this in order for frontend - terminals to work. + keys = ['terminal.write'] - This EventHandler accepts messages that have a data['command'] key specifying - a command to be executed. - The API of each command is documented in their respective handler. - """ - def __init__(self, *, port, user, workind_directory, histfile): - """ - :param key: key this EventHandler listens to - :param monitor: tfw.components.HistoryMonitor instance to read command history from - """ - self.connector = None + def __init__(self, *, port, user, working_directory, histfile): + self.connector, self._historymonitor = None, None self._histfile = histfile - self._historymonitor = None bash_as_user_cmd = ['sudo', '-u', user, 'bash'] self.terminado_server = TerminadoMiniServer( '/terminal', port, - workind_directory, + working_directory, bash_as_user_cmd ) + self.terminado_server.listen() self.commands = { - 'write': self.write, - 'read': self.read + 'terminal.write': self.handle_write } - self.terminado_server.listen() - def start(self): self._historymonitor = BashMonitor(self.connector, self._histfile) self._historymonitor.start() @@ -51,34 +36,12 @@ class TerminalHandler: def handle_event(self, message, _): try: - data = message['data'] - message['data'] = self.commands[data['command']](data) + self.commands[message['key']](message) except KeyError: LOG.error('IGNORING MESSAGE: Invalid message received: %s', message) - def write(self, data): - """ - Writes a string to the terminal session (on the pty level). - Useful for pre-typing and executing commands for the user. - - :param data: TFW message data containing 'value' - (command to be written to the pty) - """ - self.terminado_server.pty.write(data['value']) - return data - - def read(self, data): - """ - Reads the history of commands executed. - - :param data: TFW message data containing 'count' - (the number of history elements to return) - :return dict: message with list of commands in data['history'] - """ - data['count'] = int(data.get('count', 1)) - if self.historymonitor: - data['history'] = self.historymonitor.history[-data['count']:] - return data + def handle_write(self, message): + self.terminado_server.pty.write(message['command']) def cleanup(self): self.terminado_server.stop()