Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ before_install:

install:
- pip install --pre .[test] $EXTRA_PIP
- pip freeze
- wget https://github.com/jgm/pandoc/releases/download/1.19.1/pandoc-1.19.1-1-amd64.deb && sudo dpkg -i pandoc-1.19.1-1-amd64.deb


Expand Down Expand Up @@ -62,15 +63,11 @@ matrix:
include:
- python: 3.5
env: GROUP=python
- python: "3.7"
- python: 3.7
env: GROUP=python
dist: xenial # required for Python >= 3.7 (travis-ci/travis-ci#9069)
- python: 3.6
env: GROUP=docs
- python: 3.6 # extra test for older tornados
env:
- GROUP=python
- EXTRA_PIP="tornado<5"

after_success:
- codecov
10 changes: 5 additions & 5 deletions jupyter_server/base/zmqhandlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.

import os
import json
import struct
import warnings
import sys
import tornado

Expand All @@ -20,6 +18,8 @@
from ipython_genutils.py3compat import cast_unicode

from .handlers import JupyterHandler
from jupyter_server.utils import maybe_future


def serialize_binary_message(msg):
"""serialize a message as a binary blob
Expand Down Expand Up @@ -276,10 +276,10 @@ def get(self, *args, **kwargs):
# pre_get can be a coroutine in subclasses
# assign and yield in two step to avoid tornado 3 issues
res = self.pre_get()
yield gen.maybe_future(res)
yield maybe_future(res)
res = super(AuthenticatedZMQStreamHandler, self).get(*args, **kwargs)
yield gen.maybe_future(res)
yield maybe_future(res)

def initialize(self):
self.log.debug("Initializing websocket connection %s", self.request.path)
self.session = Session(config=self.config)
Expand Down
6 changes: 2 additions & 4 deletions jupyter_server/files/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@

import mimetypes
import json

from base64 import decodebytes

from tornado import gen, web

from jupyter_server.base.handlers import JupyterHandler
from jupyter_server.utils import maybe_future


class FilesHandler(JupyterHandler):
Expand Down Expand Up @@ -48,7 +46,7 @@ def get(self, path, include_body=True):
else:
name = path

model = yield gen.maybe_future(cm.get(path, type='file', content=include_body))
model = yield maybe_future(cm.get(path, type='file', content=include_body))

if self.get_argument("download", False):
self.set_attachment_header(name)
Expand Down
8 changes: 4 additions & 4 deletions jupyter_server/services/api/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.

from itertools import chain
import json
import os

from tornado import gen, web

from ...base.handlers import JupyterHandler, APIHandler
from jupyter_server._tz import utcfromtimestamp, isoformat

import os
from jupyter_server.utils import maybe_future


class APISpecHandler(web.StaticFileHandler, JupyterHandler):
Expand Down Expand Up @@ -39,7 +38,7 @@ def get(self):
started = self.settings.get('started', utcfromtimestamp(0))
started = isoformat(started)

kernels = yield gen.maybe_future(self.kernel_manager.list_kernels())
kernels = yield maybe_future(self.kernel_manager.list_kernels())
total_connections = sum(k['connections'] for k in kernels)
last_activity = isoformat(self.application.last_activity())
model = {
Expand All @@ -50,6 +49,7 @@ def get(self):
}
self.finish(json.dumps(model, sort_keys=True))


default_handlers = [
(r"/api/spec.yaml", APISpecHandler),
(r"/api/status", APIStatusHandler),
Expand Down
42 changes: 21 additions & 21 deletions jupyter_server/services/contents/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from tornado import gen, web

from jupyter_server.utils import url_path_join, url_escape
from jupyter_server.utils import url_path_join, url_escape, maybe_future
from jupyter_client.jsonutil import date_default

from jupyter_server.base.handlers import (
Expand Down Expand Up @@ -107,8 +107,8 @@ def get(self, path=''):
if content not in {'0', '1'}:
raise web.HTTPError(400, u'Content %r is invalid' % content)
content = int(content)

model = yield gen.maybe_future(self.contents_manager.get(
model = yield maybe_future(self.contents_manager.get(
path=path, type=type, format=format, content=content,
))
validate_model(model, expect_content=content)
Expand All @@ -122,7 +122,7 @@ def patch(self, path=''):
model = self.get_json_body()
if model is None:
raise web.HTTPError(400, u'JSON body missing')
model = yield gen.maybe_future(cm.update(model, path))
model = yield maybe_future(cm.update(model, path))
validate_model(model, expect_content=False)
self._finish_model(model)

Expand All @@ -133,7 +133,7 @@ def _copy(self, copy_from, copy_to=None):
copy_from=copy_from,
copy_to=copy_to or '',
))
model = yield gen.maybe_future(self.contents_manager.copy(copy_from, copy_to))
model = yield maybe_future(self.contents_manager.copy(copy_from, copy_to))
self.set_status(201)
validate_model(model, expect_content=False)
self._finish_model(model)
Expand All @@ -142,7 +142,7 @@ def _copy(self, copy_from, copy_to=None):
def _upload(self, model, path):
"""Handle upload of a new file to path"""
self.log.info(u"Uploading file to %s", path)
model = yield gen.maybe_future(self.contents_manager.new(model, path))
model = yield maybe_future(self.contents_manager.new(model, path))
self.set_status(201)
validate_model(model, expect_content=False)
self._finish_model(model)
Expand All @@ -151,7 +151,7 @@ def _upload(self, model, path):
def _new_untitled(self, path, type='', ext=''):
"""Create a new, empty untitled entity"""
self.log.info(u"Creating new %s in %s", type or 'file', path)
model = yield gen.maybe_future(self.contents_manager.new_untitled(path=path, type=type, ext=ext))
model = yield maybe_future(self.contents_manager.new_untitled(path=path, type=type, ext=ext))
self.set_status(201)
validate_model(model, expect_content=False)
self._finish_model(model)
Expand All @@ -161,8 +161,8 @@ def _save(self, model, path):
"""Save an existing file."""
chunk = model.get("chunk", None)
if not chunk or chunk == -1: # Avoid tedious log information
self.log.info(u"Saving file at %s", path)
model = yield gen.maybe_future(self.contents_manager.save(model, path))
self.log.info(u"Saving file at %s", path)
model = yield maybe_future(self.contents_manager.save(model, path))
validate_model(model, expect_content=False)
self._finish_model(model)

Expand All @@ -182,11 +182,11 @@ def post(self, path=''):

cm = self.contents_manager

file_exists = yield gen.maybe_future(cm.file_exists(path))
file_exists = yield maybe_future(cm.file_exists(path))
if file_exists:
raise web.HTTPError(400, "Cannot POST to files, use PUT instead.")

dir_exists = yield gen.maybe_future(cm.dir_exists(path))
dir_exists = yield maybe_future(cm.dir_exists(path))
if not dir_exists:
raise web.HTTPError(404, "No such directory: %s" % path)

Expand Down Expand Up @@ -220,21 +220,21 @@ def put(self, path=''):
if model:
if model.get('copy_from'):
raise web.HTTPError(400, "Cannot copy with PUT, only POST")
exists = yield gen.maybe_future(self.contents_manager.file_exists(path))
exists = yield maybe_future(self.contents_manager.file_exists(path))
if exists:
yield gen.maybe_future(self._save(model, path))
yield maybe_future(self._save(model, path))
else:
yield gen.maybe_future(self._upload(model, path))
yield maybe_future(self._upload(model, path))
else:
yield gen.maybe_future(self._new_untitled(path))
yield maybe_future(self._new_untitled(path))

@web.authenticated
@gen.coroutine
def delete(self, path=''):
"""delete a file in the given path"""
cm = self.contents_manager
self.log.warning('delete %s', path)
yield gen.maybe_future(cm.delete(path))
yield maybe_future(cm.delete(path))
self.set_status(204)
self.finish()

Expand All @@ -246,7 +246,7 @@ class CheckpointsHandler(APIHandler):
def get(self, path=''):
"""get lists checkpoints for a file"""
cm = self.contents_manager
checkpoints = yield gen.maybe_future(cm.list_checkpoints(path))
checkpoints = yield maybe_future(cm.list_checkpoints(path))
data = json.dumps(checkpoints, default=date_default)
self.finish(data)

Expand All @@ -255,7 +255,7 @@ def get(self, path=''):
def post(self, path=''):
"""post creates a new checkpoint"""
cm = self.contents_manager
checkpoint = yield gen.maybe_future(cm.create_checkpoint(path))
checkpoint = yield maybe_future(cm.create_checkpoint(path))
data = json.dumps(checkpoint, default=date_default)
location = url_path_join(self.base_url, 'api/contents',
url_escape(path), 'checkpoints', url_escape(checkpoint['id']))
Expand All @@ -271,7 +271,7 @@ class ModifyCheckpointsHandler(APIHandler):
def post(self, path, checkpoint_id):
"""post restores a file from a checkpoint"""
cm = self.contents_manager
yield gen.maybe_future(cm.restore_checkpoint(checkpoint_id, path))
yield maybe_future(cm.restore_checkpoint(checkpoint_id, path))
self.set_status(204)
self.finish()

Expand All @@ -280,7 +280,7 @@ def post(self, path, checkpoint_id):
def delete(self, path, checkpoint_id):
"""delete clears a checkpoint for a given file"""
cm = self.contents_manager
yield gen.maybe_future(cm.delete_checkpoint(checkpoint_id, path))
yield maybe_future(cm.delete_checkpoint(checkpoint_id, path))
self.set_status(204)
self.finish()

Expand All @@ -307,7 +307,7 @@ class TrustNotebooksHandler(JupyterHandler):
@gen.coroutine
def post(self,path=''):
cm = self.contents_manager
yield gen.maybe_future(cm.trust_notebook(path))
yield maybe_future(cm.trust_notebook(path))
self.set_status(201)
self.finish()
#-----------------------------------------------------------------------------
Expand Down
16 changes: 8 additions & 8 deletions jupyter_server/services/kernels/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
from tornado.concurrent import Future
from tornado.ioloop import IOLoop

from jupyter_client import protocol_version as client_protocol_version
from jupyter_client.jsonutil import date_default
from ipython_genutils.py3compat import cast_unicode
from jupyter_server.utils import url_path_join, url_escape
from jupyter_server.utils import url_path_join, url_escape, maybe_future

from ...base.handlers import APIHandler
from ...base.zmqhandlers import AuthenticatedZMQStreamHandler, deserialize_binary_message

from jupyter_client import protocol_version as client_protocol_version


class MainKernelHandler(APIHandler):
Expand All @@ -30,7 +30,7 @@ class MainKernelHandler(APIHandler):
@gen.coroutine
def get(self):
km = self.kernel_manager
kernels = yield gen.maybe_future(km.list_kernels())
kernels = yield maybe_future(km.list_kernels())
self.finish(json.dumps(kernels, default=date_default))

@web.authenticated
Expand All @@ -45,8 +45,8 @@ def post(self):
else:
model.setdefault('name', km.default_kernel_name)

kernel_id = yield gen.maybe_future(km.start_kernel(kernel_name=model['name']))
model = yield gen.maybe_future(km.kernel_model(kernel_id))
kernel_id = yield maybe_future(km.start_kernel(kernel_name=model['name']))
model = yield maybe_future(km.kernel_model(kernel_id))
location = url_path_join(self.base_url, 'api', 'kernels', url_escape(kernel_id))
self.set_header('Location', location)
self.set_status(201)
Expand All @@ -65,7 +65,7 @@ def get(self, kernel_id):
@gen.coroutine
def delete(self, kernel_id):
km = self.kernel_manager
yield gen.maybe_future(km.shutdown_kernel(kernel_id))
yield maybe_future(km.shutdown_kernel(kernel_id))
self.set_status(204)
self.finish()

Expand All @@ -82,12 +82,12 @@ def post(self, kernel_id, action):
if action == 'restart':

try:
yield gen.maybe_future(km.restart_kernel(kernel_id))
yield maybe_future(km.restart_kernel(kernel_id))
except Exception as e:
self.log.error("Exception restarting kernel", exc_info=True)
self.set_status(500)
else:
model = yield gen.maybe_future(km.kernel_model(kernel_id))
model = yield maybe_future(km.kernel_model(kernel_id))
self.write(json.dumps(model, default=date_default))
self.finish()

Expand Down
6 changes: 3 additions & 3 deletions jupyter_server/services/kernels/kernelmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
Float, Instance, default, validate
)

from jupyter_server.utils import to_os_path, exists
from jupyter_server.utils import maybe_future, to_os_path, exists
from jupyter_server._tz import utcnow, isoformat
from ipython_genutils.py3compat import getcwd

Expand Down Expand Up @@ -168,7 +168,7 @@ def start_kernel(self, kernel_id=None, path=None, **kwargs):
if kernel_id is None:
if path is not None:
kwargs['cwd'] = self.cwd_for_path(path)
kernel_id = yield gen.maybe_future(
kernel_id = yield maybe_future(
super(MappingKernelManager, self).start_kernel(**kwargs)
)
self._kernel_connections[kernel_id] = 0
Expand Down Expand Up @@ -309,7 +309,7 @@ def shutdown_kernel(self, kernel_id, now=False):
def restart_kernel(self, kernel_id):
"""Restart a kernel by kernel_id"""
self._check_kernel_id(kernel_id)
yield gen.maybe_future(super(MappingKernelManager, self).restart_kernel(kernel_id))
yield maybe_future(super(MappingKernelManager, self).restart_kernel(kernel_id))
kernel = self.get_kernel(kernel_id)
# return a Future that will resolve when the kernel has successfully restarted
channel = kernel.connect_shell()
Expand Down
7 changes: 4 additions & 3 deletions jupyter_server/services/kernelspecs/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
from tornado import web, gen

from ...base.handlers import APIHandler
from ...utils import url_path_join, url_unescape
from ...utils import maybe_future, url_path_join, url_unescape



def kernelspec_model(handler, name, spec_dict, resource_dir):
Expand Down Expand Up @@ -62,7 +63,7 @@ def get(self):
model = {}
model['default'] = km.default_kernel_name
model['kernelspecs'] = specs = {}
kspecs = yield gen.maybe_future(ksm.get_all_specs())
kspecs = yield maybe_future(ksm.get_all_specs())
for kernel_name, kernel_info in kspecs.items():
try:
if is_kernelspec_model(kernel_info):
Expand All @@ -85,7 +86,7 @@ def get(self, kernel_name):
ksm = self.kernel_spec_manager
kernel_name = url_unescape(kernel_name)
try:
spec = yield gen.maybe_future(ksm.get_kernel_spec(kernel_name))
spec = yield maybe_future(ksm.get_kernel_spec(kernel_name))
except KeyError:
raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name)
if is_kernelspec_model(spec):
Expand Down
Loading