# Copyright (C) 2018 Avatao.com Innovative Learning Kft. # All Rights Reserved. See LICENSE file for details. from tornado.ioloop import IOLoop from tornado.web import Application from terminado import TermSocket, SingleTermManager from tfw.config import TFWENV from tfw.config.logs import logging LOG = logging.getLogger(__name__) class TerminadoMiniServer: def __init__(self, url, port, workdir, shellcmd): self.port = port self._term_manager = SingleTermManager( shell_command=shellcmd, term_settings={'cwd': workdir} ) self.application = Application([( url, TerminadoMiniServer.ResetterTermSocket, {'term_manager': self._term_manager} )]) @property def term_manager(self): return self._term_manager @property def pty(self): return self.term_manager.terminal.ptyproc class ResetterTermSocket(TermSocket): # pylint: disable=abstract-method def check_origin(self, origin): return True def on_close(self): self.term_manager.terminal = None self.term_manager.get_terminal() def listen(self): self.application.listen(self.port) if __name__ == '__main__': LOG.info('Terminado Mini Server listening on %s', TFWENV.TERMINADO_PORT) TerminadoMiniServer( '/terminal', TFWENV.TERMINADO_PORT, TFWENV.TERMINADO_WD, ['bash'] ).listen() IOLoop.instance().start()