Improve error handling in webapp /keys
While investigating some problems with key loading, it was very
difficult to discern what exactly went wrong while requesting keys. One
important note is that if a project does not exist, the source drivers
just add it, which leads to 500 crashes later because those empty
projects don't have the public_key attribute.
Change-Id: Ic2eb0372620798dd7ca63e9e8205c39bd4629a92
diff --git a/zuul/webapp.py b/zuul/webapp.py
index acbaf0b..b5fdc0e 100644
--- a/zuul/webapp.py
+++ b/zuul/webapp.py
@@ -108,15 +108,17 @@
def _handle_keys(self, request, path):
m = re.match('/keys/(.*?)/(.*?).pub', path)
if not m:
- raise webob.exc.HTTPNotFound()
+ raise webob.exc.HTTPBadRequest()
source_name = m.group(1)
project_name = m.group(2)
source = self.scheduler.connections.getSource(source_name)
if not source:
- raise webob.exc.HTTPNotFound()
+ raise webob.exc.HTTPNotFound(
+ detail="Cannot locate a source named %s" % source_name)
project = source.getProject(project_name)
- if not project:
- raise webob.exc.HTTPNotFound()
+ if not project or not hasattr(project, 'public_key'):
+ raise webob.exc.HTTPNotFound(
+ detail="Cannot locate a project named %s" % project_name)
pem_public_key = encryption.serialize_rsa_public_key(
project.public_key)