|
1 | 1 | import mimetypes
|
| 2 | +import json |
2 | 3 |
|
3 | 4 | from jupyter_server.base.handlers import JupyterHandler
|
4 | 5 | from jupyter_server.utils import url_path_join as ujoin
|
5 | 6 | from tornado import web
|
6 | 7 |
|
| 8 | +from .manager import manager |
| 9 | + |
7 | 10 |
|
8 | 11 | class ServersInfoHandler(JupyterHandler):
|
9 | 12 | def initialize(self, server_processes):
|
@@ -70,3 +73,41 @@ async def get(self, name):
|
70 | 73 | with open(self.icons[name]) as f:
|
71 | 74 | self.write(f.read())
|
72 | 75 | self.set_header("Content-Type", content_type)
|
| 76 | + |
| 77 | + |
| 78 | +class ServersAPIHandler(JupyterHandler): |
| 79 | + """Handler to get metadata or terminate of a given server""" |
| 80 | + |
| 81 | + @web.authenticated |
| 82 | + async def delete(self, name): |
| 83 | + """Delete a server proxy by name""" |
| 84 | + try: |
| 85 | + val = await manager.terminate_server_proxy_app(name) |
| 86 | + if val is None: |
| 87 | + raise Exception( |
| 88 | + f"Proxy {name} not found. Are you sure the {name} " |
| 89 | + f"is managed by jupyter-server-proxy?" |
| 90 | + ) |
| 91 | + else: |
| 92 | + self.set_status(204) |
| 93 | + self.finish() |
| 94 | + except Exception as e: |
| 95 | + raise web.HTTPError(404, str(e)) |
| 96 | + |
| 97 | + @web.authenticated |
| 98 | + async def get(self, name): |
| 99 | + """Get meta data of a running server proxy""" |
| 100 | + app = manager.get_server_proxy_app(name) |
| 101 | + self.set_status(200) |
| 102 | + self.finish(json.dumps(app._asdict())) |
| 103 | + |
| 104 | + |
| 105 | +class ListServersAPIHandler(JupyterHandler): |
| 106 | + """Handler to list all running server proxies""" |
| 107 | + |
| 108 | + @web.authenticated |
| 109 | + async def get(self): |
| 110 | + """list running servers""" |
| 111 | + apps = manager.list_server_proxy_apps() |
| 112 | + self.set_status(200) |
| 113 | + self.finish(json.dumps([app._asdict() for app in apps])) |
0 commit comments