-
Notifications
You must be signed in to change notification settings - Fork 270
/
handlers.py
39 lines (29 loc) · 1.26 KB
/
handlers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from tornado import web
from jupyter_server.auth import authorized
from ..base.handlers import JupyterHandler
from ..services.kernelspecs.handlers import kernel_name_regex
AUTH_RESOURCE = "kernelspecs"
class KernelSpecResourceHandler(web.StaticFileHandler, JupyterHandler):
SUPPORTED_METHODS = ("GET", "HEAD")
auth_resource = AUTH_RESOURCE
def initialize(self):
web.StaticFileHandler.initialize(self, path="")
@web.authenticated
@authorized
def get(self, kernel_name, path, include_body=True):
ksm = self.kernel_spec_manager
if path.lower().endswith(".png"):
self.set_header("Cache-Control", f"max-age={60*60*24*30}")
try:
self.root = ksm.get_kernel_spec(kernel_name).resource_dir
except KeyError as e:
raise web.HTTPError(404, "Kernel spec %s not found" % kernel_name) from e
self.log.debug("Serving kernel resource from: %s", self.root)
return web.StaticFileHandler.get(self, path, include_body=include_body)
@web.authenticated
@authorized
def head(self, kernel_name, path):
return self.get(kernel_name, path, include_body=False)
default_handlers = [
(r"/kernelspecs/%s/(?P<path>.*)" % kernel_name_regex, KernelSpecResourceHandler),
]