diff --git a/IPython/html/terminal/__init__.py b/IPython/html/terminal/__init__.py index fc78db3..3837d95 100644 --- a/IPython/html/terminal/__init__.py +++ b/IPython/html/terminal/__init__.py @@ -1,6 +1,7 @@ import os from terminado import NamedTermManager from .handlers import TerminalHandler, NewTerminalHandler, TermSocket +from . import api_handlers def initialize(webapp): shell = os.environ.get('SHELL', 'sh') @@ -10,5 +11,7 @@ def initialize(webapp): (r"/terminals/(\w+)", TerminalHandler), (r"/terminals/websocket/(\w+)", TermSocket, {'term_manager': webapp.terminal_manager}), + (r"/api/terminals", api_handlers.TerminalRootHandler), + (r"/api/terminals/(\w+)", api_handlers.TerminalHandler), ] webapp.add_handlers(".*$", handlers) \ No newline at end of file diff --git a/IPython/html/terminal/api_handlers.py b/IPython/html/terminal/api_handlers.py new file mode 100644 index 0000000..90fcd22 --- /dev/null +++ b/IPython/html/terminal/api_handlers.py @@ -0,0 +1,35 @@ +import json +from tornado import web +from ..base.handlers import IPythonHandler, json_errors + +class TerminalRootHandler(IPythonHandler): + @web.authenticated + @json_errors + def get(self): + tm = self.application.terminal_manager + terms = [{'name': name} for name in tm.terminals] + self.finish(json.dumps(terms)) + +class TerminalHandler(IPythonHandler): + SUPPORTED_METHODS = ('GET', 'DELETE') + + @web.authenticated + @json_errors + def get(self, name): + tm = self.application.terminal_manager + if name in tm.terminals: + self.finish(json.dumps({'name': name})) + else: + raise web.HTTPError(404, "Terminal not found: %r" % name) + + @web.authenticated + @json_errors + def delete(self, name): + tm = self.application.terminal_manager + if name in tm.terminals: + tm.kill(name) + # XXX: Should this wait for terminal to finish before returning? + self.set_status(204) + self.finish() + else: + raise web.HTTPError(404, "Terminal not found: %r" % name) \ No newline at end of file