mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-15 14:03:02 +00:00
consolidate progress url
and include it in server models
This commit is contained in:
@@ -97,6 +97,22 @@ class APIHandler(BaseHandler):
|
||||
'message': message or status_message,
|
||||
}))
|
||||
|
||||
def server_model(self, spawner):
|
||||
"""Get the JSON model for a Spawner"""
|
||||
last_activity = spawner.orm_spawner.last_activity
|
||||
# don't call isoformat if last_activity is None
|
||||
if last_activity:
|
||||
last_activity = isoformat(last_activity)
|
||||
|
||||
return {
|
||||
'name': spawner.name,
|
||||
'last_activity': last_activity,
|
||||
'started': isoformat(spawner.orm_spawner.started),
|
||||
'pending': spawner.pending,
|
||||
'url': url_path_join(spawner.user.url, spawner.name, '/'),
|
||||
'progress_url': spawner._progress_url,
|
||||
}
|
||||
|
||||
def user_model(self, user):
|
||||
"""Get the JSON model for a User object"""
|
||||
if isinstance(user, orm.User):
|
||||
@@ -114,33 +130,23 @@ class APIHandler(BaseHandler):
|
||||
'admin': user.admin,
|
||||
'groups': [ g.name for g in user.groups ],
|
||||
'server': user.url if user.running else None,
|
||||
'progress_url': user.spawner._progress_url if user.active else None,
|
||||
'pending': None,
|
||||
'created': isoformat(user.created),
|
||||
'last_activity': last_activity,
|
||||
'started': None,
|
||||
}
|
||||
if '' in user.spawners:
|
||||
spawner = user.spawners['']
|
||||
model['pending'] = spawner.pending or None
|
||||
if spawner.active and spawner.orm_spawner.started:
|
||||
model['started'] = isoformat(spawner.orm_spawner.started)
|
||||
server_model = self.server_model(user.spawners[''])
|
||||
# copy some values from the default server to the user model
|
||||
for key in ('started', 'pending', 'progress_url'):
|
||||
model[key] = server_model[key]
|
||||
|
||||
if self.allow_named_servers:
|
||||
servers = model['servers'] = {}
|
||||
for name, spawner in user.spawners.items():
|
||||
if spawner.ready:
|
||||
last_activity = spawner.orm_spawner.last_activity
|
||||
if last_activity:
|
||||
last_activity = isoformat(last_activity)
|
||||
servers[name] = s = {
|
||||
'name': name,
|
||||
'last_activity': last_activity,
|
||||
'started': isoformat(spawner.orm_spawner.started),
|
||||
}
|
||||
if spawner.pending:
|
||||
s['pending'] = spawner.pending
|
||||
if spawner.server:
|
||||
s['url'] = url_path_join(user.url, name, '/')
|
||||
servers[name] = self.server_model(spawner)
|
||||
return model
|
||||
|
||||
def group_model(self, group):
|
||||
|
@@ -887,13 +887,6 @@ class UserSpawnHandler(BaseHandler):
|
||||
pass
|
||||
|
||||
# we may have waited above, check pending again:
|
||||
url_parts = [self.hub.base_url, 'api/users', user.escaped_name]
|
||||
if spawner.name:
|
||||
url_parts.extend(['servers', spawner.name, 'progress'])
|
||||
else:
|
||||
url_parts.extend(['server/progress'])
|
||||
progress_url = url_path_join(*url_parts)
|
||||
|
||||
if spawner.pending:
|
||||
self.log.info("%s is pending %s", spawner._log_name, spawner.pending)
|
||||
# spawn has started, but not finished
|
||||
@@ -902,7 +895,7 @@ class UserSpawnHandler(BaseHandler):
|
||||
html = self.render_template(
|
||||
"spawn_pending.html",
|
||||
user=user,
|
||||
progress_url=progress_url,
|
||||
progress_url=spawner._progress_url,
|
||||
)
|
||||
self.finish(html)
|
||||
return
|
||||
@@ -934,7 +927,7 @@ class UserSpawnHandler(BaseHandler):
|
||||
html = self.render_template(
|
||||
"spawn_pending.html",
|
||||
user=user,
|
||||
progress_url=progress_url,
|
||||
progress_url=spawner._progress_url,
|
||||
)
|
||||
self.finish(html)
|
||||
return
|
||||
|
@@ -692,6 +692,10 @@ class Spawner(LoggingConfigurable):
|
||||
if self.pre_spawn_hook:
|
||||
return self.pre_spawn_hook(self)
|
||||
|
||||
@property
|
||||
def _progress_url(self):
|
||||
return self.user.progress_url(self.name)
|
||||
|
||||
@async_generator
|
||||
async def _generate_progress(self):
|
||||
"""Private wrapper of progress generator
|
||||
|
@@ -320,6 +320,15 @@ class User:
|
||||
else:
|
||||
return self.base_url
|
||||
|
||||
def progress_url(self, server_name=''):
|
||||
"""API URL for progress endpoint for a server with a given name"""
|
||||
url_parts = [self.settings['hub'].base_url, 'api/users', self.escaped_name]
|
||||
if server_name:
|
||||
url_parts.extend(['servers', server_name, 'progress'])
|
||||
else:
|
||||
url_parts.extend(['server/progress'])
|
||||
return url_path_join(*url_parts)
|
||||
|
||||
async def spawn(self, server_name='', options=None):
|
||||
"""Start the user's spawner
|
||||
|
||||
|
Reference in New Issue
Block a user