diff --git a/jupyterhub/apihandlers/base.py b/jupyterhub/apihandlers/base.py index dd34679f..cc010684 100644 --- a/jupyterhub/apihandlers/base.py +++ b/jupyterhub/apihandlers/base.py @@ -101,7 +101,8 @@ class APIHandler(BaseHandler): model['pending'] = 'spawn' elif user.spawners['']._stop_pending: model['pending'] = 'stop' - # named servers + return model + # TODO: named servers servers = model['servers'] = {} for name, spawner in user.spawners.items(): if False and user.running(name): diff --git a/jupyterhub/tests/test_api.py b/jupyterhub/tests/test_api.py index feb62d3b..64ce04ae 100644 --- a/jupyterhub/tests/test_api.py +++ b/jupyterhub/tests/test_api.py @@ -405,7 +405,7 @@ def test_spawn(app, io_loop): data=json.dumps(options), ) assert r.status_code == 201 - assert 'pid' in user.state + assert 'pid' in user.state[''] app_user = get_app_user(app, name) assert app_user.spawner is not None assert app_user.spawner.user_options == options @@ -434,7 +434,7 @@ def test_spawn(app, io_loop): r = api_request(app, 'users', name, 'server', method='delete') assert r.status_code == 204 - assert 'pid' not in user.state + assert 'pid' not in user.state.get('', {}) status = io_loop.run_sync(app_user.spawner.poll) assert status == 0 @@ -473,7 +473,7 @@ def test_slow_spawn(app, io_loop, no_patience, request): @gen.coroutine def wait_stop(): - while app_user.pawner._stop_pending: + while app_user.spawner._stop_pending: yield gen.sleep(0.1) r = api_request(app, 'users', name, 'server', method='delete') @@ -532,7 +532,7 @@ def test_cookie(app): user = add_user(db, app=app, name=name) r = api_request(app, 'users', name, 'server', method='post') assert r.status_code == 201 - assert 'pid' in user.state + assert 'pid' in user.state[''] app_user = get_app_user(app, name) cookies = app.login_user(name) diff --git a/jupyterhub/tests/test_spawner.py b/jupyterhub/tests/test_spawner.py index 6ca5581d..ed06ca7a 100644 --- a/jupyterhub/tests/test_spawner.py +++ b/jupyterhub/tests/test_spawner.py @@ -153,8 +153,10 @@ def test_spawner_poll(db, io_loop): proc = first_spawner.proc status = io_loop.run_sync(first_spawner.poll) assert status is None - user.state = first_spawner.get_state() - assert 'pid' in user.state + if user.state is None: + user.state = {} + user.state[''] = first_spawner.get_state() + assert 'pid' in user.state[''] # create a new Spawner, loading from state of previous spawner = new_spawner(db, user=first_spawner.user) diff --git a/jupyterhub/user.py b/jupyterhub/user.py index 7872674f..93e0af8e 100644 --- a/jupyterhub/user.py +++ b/jupyterhub/user.py @@ -391,7 +391,8 @@ class User(HasTraits): self.state = spawner.get_state() self.last_activity = datetime.utcnow() # remove server entry from db - self.db.delete(spawner.server.orm_server) + if spawner.server is not None: + self.db.delete(spawner.server.orm_server) spawner.server = None if not spawner.will_resume: # find and remove the API token if the spawner isn't