Skip to content

Commit a0c96cf

Browse files
minrkkevin-bates
authored andcommitted
use our own maybe_future
instead of the monkeypatch we did to keep the backport patch small requiring tornado 5 simplifies things a ton because tornado.concurrent.Future is asyncio.Future
1 parent a46c37f commit a0c96cf

File tree

11 files changed

+85
-97
lines changed

11 files changed

+85
-97
lines changed

jupyter_server/base/zmqhandlers.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
# Copyright (c) Jupyter Development Team.
55
# Distributed under the terms of the Modified BSD License.
66

7-
import os
87
import json
98
import struct
10-
import warnings
119
import sys
1210
import tornado
1311

@@ -20,6 +18,8 @@
2018
from ipython_genutils.py3compat import cast_unicode
2119

2220
from .handlers import JupyterHandler
21+
from jupyter_server.utils import maybe_future
22+
2323

2424
def serialize_binary_message(msg):
2525
"""serialize a message as a binary blob
@@ -276,10 +276,10 @@ def get(self, *args, **kwargs):
276276
# pre_get can be a coroutine in subclasses
277277
# assign and yield in two step to avoid tornado 3 issues
278278
res = self.pre_get()
279-
yield gen.maybe_future(res)
279+
yield maybe_future(res)
280280
res = super(AuthenticatedZMQStreamHandler, self).get(*args, **kwargs)
281-
yield gen.maybe_future(res)
282-
281+
yield maybe_future(res)
282+
283283
def initialize(self):
284284
self.log.debug("Initializing websocket connection %s", self.request.path)
285285
self.session = Session(config=self.config)

jupyter_server/files/handlers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55

66
import mimetypes
77
import json
8+
from base64 import decodebytes
89

910
from base64 import decodebytes
1011

1112
from tornado import gen, web
1213

1314
from jupyter_server.base.handlers import JupyterHandler
15+
from jupyter_server.utils import maybe_future
16+
1417

1518

1619
class FilesHandler(JupyterHandler):
@@ -48,7 +51,7 @@ def get(self, path, include_body=True):
4851
else:
4952
name = path
5053

51-
model = yield gen.maybe_future(cm.get(path, type='file', content=include_body))
54+
model = yield maybe_future(cm.get(path, type='file', content=include_body))
5255

5356
if self.get_argument("download", False):
5457
self.set_attachment_header(name)

jupyter_server/services/api/handlers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
# Copyright (c) Jupyter Development Team.
44
# Distributed under the terms of the Modified BSD License.
55

6-
from itertools import chain
76
import json
7+
import os
88

99
from tornado import gen, web
1010

1111
from ...base.handlers import JupyterHandler, APIHandler
1212
from jupyter_server._tz import utcfromtimestamp, isoformat
13-
14-
import os
13+
from jupyter_server.utils import maybe_future
1514

1615

1716
class APISpecHandler(web.StaticFileHandler, JupyterHandler):
@@ -39,7 +38,7 @@ def get(self):
3938
started = self.settings.get('started', utcfromtimestamp(0))
4039
started = isoformat(started)
4140

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

52+
5353
default_handlers = [
5454
(r"/api/spec.yaml", APISpecHandler),
5555
(r"/api/status", APIStatusHandler),

jupyter_server/services/contents/handlers.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from tornado import gen, web
1212

13-
from jupyter_server.utils import url_path_join, url_escape
13+
from jupyter_server.utils import url_path_join, url_escape, maybe_future
1414
from jupyter_client.jsonutil import date_default
1515

1616
from jupyter_server.base.handlers import (
@@ -107,8 +107,8 @@ def get(self, path=''):
107107
if content not in {'0', '1'}:
108108
raise web.HTTPError(400, u'Content %r is invalid' % content)
109109
content = int(content)
110-
111-
model = yield gen.maybe_future(self.contents_manager.get(
110+
111+
model = yield maybe_future(self.contents_manager.get(
112112
path=path, type=type, format=format, content=content,
113113
))
114114
validate_model(model, expect_content=content)
@@ -122,7 +122,7 @@ def patch(self, path=''):
122122
model = self.get_json_body()
123123
if model is None:
124124
raise web.HTTPError(400, u'JSON body missing')
125-
model = yield gen.maybe_future(cm.update(model, path))
125+
model = yield maybe_future(cm.update(model, path))
126126
validate_model(model, expect_content=False)
127127
self._finish_model(model)
128128

@@ -133,7 +133,7 @@ def _copy(self, copy_from, copy_to=None):
133133
copy_from=copy_from,
134134
copy_to=copy_to or '',
135135
))
136-
model = yield gen.maybe_future(self.contents_manager.copy(copy_from, copy_to))
136+
model = yield maybe_future(self.contents_manager.copy(copy_from, copy_to))
137137
self.set_status(201)
138138
validate_model(model, expect_content=False)
139139
self._finish_model(model)
@@ -142,7 +142,7 @@ def _copy(self, copy_from, copy_to=None):
142142
def _upload(self, model, path):
143143
"""Handle upload of a new file to path"""
144144
self.log.info(u"Uploading file to %s", path)
145-
model = yield gen.maybe_future(self.contents_manager.new(model, path))
145+
model = yield maybe_future(self.contents_manager.new(model, path))
146146
self.set_status(201)
147147
validate_model(model, expect_content=False)
148148
self._finish_model(model)
@@ -151,7 +151,7 @@ def _upload(self, model, path):
151151
def _new_untitled(self, path, type='', ext=''):
152152
"""Create a new, empty untitled entity"""
153153
self.log.info(u"Creating new %s in %s", type or 'file', path)
154-
model = yield gen.maybe_future(self.contents_manager.new_untitled(path=path, type=type, ext=ext))
154+
model = yield maybe_future(self.contents_manager.new_untitled(path=path, type=type, ext=ext))
155155
self.set_status(201)
156156
validate_model(model, expect_content=False)
157157
self._finish_model(model)
@@ -161,8 +161,8 @@ def _save(self, model, path):
161161
"""Save an existing file."""
162162
chunk = model.get("chunk", None)
163163
if not chunk or chunk == -1: # Avoid tedious log information
164-
self.log.info(u"Saving file at %s", path)
165-
model = yield gen.maybe_future(self.contents_manager.save(model, path))
164+
self.log.info(u"Saving file at %s", path)
165+
model = yield maybe_future(self.contents_manager.save(model, path))
166166
validate_model(model, expect_content=False)
167167
self._finish_model(model)
168168

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

183183
cm = self.contents_manager
184184

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

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

@@ -220,21 +220,21 @@ def put(self, path=''):
220220
if model:
221221
if model.get('copy_from'):
222222
raise web.HTTPError(400, "Cannot copy with PUT, only POST")
223-
exists = yield gen.maybe_future(self.contents_manager.file_exists(path))
223+
exists = yield maybe_future(self.contents_manager.file_exists(path))
224224
if exists:
225-
yield gen.maybe_future(self._save(model, path))
225+
yield maybe_future(self._save(model, path))
226226
else:
227-
yield gen.maybe_future(self._upload(model, path))
227+
yield maybe_future(self._upload(model, path))
228228
else:
229-
yield gen.maybe_future(self._new_untitled(path))
229+
yield maybe_future(self._new_untitled(path))
230230

231231
@web.authenticated
232232
@gen.coroutine
233233
def delete(self, path=''):
234234
"""delete a file in the given path"""
235235
cm = self.contents_manager
236236
self.log.warning('delete %s', path)
237-
yield gen.maybe_future(cm.delete(path))
237+
yield maybe_future(cm.delete(path))
238238
self.set_status(204)
239239
self.finish()
240240

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

@@ -255,7 +255,7 @@ def get(self, path=''):
255255
def post(self, path=''):
256256
"""post creates a new checkpoint"""
257257
cm = self.contents_manager
258-
checkpoint = yield gen.maybe_future(cm.create_checkpoint(path))
258+
checkpoint = yield maybe_future(cm.create_checkpoint(path))
259259
data = json.dumps(checkpoint, default=date_default)
260260
location = url_path_join(self.base_url, 'api/contents',
261261
url_escape(path), 'checkpoints', url_escape(checkpoint['id']))
@@ -271,7 +271,7 @@ class ModifyCheckpointsHandler(APIHandler):
271271
def post(self, path, checkpoint_id):
272272
"""post restores a file from a checkpoint"""
273273
cm = self.contents_manager
274-
yield gen.maybe_future(cm.restore_checkpoint(checkpoint_id, path))
274+
yield maybe_future(cm.restore_checkpoint(checkpoint_id, path))
275275
self.set_status(204)
276276
self.finish()
277277

@@ -280,7 +280,7 @@ def post(self, path, checkpoint_id):
280280
def delete(self, path, checkpoint_id):
281281
"""delete clears a checkpoint for a given file"""
282282
cm = self.contents_manager
283-
yield gen.maybe_future(cm.delete_checkpoint(checkpoint_id, path))
283+
yield maybe_future(cm.delete_checkpoint(checkpoint_id, path))
284284
self.set_status(204)
285285
self.finish()
286286

@@ -307,7 +307,7 @@ class TrustNotebooksHandler(JupyterHandler):
307307
@gen.coroutine
308308
def post(self,path=''):
309309
cm = self.contents_manager
310-
yield gen.maybe_future(cm.trust_notebook(path))
310+
yield maybe_future(cm.trust_notebook(path))
311311
self.set_status(201)
312312
self.finish()
313313
#-----------------------------------------------------------------------------

jupyter_server/services/kernels/handlers.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
from tornado.concurrent import Future
1515
from tornado.ioloop import IOLoop
1616

17+
from jupyter_client import protocol_version as client_protocol_version
1718
from jupyter_client.jsonutil import date_default
1819
from ipython_genutils.py3compat import cast_unicode
19-
from jupyter_server.utils import url_path_join, url_escape
20+
from jupyter_server.utils import url_path_join, url_escape, maybe_future
2021

2122
from ...base.handlers import APIHandler
2223
from ...base.zmqhandlers import AuthenticatedZMQStreamHandler, deserialize_binary_message
2324

24-
from jupyter_client import protocol_version as client_protocol_version
2525

2626

2727
class MainKernelHandler(APIHandler):
@@ -30,7 +30,7 @@ class MainKernelHandler(APIHandler):
3030
@gen.coroutine
3131
def get(self):
3232
km = self.kernel_manager
33-
kernels = yield gen.maybe_future(km.list_kernels())
33+
kernels = yield maybe_future(km.list_kernels())
3434
self.finish(json.dumps(kernels, default=date_default))
3535

3636
@web.authenticated
@@ -45,8 +45,8 @@ def post(self):
4545
else:
4646
model.setdefault('name', km.default_kernel_name)
4747

48-
kernel_id = yield gen.maybe_future(km.start_kernel(kernel_name=model['name']))
49-
model = yield gen.maybe_future(km.kernel_model(kernel_id))
48+
kernel_id = yield maybe_future(km.start_kernel(kernel_name=model['name']))
49+
model = yield maybe_future(km.kernel_model(kernel_id))
5050
location = url_path_join(self.base_url, 'api', 'kernels', url_escape(kernel_id))
5151
self.set_header('Location', location)
5252
self.set_status(201)
@@ -65,7 +65,7 @@ def get(self, kernel_id):
6565
@gen.coroutine
6666
def delete(self, kernel_id):
6767
km = self.kernel_manager
68-
yield gen.maybe_future(km.shutdown_kernel(kernel_id))
68+
yield maybe_future(km.shutdown_kernel(kernel_id))
6969
self.set_status(204)
7070
self.finish()
7171

@@ -82,12 +82,16 @@ def post(self, kernel_id, action):
8282
if action == 'restart':
8383

8484
try:
85-
yield gen.maybe_future(km.restart_kernel(kernel_id))
85+
yield maybe_future(km.restart_kernel(kernel_id))
8686
except Exception as e:
8787
self.log.error("Exception restarting kernel", exc_info=True)
8888
self.set_status(500)
8989
else:
90+
<<<<<<< HEAD
9091
model = yield gen.maybe_future(km.kernel_model(kernel_id))
92+
=======
93+
model = yield maybe_future(km.kernel_model(kernel_id))
94+
>>>>>>> use our own maybe_future
9195
self.write(json.dumps(model, default=date_default))
9296
self.finish()
9397

jupyter_server/services/kernels/kernelmanager.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
Float, Instance, default, validate
2323
)
2424

25-
from jupyter_server.utils import to_os_path, exists
25+
from jupyter_server.utils import maybe_future, to_os_path, exists
2626
from jupyter_server._tz import utcnow, isoformat
2727
from ipython_genutils.py3compat import getcwd
2828

@@ -168,7 +168,7 @@ def start_kernel(self, kernel_id=None, path=None, **kwargs):
168168
if kernel_id is None:
169169
if path is not None:
170170
kwargs['cwd'] = self.cwd_for_path(path)
171-
kernel_id = yield gen.maybe_future(
171+
kernel_id = yield maybe_future(
172172
super(MappingKernelManager, self).start_kernel(**kwargs)
173173
)
174174
self._kernel_connections[kernel_id] = 0
@@ -309,7 +309,7 @@ def shutdown_kernel(self, kernel_id, now=False):
309309
def restart_kernel(self, kernel_id):
310310
"""Restart a kernel by kernel_id"""
311311
self._check_kernel_id(kernel_id)
312-
yield gen.maybe_future(super(MappingKernelManager, self).restart_kernel(kernel_id))
312+
yield maybe_future(super(MappingKernelManager, self).restart_kernel(kernel_id))
313313
kernel = self.get_kernel(kernel_id)
314314
# return a Future that will resolve when the kernel has successfully restarted
315315
channel = kernel.connect_shell()

jupyter_server/services/kernelspecs/handlers.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
from tornado import web, gen
1515

1616
from ...base.handlers import APIHandler
17-
from ...utils import url_path_join, url_unescape
17+
from ...utils import maybe_future, url_path_join, url_unescape
18+
1819

1920

2021
def kernelspec_model(handler, name, spec_dict, resource_dir):
@@ -62,7 +63,7 @@ def get(self):
6263
model = {}
6364
model['default'] = km.default_kernel_name
6465
model['kernelspecs'] = specs = {}
65-
kspecs = yield gen.maybe_future(ksm.get_all_specs())
66+
kspecs = yield maybe_future(ksm.get_all_specs())
6667
for kernel_name, kernel_info in kspecs.items():
6768
try:
6869
if is_kernelspec_model(kernel_info):
@@ -85,7 +86,7 @@ def get(self, kernel_name):
8586
ksm = self.kernel_spec_manager
8687
kernel_name = url_unescape(kernel_name)
8788
try:
88-
spec = yield gen.maybe_future(ksm.get_kernel_spec(kernel_name))
89+
spec = yield maybe_future(ksm.get_kernel_spec(kernel_name))
8990
except KeyError:
9091
raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name)
9192
if is_kernelspec_model(spec):

0 commit comments

Comments
 (0)