From 56dadf5ea4f0b8153694b25d4a5249e9558fbe00 Mon Sep 17 00:00:00 2001 From: Min RK Date: Wed, 6 Mar 2019 13:09:21 +0100 Subject: [PATCH] require Python 3.5 3.4 doesn't have isawaitable remove unsupported combinations from test matrix --- .travis.yml | 4 --- jupyter_server/files/handlers.py | 5 ---- jupyter_server/services/kernels/handlers.py | 4 --- .../services/sessions/sessionmanager.py | 26 +++++++++---------- .../sessions/tests/test_sessionmanager.py | 11 +++----- jupyter_server/utils.py | 1 - setup.py | 2 +- 7 files changed, 18 insertions(+), 35 deletions(-) diff --git a/.travis.yml b/.travis.yml index fe229ca682..1e0247f472 100644 --- a/.travis.yml +++ b/.travis.yml @@ -68,10 +68,6 @@ matrix: dist: xenial # required for Python >= 3.7 (travis-ci/travis-ci#9069) - python: 3.6 env: GROUP=docs - - python: 3.6 - env: - - GROUP=python - - EXTRA_PIP="tornado<5" after_success: - codecov diff --git a/jupyter_server/files/handlers.py b/jupyter_server/files/handlers.py index d01d9616ed..7ccdad5b68 100644 --- a/jupyter_server/files/handlers.py +++ b/jupyter_server/files/handlers.py @@ -6,16 +6,11 @@ import mimetypes import json from base64 import decodebytes - -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): """serve files via ContentsManager diff --git a/jupyter_server/services/kernels/handlers.py b/jupyter_server/services/kernels/handlers.py index ea66023109..358798408c 100644 --- a/jupyter_server/services/kernels/handlers.py +++ b/jupyter_server/services/kernels/handlers.py @@ -87,11 +87,7 @@ def post(self, kernel_id, action): self.log.error("Exception restarting kernel", exc_info=True) self.set_status(500) else: -<<<<<<< HEAD - model = yield gen.maybe_future(km.kernel_model(kernel_id)) -======= model = yield maybe_future(km.kernel_model(kernel_id)) ->>>>>>> use our own maybe_future self.write(json.dumps(model, default=date_default)) self.finish() diff --git a/jupyter_server/services/sessions/sessionmanager.py b/jupyter_server/services/sessions/sessionmanager.py index fbd24a65e5..50012bc2a1 100644 --- a/jupyter_server/services/sessions/sessionmanager.py +++ b/jupyter_server/services/sessions/sessionmanager.py @@ -24,18 +24,18 @@ class SessionManager(LoggingConfigurable): kernel_manager = Instance('jupyter_server.services.kernels.kernelmanager.MappingKernelManager') contents_manager = Instance('jupyter_server.services.contents.manager.ContentsManager') - + # Session database initialized below _cursor = None _connection = None _columns = {'session_id', 'path', 'name', 'type', 'kernel_id'} - + @property def cursor(self): """Start a cursor and create a database called 'session'""" if self._cursor is None: self._cursor = self.connection.cursor() - self._cursor.execute("""CREATE TABLE session + self._cursor.execute("""CREATE TABLE session (session_id, path, name, type, kernel_id)""") return self._cursor @@ -46,7 +46,7 @@ def connection(self): self._connection = sqlite3.connect(':memory:') self._connection.row_factory = sqlite3.Row return self._connection - + def close(self): """Close the sqlite connection""" if self._cursor is not None: @@ -106,11 +106,11 @@ def start_kernel_for_session(self, session_id, path, name, type, kernel_name): @gen.coroutine def save_session(self, session_id, path=None, name=None, type=None, kernel_id=None): """Saves the items for the session with the given session_id - + Given a session_id (and any other of the arguments), this method creates a row in the sqlite session database that holds the information for a session. - + Parameters ---------- session_id : str @@ -123,7 +123,7 @@ def save_session(self, session_id, path=None, name=None, type=None, kernel_id=No the type of the session kernel_id : str a uuid for the kernel associated with this session - + Returns ------- model : dict @@ -138,7 +138,7 @@ def save_session(self, session_id, path=None, name=None, type=None, kernel_id=No @gen.coroutine def get_session(self, **kwargs): """Returns the model for a particular session. - + Takes a keyword argument and searches for the value in the session database, then returns the rest of the session's info. @@ -151,7 +151,7 @@ def get_session(self, **kwargs): Returns ------- model : dict - returns a dictionary that includes all the information from the + returns a dictionary that includes all the information from the session described by the kwarg. """ if not kwargs: @@ -185,17 +185,17 @@ def get_session(self, **kwargs): @gen.coroutine def update_session(self, session_id, **kwargs): """Updates the values in the session database. - + Changes the values of the session with the given session_id - with the values from the keyword arguments. - + with the values from the keyword arguments. + Parameters ---------- session_id : str a uuid that identifies a session in the sqlite3 database **kwargs : str the key must correspond to a column title in session database, - and the value replaces the current value in the session + and the value replaces the current value in the session with session_id. """ yield maybe_future(self.get_session(session_id=session_id)) diff --git a/jupyter_server/services/sessions/tests/test_sessionmanager.py b/jupyter_server/services/sessions/tests/test_sessionmanager.py index 0a1b9b30dc..7b5d6433c8 100644 --- a/jupyter_server/services/sessions/tests/test_sessionmanager.py +++ b/jupyter_server/services/sessions/tests/test_sessionmanager.py @@ -11,7 +11,6 @@ from jupyter_server.services.contents.manager import ContentsManager from jupyter_server._tz import utcnow, isoformat - class DummyKernel(object): def __init__(self, kernel_name='python'): self.kernel_name = kernel_name @@ -19,17 +18,15 @@ def __init__(self, kernel_name='python'): dummy_date = utcnow() dummy_date_s = isoformat(dummy_date) - class DummyMKM(MappingKernelManager): """MappingKernelManager interface that doesn't start kernels, for testing""" - def __init__(self, *args, **kwargs): super(DummyMKM, self).__init__(*args, **kwargs) self.id_letters = iter(u'ABCDEFGHIJK') def _new_id(self): return next(self.id_letters) - + def start_kernel(self, kernel_id=None, path=None, kernel_name='python', **kwargs): kernel_id = kernel_id or self._new_id() k = self._kernels[kernel_id] = DummyKernel(kernel_name=kernel_name) @@ -43,7 +40,7 @@ def shutdown_kernel(self, kernel_id, now=False): class TestSessionManager(TestCase): - + def setUp(self): self.sm = SessionManager( kernel_manager=DummyMKM(), @@ -62,7 +59,7 @@ def co_add(): sessions.append(session) raise gen.Return(sessions) return self.loop.run_sync(co_add) - + def create_session(self, **kwargs): return self.create_sessions(kwargs)[0] @@ -201,7 +198,7 @@ def test_update_session(self): } } self.assertEqual(model, expected) - + def test_bad_update_session(self): # try to update a session with a bad keyword ~ raise error sm = self.sm diff --git a/jupyter_server/utils.py b/jupyter_server/utils.py index 316cece078..24c0577ec2 100644 --- a/jupyter_server/utils.py +++ b/jupyter_server/utils.py @@ -385,7 +385,6 @@ def _check_pid_posix(pid): def maybe_future(obj): """Like tornado's deprecated gen.maybe_future - but more compatible with asyncio for recent versions of tornado """ diff --git a/setup.py b/setup.py index 8f03bca0eb..9b76f5dcba 100755 --- a/setup.py +++ b/setup.py @@ -95,7 +95,7 @@ 'nbval', 'nose-exclude', 'selenium', 'pytest', 'pytest-cov'], 'test:sys_platform == "win32"': ['nose-exclude'], }, - python_requires='>=3.5', + python_requires = '>=3.5', entry_points = { 'console_scripts': [ 'jupyter-server = jupyter_server.serverapp:main',