summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-09-14 22:55:25 +0000
committerGerrit Code Review <review@openstack.org>2012-09-14 22:55:25 +0000
commitcdcd8857f0c1ef36e2c08bcabcc29231c1c87881 (patch)
tree01ab357d0e1680c8c9ab17a7e90173fe7b9268d5 /nova/api
parentd41b93267f2c0e31fa94c8ea185864b631142df4 (diff)
parentd1ad73eebd28f33c98b56c033c2c4d305d66d5dc (diff)
downloadnova-cdcd8857f0c1ef36e2c08bcabcc29231c1c87881.tar.gz
nova-cdcd8857f0c1ef36e2c08bcabcc29231c1c87881.tar.xz
nova-cdcd8857f0c1ef36e2c08bcabcc29231c1c87881.zip
Merge "Add entity body validation helper"
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/compute/servers.py13
-rw-r--r--nova/api/openstack/wsgi.py17
2 files changed, 19 insertions, 11 deletions
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index ba23cb50b..1a8fbda41 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -613,10 +613,7 @@ class Controller(wsgi.Controller):
@wsgi.deserializers(xml=CreateDeserializer)
def create(self, req, body):
"""Creates a new server for a given user."""
- if not body:
- raise exc.HTTPUnprocessableEntity()
-
- if not 'server' in body:
+ if not self.is_valid_body(body, 'server'):
raise exc.HTTPUnprocessableEntity()
body['server']['key_name'] = self._get_key_name(req, body)
@@ -815,13 +812,7 @@ class Controller(wsgi.Controller):
@wsgi.serializers(xml=ServerTemplate)
def update(self, req, id, body):
"""Update server then pass on to version-specific controller."""
- if len(req.body) == 0:
- raise exc.HTTPUnprocessableEntity()
-
- if not body:
- raise exc.HTTPUnprocessableEntity()
-
- if not 'server' in body:
+ if not self.is_valid_body(body, 'server'):
raise exc.HTTPUnprocessableEntity()
ctxt = req.environ['nova.context']
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py
index 658b59645..a9fa3847a 100644
--- a/nova/api/openstack/wsgi.py
+++ b/nova/api/openstack/wsgi.py
@@ -1102,6 +1102,23 @@ class Controller(object):
else:
self._view_builder = None
+ @staticmethod
+ def is_valid_body(body, entity_name):
+ if not (body and entity_name in body):
+ return False
+
+ def is_dict(d):
+ try:
+ d.get(None)
+ return True
+ except AttributeError:
+ return False
+
+ if not is_dict(body[entity_name]):
+ return False
+
+ return True
+
class Fault(webob.exc.HTTPException):
"""Wrap webob.exc.HTTPException to provide API friendly response."""