Skip to content

Commit

Permalink
Merge pull request #31 from afshin/terminal-editor
Browse files Browse the repository at this point in the history
Add terminal and editor handlers
  • Loading branch information
afshin authored Sep 29, 2020
2 parents cff037e + 9352a3c commit d38992b
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 2 deletions.
Empty file added nbclassic/edit/__init__.py
Empty file.
34 changes: 34 additions & 0 deletions nbclassic/edit/handlers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#encoding: utf-8
"""Tornado handlers for the terminal emulator."""

# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.

from tornado import web
from jupyter_server.base.handlers import JupyterHandler, path_regex
from jupyter_server.utils import url_escape
from jupyter_server.extension.handler import (
ExtensionHandlerMixin,
ExtensionHandlerJinjaMixin
)

class EditorHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterHandler):
"""Render the text editor interface."""

@web.authenticated
def get(self, path):
path = path.strip('/')
if not self.contents_manager.file_exists(path):
raise web.HTTPError(404, u'File does not exist: %s' % path)

basename = path.rsplit('/', 1)[-1]
self.write(self.render_template('edit.html',
file_path=url_escape(path),
basename=basename,
page_title=basename + " (editing)",
)
)

default_handlers = [
(r"/edit%s" % path_regex, EditorHandler),
]
24 changes: 22 additions & 2 deletions nbclassic/notebookapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,14 @@
from jupyter_server.log import log_request
from jupyter_server.transutils import _
from jupyter_server.serverapp import (
ServerApp,
random_ports,
load_handlers
)
from jupyter_server.utils import url_path_join as ujoin

from .terminal.handlers import TerminalHandler, TermSocket


#-----------------------------------------------------------------------------
# Module globals
Expand Down Expand Up @@ -88,13 +93,13 @@
'ip': 'ServerApp.ip',
'port': 'ServerApp.port',
'port-retries': 'ServerApp.port_retries',
'transport': 'ServerApp.KernelManager.transport',
#'transport': 'KernelManager.transport',
'keyfile': 'ServerApp.keyfile',
'certfile': 'ServerApp.certfile',
'client-ca': 'ServerApp.client_ca',
'notebook-dir': 'ServerApp.notebook_dir',
'browser': 'ServerApp.browser',
'gateway-url': 'ServerApp.GatewayClient.url',
#'gateway-url': 'GatewayClient.url',
})

#-----------------------------------------------------------------------------
Expand Down Expand Up @@ -209,6 +214,21 @@ def initialize_handlers(self):

handlers.extend(load_handlers('nbclassic.tree.handlers'))
handlers.extend(load_handlers('nbclassic.notebook.handlers'))
handlers.extend(load_handlers('nbclassic.edit.handlers'))

# Add terminal handlers
try:
term_mgr = self.serverapp.web_app.settings['terminal_manager']
except KeyError:
pass # Terminals not enabled
else:
handlers.append(
(r"/terminals/(\w+)", TerminalHandler)
)
handlers.append(
(r"/terminals/websocket/(\w+)", TermSocket,
{'term_manager': term_mgr})
)

handlers.append(
(r"/nbextensions/(.*)", FileFindHandler, {
Expand Down
Empty file added nbclassic/terminal/__init__.py
Empty file.
45 changes: 45 additions & 0 deletions nbclassic/terminal/handlers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#encoding: utf-8
"""Tornado handlers for the terminal emulator."""

# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.

from tornado import web
import terminado
from jupyter_server._tz import utcnow
from jupyter_server.base.handlers import JupyterHandler
from jupyter_server.base.zmqhandlers import WebSocketMixin
from jupyter_server.extension.handler import (
ExtensionHandlerMixin,
ExtensionHandlerJinjaMixin
)

class TerminalHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterHandler):
"""Render the terminal interface."""
@web.authenticated
def get(self, term_name):
self.write(self.render_template('terminal.html',
ws_path="terminals/websocket/%s" % term_name))


class TermSocket(WebSocketMixin, JupyterHandler, terminado.TermSocket):

def origin_check(self):
"""Terminado adds redundant origin_check
Tornado already calls check_origin, so don't do anything here.
"""
return True

def get(self, *args, **kwargs):
if not self.get_current_user():
raise web.HTTPError(403)
return super(TermSocket, self).get(*args, **kwargs)

def on_message(self, message):
super(TermSocket, self).on_message(message)
self.application.settings['terminal_last_activity'] = utcnow()

def write_message(self, message, binary=False):
super(TermSocket, self).write_message(message, binary=binary)
self.application.settings['terminal_last_activity'] = utcnow()

0 comments on commit d38992b

Please sign in to comment.