Source code for biothings.hub.api.handlers.shell

import json.decoder

import tornado.web

from biothings.utils.hub import CommandError, CommandNotAllowed, NoSuchCommand

from .base import GenericHandler


[docs] class ShellHandler(GenericHandler):
[docs] def initialize(self, shell, shellog, **kwargs): super().initialize(shell, **kwargs) self.shellog = shellog
[docs] def put(self): try: bodyargs = tornado.escape.json_decode(self.request.body or "{}") cmd = bodyargs["cmd"] except KeyError: raise tornado.web.HTTPError(400, reason="Bad Request oula (Missing argument cmd)") except json.decoder.JSONDecodeError: raise tornado.web.HTTPError(400, reason="Invalid JSON payload") try: outs = self.shell.eval(cmd, secure=True) # only pre-defined command for out in outs: if out != "": self.shellog.output(out) except CommandError as e: raise tornado.web.HTTPError(400, reason="Error: %s" % e) except NoSuchCommand as e: raise tornado.web.HTTPError(404, reason="No such command: %s" % e) except CommandNotAllowed as e: raise tornado.web.HTTPError(403, reason="Command not allowed: %s" % e)