summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorMichael Gundlach <michael.gundlach@rackspace.com>2010-09-01 10:50:31 -0400
committerMichael Gundlach <michael.gundlach@rackspace.com>2010-09-01 10:50:31 -0400
commit544b73d35895ac79af910a40590095780f224abb (patch)
treebb4d5e4f95cb7d3d661ff48cf5afcd76fe2f0528 /nova/api
parentf22c693e4cf638ef5278d9db444da2c4a99baae4 (diff)
Return error Responses properly, and don't muck with req.params -- make a copy instead
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/ec2/__init__.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/nova/api/ec2/__init__.py b/nova/api/ec2/__init__.py
index b4a1894cc..248a66f55 100644
--- a/nova/api/ec2/__init__.py
+++ b/nova/api/ec2/__init__.py
@@ -22,6 +22,7 @@ Starting point for routing EC2 requests
import logging
import routes
+import webob
import webob.dec
import webob.exc
@@ -46,8 +47,7 @@ class Authenticate(wsgi.Middleware):
@webob.dec.wsgify
def __call__(self, req):
- #TODO(gundlach): where do arguments come from?
- args = self.request.arguments
+ args = dict(req.params)
# Read request signature.
try:
@@ -92,8 +92,9 @@ class Authenticate(wsgi.Middleware):
_log.debug('arg: %s\t\tval: %s' % (key, value))
# Authenticated!
- req.environ['ec2.action'] = action
req.environ['ec2.context'] = APIRequestContext(user, project)
+ req.environ['ec2.action'] = action
+ req.environ['ec2.action_args'] = args
return self.application
@@ -119,24 +120,24 @@ class Router(wsgi.Application):
try:
controller = self.controllers[controller_name]
except KeyError:
- self._error('unhandled', 'no controller named %s' % controller_name)
- return
+ return self._error('unhandled', 'no controller named %s' % controller_name)
api_request = APIRequest(controller, req.environ['ec2.action'])
context = req.environ['ec2.context']
try:
- return api_request.send(context, **args)
+ return api_request.send(context, **req.environ['ec2.action_args'])
except exception.ApiError as ex:
- self._error(req, type(ex).__name__ + "." + ex.code, ex.message)
+ return self._error(req, type(ex).__name__ + "." + ex.code, ex.message)
# TODO(vish): do something more useful with unknown exceptions
except Exception as ex:
- self._error(type(ex).__name__, str(ex))
+ return self._error(type(ex).__name__, str(ex))
def _error(self, req, code, message):
- req.status = 400
- req.headers['Content-Type'] = 'text/xml'
- req.response = ('<?xml version="1.0"?>\n'
+ resp = webob.Response()
+ resp.status = 400
+ resp.headers['Content-Type'] = 'text/xml'
+ resp.body = ('<?xml version="1.0"?>\n'
'<Response><Errors><Error><Code>%s</Code>'
'<Message>%s</Message></Error></Errors>'
'<RequestID>?</RequestID></Response>') % (code, message))
-
+ return resp