diff options
author | Stephen Finucane <stephenfin@redhat.com> | 2019-03-28 10:50:52 +0000 |
---|---|---|
committer | Stephen Finucane <stephenfin@redhat.com> | 2019-03-28 13:42:22 +0000 |
commit | b5e46d058a792073eed83202e83b1c7493bd811a (patch) | |
tree | 1f3ee905e1524a1fa0fb6dbdea94813a4c18e34a | |
parent | 33fb2dbdd31e1f5aa90f2536b3d3d032679b81da (diff) | |
download | zuul-b5e46d058a792073eed83202e83b1c7493bd811a.tar.gz |
web: Add '/' API route
At present, navigating to '/api' will redirect you to '/status'. This
makes things a little less discoverable than they should be.
Documentation can solve a lot of problems here but simply returning
_something_ to let people know the API lives here is a good first step.
File permissions for the 'tests/unit/test_web.py' file are fixed.
Change-Id: I34b8890146db8adbf54f5b7e0c2fabb4ba819ec2
-rw-r--r--[-rwxr-xr-x] | tests/unit/test_web.py | 8 | ||||
-rwxr-xr-x | zuul/web/__init__.py | 33 |
2 files changed, 41 insertions, 0 deletions
diff --git a/tests/unit/test_web.py b/tests/unit/test_web.py index 211f7cb1d..58edc49f5 100755..100644 --- a/tests/unit/test_web.py +++ b/tests/unit/test_web.py @@ -91,6 +91,14 @@ class BaseTestWeb(ZuulTestCase): class TestWeb(BaseTestWeb): + def test_web_index(self): + "Test that we can retrieve the index page" + resp = self.get_url('api') + data = resp.json() + # no point checking the whole thing; just make sure _something_ we + # expect is here + self.assertIn('info', data) + def test_web_status(self): "Test that we can retrieve JSON status info" self.add_base_changes() diff --git a/zuul/web/__init__.py b/zuul/web/__init__.py index f53358213..140d6f380 100755 --- a/zuul/web/__init__.py +++ b/zuul/web/__init__.py @@ -208,6 +208,37 @@ class ZuulWebAPI(object): @cherrypy.expose @cherrypy.tools.json_out(content_type='application/json; charset=utf-8') + def index(self): + return { + 'info': '/api/info', + 'connections': '/api/connections', + 'tenants': '/api/tenants', + 'tenant_info': '/api/tenant/{tenant}/info', + 'status': '/api/tenant/{tenant}/status', + 'status_change': '/api/tenant/{tenant}/status/change/{change}', + 'jobs': '/api/tenant/{tenant}/jobs', + 'job': '/api/tenant/{tenant}/job/{job_name}', + 'projects': '/api/tenant/{tenant}/projects', + 'project': '/api/tenant/{tenant}/project/{project:.*}', + 'project_freeze_jobs': '/api/tenant/{tenant}/pipeline/{pipeline}/' + 'project/{project:.*}/branch/{branch:.*}/' + 'freeze-jobs', + 'pipelines': '/api/tenant/{tenant}/pipelines', + 'labels': '/api/tenant/{tenant}/labels', + 'nodes': '/api/tenant/{tenant}/nodes', + 'key': '/api/tenant/{tenant}/key/{project:.*}.pub', + 'project_ssh_key': '/api/tenant/{tenant}/project-ssh-key/' + '{project:.*}.pub', + 'console_stream': '/api/tenant/{tenant}/console-stream', + 'builds': '/api/tenant/{tenant}/builds', + 'build': '/api/tenant/{tenant}/build/{uuid}', + 'buildsets': '/api/tenant/{tenant}/buildsets', + 'buildset': '/api/tenant/{tenant}/buildset/{uuid}', + 'config_errors': '/api/tenant/{tenant}/config-errors', + } + + @cherrypy.expose + @cherrypy.tools.json_out(content_type='application/json; charset=utf-8') def info(self): return self._handleInfo(self.zuulweb.info) @@ -707,6 +738,8 @@ class ZuulWeb(object): route_map = cherrypy.dispatch.RoutesDispatcher() api = ZuulWebAPI(self) + route_map.connect('api', '/api', + controller=api, action='index') route_map.connect('api', '/api/info', controller=api, action='info') route_map.connect('api', '/api/connections', |