diff --git a/jupyterhub/apihandlers/users.py b/jupyterhub/apihandlers/users.py index 9fea47bd..9ec1fb0e 100644 --- a/jupyterhub/apihandlers/users.py +++ b/jupyterhub/apihandlers/users.py @@ -17,7 +17,7 @@ class BaseUserHandler(APIHandler): return { 'name': user.name, 'admin': user.admin, - 'server': user.server.base_url if user.server and not (user.spawn_pending or user.stop_pending) else None, + 'server': user.server.base_url if user.running and not (user.spawn_pending or user.stop_pending) else None, 'last_activity': user.last_activity.isoformat(), } @@ -150,7 +150,7 @@ class UserServerAPIHandler(BaseUserHandler): if user.stop_pending: self.set_status(202) return - if user.spawner is None: + if not user.running: raise web.HTTPError(400, "%s's server is not running" % name) status = yield user.spawner.poll() if status is not None: @@ -175,8 +175,8 @@ class UserAdminAccessAPIHandler(BaseUserHandler): user = self.find_user(name) if user is None: raise web.HTTPError(404) - if user.server is None: - raise web.HTTPError(400, "%s has no server running" % name) + if not user.running: + raise web.HTTPError(400, "%s's server is not running" % name) self.set_server_cookie(user) diff --git a/jupyterhub/orm.py b/jupyterhub/orm.py index 4f9a28de..959bf052 100644 --- a/jupyterhub/orm.py +++ b/jupyterhub/orm.py @@ -267,6 +267,15 @@ class User(Base): name=self.name, ) + @property + def running(self): + """property for whether a user has a running server""" + if self.spawner is None: + return False + if self.server is None: + return False + return True + def new_api_token(self): """Create a new API token""" assert self.id is not None diff --git a/share/jupyter/hub/templates/admin.html b/share/jupyter/hub/templates/admin.html index 7e072f01..99725deb 100644 --- a/share/jupyter/hub/templates/admin.html +++ b/share/jupyter/hub/templates/admin.html @@ -42,11 +42,11 @@