api_handlers.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import json
  2. from tornado import web, gen
  3. from ..base.handlers import APIHandler
  4. from ..utils import url_path_join
  5. class TerminalRootHandler(APIHandler):
  6. @web.authenticated
  7. def get(self):
  8. tm = self.terminal_manager
  9. terms = [{'name': name} for name in tm.terminals]
  10. self.finish(json.dumps(terms))
  11. @web.authenticated
  12. def post(self):
  13. """POST /terminals creates a new terminal and redirects to it"""
  14. name, _ = self.terminal_manager.new_named_terminal()
  15. self.finish(json.dumps({'name': name}))
  16. class TerminalHandler(APIHandler):
  17. SUPPORTED_METHODS = ('GET', 'DELETE')
  18. @web.authenticated
  19. def get(self, name):
  20. tm = self.terminal_manager
  21. if name in tm.terminals:
  22. self.finish(json.dumps({'name': name}))
  23. else:
  24. raise web.HTTPError(404, "Terminal not found: %r" % name)
  25. @web.authenticated
  26. @gen.coroutine
  27. def delete(self, name):
  28. tm = self.terminal_manager
  29. if name in tm.terminals:
  30. yield tm.terminate(name, force=True)
  31. self.set_status(204)
  32. self.finish()
  33. else:
  34. raise web.HTTPError(404, "Terminal not found: %r" % name)