diff --git a/jupyterhub/apihandlers/base.py b/jupyterhub/apihandlers/base.py index 536dbbff..7b622606 100644 --- a/jupyterhub/apihandlers/base.py +++ b/jupyterhub/apihandlers/base.py @@ -103,7 +103,7 @@ class APIHandler(BaseHandler): 'name': spawner.name, 'last_activity': isoformat(spawner.orm_spawner.last_activity), 'started': isoformat(spawner.orm_spawner.started), - 'pending': spawner.pending, + 'pending': spawner.pending or None, 'url': url_path_join(spawner.user.url, spawner.name, '/'), 'progress_url': spawner._progress_url, } @@ -119,7 +119,7 @@ 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, + 'progress_url': user.progress_url(''), 'pending': None, 'created': isoformat(user.created), 'started': None, @@ -128,7 +128,7 @@ class APIHandler(BaseHandler): if '' in user.spawners: 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'): + for key in ('started', 'pending'): model[key] = server_model[key] if self.allow_named_servers: diff --git a/jupyterhub/tests/test_api.py b/jupyterhub/tests/test_api.py index 5123236d..defc5e28 100644 --- a/jupyterhub/tests/test_api.py +++ b/jupyterhub/tests/test_api.py @@ -201,10 +201,17 @@ def normalize_user(user): """ for key in ('created', 'last_activity', 'started'): user[key] = normalize_timestamp(user[key]) + if user['progress_url']: + user['progress_url'] = re.sub( + r'.*/hub/api', + 'PREFIX/hub/api', + user['progress_url'], + ) if 'servers' in user: for server in user['servers'].values(): for key in ('started', 'last_activity'): server[key] = normalize_timestamp(server[key]) + server['progress_url'] = re.sub(r'.*/hub/api', 'PREFIX/hub/api', server['progress_url']) return user def fill_user(model): @@ -221,6 +228,7 @@ def fill_user(model): model.setdefault('created', TIMESTAMP) model.setdefault('last_activity', TIMESTAMP) model.setdefault('started', None) + model.setdefault('progress_url', 'PREFIX/hub/api/users/{name}/server/progress'.format(**model)) return model diff --git a/jupyterhub/tests/test_named_servers.py b/jupyterhub/tests/test_named_servers.py index 78b1aa51..f6c1e757 100644 --- a/jupyterhub/tests/test_named_servers.py +++ b/jupyterhub/tests/test_named_servers.py @@ -41,6 +41,8 @@ def test_default_server(app, named_servers): 'started': TIMESTAMP, 'last_activity': TIMESTAMP, 'url': user.url, + 'pending': None, + 'progress_url': 'PREFIX/hub/api/users/{}/server/progress'.format(username), }, }, }) @@ -96,6 +98,9 @@ def test_create_named_server(app, named_servers): 'started': TIMESTAMP, 'last_activity': TIMESTAMP, 'url': url_path_join(user.url, name, '/'), + 'pending': None, + 'progress_url': 'PREFIX/hub/api/users/{}/servers/{}/progress'.format( + username, servername), } for name in [servername] }, @@ -124,13 +129,7 @@ def test_delete_named_server(app, named_servers): assert user_model == fill_user({ 'name': username, 'auth_state': None, - 'servers': { - name: { - 'name': name, - 'url': url_path_join(user.url, name, '/'), - } - for name in [] - }, + 'servers': {}, }) @pytest.mark.gen_test