mbuali's picture
Upload folder using huggingface_hub
d1ceb73 verified
"""Tornado handlers for plugin management."""
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import dataclasses
import json
from jupyter_server.base.handlers import APIHandler
from tornado import web
from jupyterlab.extensions.manager import PluginManager
class PluginHandler(APIHandler):
def initialize(self, manager: PluginManager):
super().initialize()
self.manager = manager
@web.authenticated
async def get(self):
"""GET query returns info on plugins locks"""
# note: this is informative only - validation is server-side
locks = await self.manager.plugin_locks()
self.set_status(200)
self.finish(json.dumps(locks))
@web.authenticated
async def post(self):
"""POST query performs an action on a specific plugin
Body arguments:
{
"cmd": Action to perform - ["enable", "disable"]
"plugin_name": Plugin name
}
"""
data = self.get_json_body()
cmd = data["cmd"]
name = data["plugin_name"]
if cmd not in ("enable", "disable") or not name:
raise web.HTTPError(
422,
f"Could not process instruction {cmd!r} with plugin name {name!r}",
)
ret_value = None
try:
if cmd == "enable":
ret_value = await self.manager.enable(name)
elif cmd == "disable":
ret_value = await self.manager.disable(name)
except Exception as e:
raise web.HTTPError(500, str(e)) from e
if ret_value.status == "error":
self.set_status(500)
else:
self.set_status(201)
self.finish(json.dumps(dataclasses.asdict(ret_value)))
# The path for lab plugins handler.
plugins_handler_path = r"/lab/api/plugins"