handlers.py
74 lines
| 2.6 KiB
| text/x-python
|
PythonLexer
MinRK
|
r17525 | """Tornado handlers for the tree view.""" | ||
Brian E. Granger
|
r10641 | |||
MinRK
|
r17525 | # Copyright (c) IPython Development Team. | ||
# Distributed under the terms of the Modified BSD License. | ||||
Brian E. Granger
|
r10641 | |||
MinRK
|
r11644 | from tornado import web | ||
MinRK
|
r18749 | from ..base.handlers import IPythonHandler, path_regex | ||
Spencer Nelson
|
r16525 | from ..utils import url_path_join, url_escape | ||
Brian E. Granger
|
r10641 | |||
MinRK
|
r13055 | class TreeHandler(IPythonHandler): | ||
"""Render the tree view, listing notebooks, clusters, etc.""" | ||||
Brian E. Granger
|
r10641 | |||
Brian E. Granger
|
r15073 | def generate_breadcrumbs(self, path): | ||
MinRK
|
r15238 | breadcrumbs = [(url_escape(url_path_join(self.base_url, 'tree')), '')] | ||
Brian E. Granger
|
r15073 | comps = path.split('/') | ||
ncomps = len(comps) | ||||
for i in range(ncomps): | ||||
if comps[i]: | ||||
MinRK
|
r15238 | link = url_escape(url_path_join(self.base_url, 'tree', *comps[0:i+1])) | ||
Brian E. Granger
|
r15073 | breadcrumbs.append((link, comps[i])) | ||
return breadcrumbs | ||||
Brian E. Granger
|
r15085 | def generate_page_title(self, path): | ||
comps = path.split('/') | ||||
if len(comps) > 3: | ||||
for i in range(len(comps)-2): | ||||
comps.pop(0) | ||||
Spencer Nelson
|
r16524 | page_title = url_path_join(*comps) | ||
Brian E. Granger
|
r15085 | if page_title: | ||
Brian E. Granger
|
r15089 | return page_title+'/' | ||
Brian E. Granger
|
r15085 | else: | ||
Brian E. Granger
|
r15089 | return 'Home' | ||
Brian E. Granger
|
r15085 | |||
MinRK
|
r11644 | @web.authenticated | ||
MinRK
|
r18749 | def get(self, path=''): | ||
MinRK
|
r13117 | path = path.strip('/') | ||
MinRK
|
r17524 | cm = self.contents_manager | ||
MinRK
|
r18749 | if cm.file_exists(path): | ||
Min RK
|
r18758 | # it's not a directory, we have redirecting to do | ||
model = cm.get(path, content=False) | ||||
# redirect to /api/notebooks if it's a notebook, otherwise /api/files | ||||
service = 'notebooks' if model['type'] == 'notebook' else 'files' | ||||
MinRK
|
r13135 | url = url_escape(url_path_join( | ||
Min RK
|
r18758 | self.base_url, service, path, | ||
MinRK
|
r13135 | )) | ||
self.log.debug("Redirecting %s to %s", self.request.path, url) | ||||
MinRK
|
r13055 | self.redirect(url) | ||
Zachary Sailer
|
r12990 | else: | ||
MinRK
|
r18749 | if not cm.dir_exists(path=path): | ||
Brian E. Granger
|
r15097 | # Directory is hidden or does not exist. | ||
MinRK
|
r13055 | raise web.HTTPError(404) | ||
MinRK
|
r17524 | elif cm.is_hidden(path): | ||
Paul Ivanov
|
r15630 | self.log.info("Refusing to serve hidden directory, via 404 Error") | ||
raise web.HTTPError(404) | ||||
Brian E. Granger
|
r15073 | breadcrumbs = self.generate_breadcrumbs(path) | ||
Brian E. Granger
|
r15085 | page_title = self.generate_page_title(path) | ||
Zachary Sailer
|
r12990 | self.write(self.render_template('tree.html', | ||
Brian E. Granger
|
r15085 | page_title=page_title, | ||
Zachary Sailer
|
r12990 | notebook_path=path, | ||
Thomas Kluyver
|
r18557 | breadcrumbs=breadcrumbs, | ||
terminals_available=self.settings['terminals_available'], | ||||
MinRK
|
r13055 | )) | ||
Zachary Sailer
|
r12990 | |||
Brian E. Granger
|
r10647 | #----------------------------------------------------------------------------- | ||
# URL to handler mappings | ||||
#----------------------------------------------------------------------------- | ||||
Zachary Sailer
|
r12990 | default_handlers = [ | ||
Thomas Kluyver
|
r13916 | (r"/tree%s" % path_regex, TreeHandler), | ||
MinRK
|
r13055 | (r"/tree", TreeHandler), | ||
Zachary Sailer
|
r12990 | ] | ||