Address review in named_servers

from willingc

- consistency of repr/str when logging usernames
- cleanup some attribute declarations
- add comments about db session weirdness
This commit is contained in:
Min RK
2017-07-26 10:47:35 +02:00
parent 194d6c9d4c
commit 3e796b579d
4 changed files with 16 additions and 14 deletions

View File

@@ -226,7 +226,7 @@ class UserNamedServerAPIHandler(APIHandler):
raise web.HTTPError(400, "Named servers are not enabled.") raise web.HTTPError(400, "Named servers are not enabled.")
user = self.find_user(name) user = self.find_user(name)
if user is None: 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() options = self.get_json_body()
yield self.spawn_single_user(user, server_name, options=options) 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.") raise web.HTTPError(400, "Named servers are not enabled.")
user = self.find_user(name) user = self.find_user(name)
if user is None: 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: 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] spawner = user.spawners[server_name]
if spawner._stop_pending: if spawner._stop_pending:
self.set_status(202) self.set_status(202)
return return
if not user.running(server_name): 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 # include notify, so that a server that died is noticed immediately
status = yield spawner.poll_and_notify() status = yield spawner.poll_and_notify()
if status is not None: 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) yield self.stop_single_user(user, server_name)
status = 202 if spawner._stop_pending else 204 status = 202 if spawner._stop_pending else 204
self.set_status(status) self.set_status(status)

View File

@@ -928,9 +928,9 @@ class JupyterHub(Application):
try: try:
yield gen.maybe_future(self.authenticator.add_user(user)) yield gen.maybe_future(self.authenticator.add_user(user))
except Exception: 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: 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) db.delete(user)
else: else:
self.log.warning(dedent(""" self.log.warning(dedent("""
@@ -993,7 +993,7 @@ class JupyterHub(Application):
created = False created = False
if obj is None: if obj is None:
created = True 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) obj = Class(name=name)
db.add(obj) db.add(obj)
db.commit() db.commit()
@@ -1118,7 +1118,7 @@ class JupyterHub(Application):
parts.append('admin') parts.append('admin')
for name, spawner in sorted(user.spawners.items(), key=itemgetter(0)): for name, spawner in sorted(user.spawners.items(), key=itemgetter(0)):
if spawner.server: 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) return ' '.join(parts)
@gen.coroutine @gen.coroutine

View File

@@ -51,11 +51,11 @@ class Spawner(LoggingConfigurable):
_proxy_pending = False _proxy_pending = False
_waiting_for_response = False _waiting_for_response = False
authenticator = Any()
hub = Any()
orm_spawner = Any() orm_spawner = Any()
user = Any() user = Any()
hub = Any()
authenticator = Any()
orm_spawner = Any()
@property @property
def server(self): def server(self):
if self.orm_spawner and self.orm_spawner.server: if self.orm_spawner and self.orm_spawner.server:

View File

@@ -88,6 +88,7 @@ class User(HasTraits):
def _log_default(self): def _log_default(self):
return app_log return app_log
spawners = None
settings = Dict() settings = Dict()
db = Any(allow_none=True) db = Any(allow_none=True)
@@ -103,7 +104,10 @@ class User(HasTraits):
# db session changed, re-get orm User # db session changed, re-get orm User
db = change.new db = change.new
if self._user_id is not None: 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() 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(): for name, spawner in self.spawners.items():
spawner.orm_spawner = self.orm_user.orm_spawners[name] spawner.orm_spawner = self.orm_user.orm_spawners[name]
@@ -116,8 +120,6 @@ class User(HasTraits):
else: else:
self._user_id = None self._user_id = None
spawners = None
@property @property
def authenticator(self): def authenticator(self):
return self.settings.get('authenticator', None) return self.settings.get('authenticator', None)