diff --git a/jupyterhub/apihandlers/users.py b/jupyterhub/apihandlers/users.py index ed5e0aad..10c49c2f 100644 --- a/jupyterhub/apihandlers/users.py +++ b/jupyterhub/apihandlers/users.py @@ -226,7 +226,7 @@ class UserNamedServerAPIHandler(APIHandler): raise web.HTTPError(400, "Named servers are not enabled.") user = self.find_user(name) if user is None: - raise web.HTTPError(404, "No such user %r" % name) + raise web.HTTPError(404, "No such user '%s'" % name) options = self.get_json_body() yield self.spawn_single_user(user, server_name, options=options) @@ -241,19 +241,19 @@ class UserNamedServerAPIHandler(APIHandler): raise web.HTTPError(400, "Named servers are not enabled.") user = self.find_user(name) if user is None: - raise web.HTTPError(404, "No such user %r" % name) + raise web.HTTPError(404, "No such user '%s'" % name) if server_name not in user.spawners: - raise web.HTTPError(404, "%s has no server named %r" % (name, server_name)) + raise web.HTTPError(404, "%s has no server named '%s'" % (name, server_name)) spawner = user.spawners[server_name] if spawner._stop_pending: self.set_status(202) return if not user.running(server_name): - raise web.HTTPError(400, "%s's server %r is not running" % (name, server_name)) + raise web.HTTPError(400, "%s's server %s is not running" % (name, server_name)) # include notify, so that a server that died is noticed immediately status = yield spawner.poll_and_notify() if status is not None: - raise web.HTTPError(400, "%s's server %r is not running" % (name, server_name)) + raise web.HTTPError(400, "%s's server %s is not running" % (name, server_name)) yield self.stop_single_user(user, server_name) status = 202 if spawner._stop_pending else 204 self.set_status(status) diff --git a/jupyterhub/app.py b/jupyterhub/app.py index 433cf096..4b92e88d 100644 --- a/jupyterhub/app.py +++ b/jupyterhub/app.py @@ -928,9 +928,9 @@ class JupyterHub(Application): try: yield gen.maybe_future(self.authenticator.add_user(user)) except Exception: - self.log.exception("Error adding user %r already in db", user.name) + self.log.exception("Error adding user %s already in db", user.name) if self.authenticator.delete_invalid_users: - self.log.warning("Deleting invalid user %r from the Hub database", user.name) + self.log.warning("Deleting invalid user %s from the Hub database", user.name) db.delete(user) else: self.log.warning(dedent(""" @@ -993,7 +993,7 @@ class JupyterHub(Application): created = False if obj is None: created = True - self.log.debug("Adding %s %r to database", kind, name) + self.log.debug("Adding %s %s to database", kind, name) obj = Class(name=name) db.add(obj) db.commit() @@ -1118,7 +1118,7 @@ class JupyterHub(Application): parts.append('admin') for name, spawner in sorted(user.spawners.items(), key=itemgetter(0)): if spawner.server: - parts.append('%r running at %s' % (name, spawner.server)) + parts.append('%s:%s running at %s' % (user.name, name, spawner.server)) return ' '.join(parts) @gen.coroutine diff --git a/jupyterhub/spawner.py b/jupyterhub/spawner.py index 597cf95f..0abada4b 100644 --- a/jupyterhub/spawner.py +++ b/jupyterhub/spawner.py @@ -51,11 +51,11 @@ class Spawner(LoggingConfigurable): _proxy_pending = False _waiting_for_response = False + authenticator = Any() + hub = Any() orm_spawner = Any() user = Any() - hub = Any() - authenticator = Any() - orm_spawner = Any() + @property def server(self): if self.orm_spawner and self.orm_spawner.server: diff --git a/jupyterhub/user.py b/jupyterhub/user.py index 7bc26f88..720c0897 100644 --- a/jupyterhub/user.py +++ b/jupyterhub/user.py @@ -88,6 +88,7 @@ class User(HasTraits): def _log_default(self): return app_log + spawners = None settings = Dict() db = Any(allow_none=True) @@ -103,7 +104,10 @@ class User(HasTraits): # db session changed, re-get orm User db = change.new if self._user_id is not None: + # fetch our orm.User from the new db session self.orm_user = db.query(orm.User).filter(orm.User.id == self._user_id).first() + # update our spawners' ORM objects with the new session, + # which can be found on our new orm_user. for name, spawner in self.spawners.items(): spawner.orm_spawner = self.orm_user.orm_spawners[name] @@ -116,8 +120,6 @@ class User(HasTraits): else: self._user_id = None - spawners = None - @property def authenticator(self): return self.settings.get('authenticator', None)