Merge "Externalize error messages in the API"

This commit is contained in:
Jenkins 2013-08-08 22:26:44 +00:00 committed by Gerrit Code Review
commit 7e1ba511d7
6 changed files with 30 additions and 13 deletions

View File

@ -249,10 +249,12 @@ class ExtensionController(wsgi.Controller):
return dict(extension=self._translate(ext)) return dict(extension=self._translate(ext))
def delete(self, request, id): def delete(self, request, id):
raise webob.exc.HTTPNotFound() msg = _('Resource not found.')
raise webob.exc.HTTPNotFound(msg)
def create(self, request): def create(self, request):
raise webob.exc.HTTPNotFound() msg = _('Resource not found.')
raise webob.exc.HTTPNotFound(msg)
class ExtensionMiddleware(wsgi.Middleware): class ExtensionMiddleware(wsgi.Middleware):

View File

@ -170,7 +170,8 @@ class Controller(object):
try: try:
resource = self._item(request, id, True) resource = self._item(request, id, True)
except exceptions.PolicyNotAuthorized: except exceptions.PolicyNotAuthorized:
raise webob.exc.HTTPNotFound() msg = _('The resource could not be found.')
raise webob.exc.HTTPNotFound(msg)
body = kwargs.pop('body', None) body = kwargs.pop('body', None)
# Explicit comparison with None to distinguish from {} # Explicit comparison with None to distinguish from {}
if body is not None: if body is not None:
@ -291,7 +292,8 @@ class Controller(object):
except exceptions.PolicyNotAuthorized: except exceptions.PolicyNotAuthorized:
# To avoid giving away information, pretend that it # To avoid giving away information, pretend that it
# doesn't exist # doesn't exist
raise webob.exc.HTTPNotFound() msg = _('The resource could not be found.')
raise webob.exc.HTTPNotFound(msg)
def _emulate_bulk_create(self, obj_creator, request, body, parent_id=None): def _emulate_bulk_create(self, obj_creator, request, body, parent_id=None):
objs = [] objs = []
@ -423,7 +425,8 @@ class Controller(object):
except exceptions.PolicyNotAuthorized: except exceptions.PolicyNotAuthorized:
# To avoid giving away information, pretend that it # To avoid giving away information, pretend that it
# doesn't exist # doesn't exist
raise webob.exc.HTTPNotFound() msg = _('The resource could not be found.')
raise webob.exc.HTTPNotFound(msg)
obj_deleter = getattr(self._plugin, action) obj_deleter = getattr(self._plugin, action)
obj_deleter(request.context, id, **kwargs) obj_deleter(request.context, id, **kwargs)
@ -473,7 +476,8 @@ class Controller(object):
except exceptions.PolicyNotAuthorized: except exceptions.PolicyNotAuthorized:
# To avoid giving away information, pretend that it # To avoid giving away information, pretend that it
# doesn't exist # doesn't exist
raise webob.exc.HTTPNotFound() msg = _('The resource could not be found.')
raise webob.exc.HTTPNotFound(msg)
obj_updater = getattr(self._plugin, action) obj_updater = getattr(self._plugin, action)
kwargs = {self._resource: body} kwargs = {self._resource: body}

View File

@ -18,6 +18,7 @@
import webob.dec import webob.dec
from neutron.api.views import versions as versions_view from neutron.api.views import versions as versions_view
from neutron.openstack.common import gettextutils
from neutron.openstack.common import log as logging from neutron.openstack.common import log as logging
from neutron import wsgi from neutron import wsgi
@ -42,7 +43,10 @@ class Versions(object):
] ]
if req.path != '/': if req.path != '/':
return webob.exc.HTTPNotFound() language = req.best_match_language()
msg = _('Unknown API version specified')
msg = gettextutils.get_localized_message(msg, language)
return webob.exc.HTTPNotFound(explanation=msg)
builder = versions_view.get_view_builder(req) builder = versions_view.get_view_builder(req)
versions = [builder.build(version) for version in version_objs] versions = [builder.build(version) for version in version_objs]

View File

@ -66,7 +66,8 @@ class QuotaSetsController(wsgi.Controller):
request.context, QUOTAS.resources, tenant_id) request.context, QUOTAS.resources, tenant_id)
def create(self, request, body=None): def create(self, request, body=None):
raise webob.exc.HTTPNotImplemented() msg = _('POST requests are not supported on this resource.')
raise webob.exc.HTTPNotImplemented(msg)
def index(self, request): def index(self, request):
context = request.context context = request.context

View File

@ -143,11 +143,13 @@ class ConfDriver(object):
@staticmethod @staticmethod
def delete_tenant_quota(context, tenant_id): def delete_tenant_quota(context, tenant_id):
raise webob.exc.HTTPForbidden() msg = _('Access to this resource was denied.')
raise webob.exc.HTTPForbidden(msg)
@staticmethod @staticmethod
def update_quota_limit(context, tenant_id, resource, limit): def update_quota_limit(context, tenant_id, resource, limit):
raise webob.exc.HTTPForbidden() msg = _('Access to this resource was denied.')
raise webob.exc.HTTPForbidden(msg)
class BaseResource(object): class BaseResource(object):

View File

@ -952,7 +952,7 @@ class Router(object):
return self._router return self._router
@staticmethod @staticmethod
@webob.dec.wsgify @webob.dec.wsgify(RequestClass=Request)
def _dispatch(req): def _dispatch(req):
"""Dispatch a Request. """Dispatch a Request.
@ -962,7 +962,10 @@ class Router(object):
""" """
match = req.environ['wsgiorg.routing_args'][1] match = req.environ['wsgiorg.routing_args'][1]
if not match: if not match:
return webob.exc.HTTPNotFound() language = req.best_match_language()
msg = _('The resource could not be found.')
msg = gettextutils.get_localized_message(msg, language)
return webob.exc.HTTPNotFound(explanation=msg)
app = match['controller'] app = match['controller']
return app return app
@ -1167,7 +1170,8 @@ class Controller(object):
try: try:
return serializer.serialize(data, content_type) return serializer.serialize(data, content_type)
except exception.InvalidContentType: except exception.InvalidContentType:
raise webob.exc.HTTPNotAcceptable() msg = _('The requested content type %s is invalid.') % content_type
raise webob.exc.HTTPNotAcceptable(msg)
def _deserialize(self, data, content_type): def _deserialize(self, data, content_type):
"""Deserialize the request body to the specefied content type. """Deserialize the request body to the specefied content type.