handlers.py
103 lines
| 3.5 KiB
| text/x-python
|
PythonLexer
Brian E. Granger
|
r10642 | """Tornado handlers for the tree view. | ||
Brian E. Granger
|
r10641 | |||
Authors: | ||||
* Brian Granger | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
Brian E. Granger
|
r10642 | # Copyright (C) 2011 The IPython Development Team | ||
Brian E. Granger
|
r10641 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r13055 | import os | ||
Brian E. Granger
|
r10641 | |||
MinRK
|
r11644 | from tornado import web | ||
Thomas Kluyver
|
r13916 | from ..base.handlers import IPythonHandler, notebook_path_regex, path_regex | ||
Brian E. Granger
|
r15097 | from ..utils import url_path_join, path2url, url2path, url_escape, is_hidden | ||
Brian E. Granger
|
r10641 | |||
#----------------------------------------------------------------------------- | ||||
Brian E. Granger
|
r10642 | # Handlers | ||
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) | ||||
page_title = url_escape(url_path_join(*comps)) | ||||
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
|
r13067 | def get(self, path='', name=None): | ||
MinRK
|
r13117 | path = path.strip('/') | ||
Zachary Sailer
|
r12990 | nbm = self.notebook_manager | ||
Zachary Sailer
|
r13033 | if name is not None: | ||
MinRK
|
r13055 | # is a notebook, redirect to notebook handler | ||
MinRK
|
r13135 | url = url_escape(url_path_join( | ||
MinRK
|
r15238 | self.base_url, 'notebooks', path, name | ||
MinRK
|
r13135 | )) | ||
self.log.debug("Redirecting %s to %s", self.request.path, url) | ||||
MinRK
|
r13055 | self.redirect(url) | ||
Zachary Sailer
|
r12990 | else: | ||
Paul Ivanov
|
r15630 | if not nbm.path_exists(path=path): | ||
Brian E. Granger
|
r15097 | # Directory is hidden or does not exist. | ||
MinRK
|
r13055 | raise web.HTTPError(404) | ||
Paul Ivanov
|
r15630 | elif nbm.is_hidden(path): | ||
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', | ||
MinRK
|
r13055 | project=self.project_dir, | ||
Brian E. Granger
|
r15085 | page_title=page_title, | ||
Zachary Sailer
|
r12990 | notebook_path=path, | ||
Brian E. Granger
|
r15073 | breadcrumbs=breadcrumbs | ||
MinRK
|
r13055 | )) | ||
Zachary Sailer
|
r12990 | |||
class TreeRedirectHandler(IPythonHandler): | ||||
MinRK
|
r13055 | """Redirect a request to the corresponding tree URL""" | ||
Zachary Sailer
|
r12992 | |||
Zachary Sailer
|
r13014 | @web.authenticated | ||
MinRK
|
r13067 | def get(self, path=''): | ||
MinRK
|
r13135 | url = url_escape(url_path_join( | ||
MinRK
|
r15238 | self.base_url, 'tree', path.strip('/') | ||
MinRK
|
r13135 | )) | ||
self.log.debug("Redirecting %s to %s", self.request.path, url) | ||||
Zachary Sailer
|
r12990 | self.redirect(url) | ||
Zachary Sailer
|
r13003 | |||
Brian E. Granger
|
r10647 | #----------------------------------------------------------------------------- | ||
# URL to handler mappings | ||||
#----------------------------------------------------------------------------- | ||||
Zachary Sailer
|
r12990 | default_handlers = [ | ||
Thomas Kluyver
|
r13916 | (r"/tree%s" % notebook_path_regex, TreeHandler), | ||
(r"/tree%s" % path_regex, TreeHandler), | ||||
MinRK
|
r13055 | (r"/tree", TreeHandler), | ||
(r"/", TreeRedirectHandler), | ||||
Zachary Sailer
|
r12990 | ] | ||