summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorWilliam Wolf <throughnothing@gmail.com>2011-09-15 10:00:38 -0400
committerWilliam Wolf <throughnothing@gmail.com>2011-09-15 10:00:38 -0400
commitbfa8075f659f6fe18eb2442f2ae0722d0fd1c2ff (patch)
treef4ca3c8a9d1a295b80a166b64b7b1d21c4d4a500 /nova/api
parentb7997e4f3257304229045d75e23749520630ed10 (diff)
downloadnova-bfa8075f659f6fe18eb2442f2ae0722d0fd1c2ff.tar.gz
nova-bfa8075f659f6fe18eb2442f2ae0722d0fd1c2ff.tar.xz
nova-bfa8075f659f6fe18eb2442f2ae0722d0fd1c2ff.zip
added build_list to servers controllers and view builder and kept all old tests passing
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/servers.py27
-rw-r--r--nova/api/openstack/views/servers.py22
2 files changed, 44 insertions, 5 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 5affd1f33..02bce1b50 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -75,6 +75,9 @@ class Controller(object):
def _build_view(self, req, instance, is_detail=False):
raise NotImplementedError()
+ def _build_list(self, req, instances, is_detail=False):
+ raise NotImplementedError()
+
def _limit_items(self, items, req):
raise NotImplementedError()
@@ -130,10 +133,7 @@ class Controller(object):
search_opts=search_opts)
limited_list = self._limit_items(instance_list, req)
- servers = [self._build_view(req, inst, is_detail)['server']
- for inst in limited_list]
-
- return dict(servers=servers)
+ return self._build_list(req, limited_list, is_detail=is_detail)
@scheduler_api.redirect_handler
def show(self, req, id):
@@ -589,6 +589,11 @@ class ControllerV10(Controller):
builder = nova.api.openstack.views.servers.ViewBuilderV10(addresses)
return builder.build(instance, is_detail=is_detail)
+ def _build_list(self, req, instances, is_detail=False):
+ addresses = nova.api.openstack.views.addresses.ViewBuilderV10()
+ builder = nova.api.openstack.views.servers.ViewBuilderV10(addresses)
+ return builder.build_list(instances, is_detail=is_detail)
+
def _limit_items(self, items, req):
return common.limited(items, req)
@@ -682,6 +687,20 @@ class ControllerV11(Controller):
return builder.build(instance, is_detail=is_detail)
+ def _build_list(self, req, instances, is_detail=False):
+ params = common.get_pagination_params(req)
+ project_id = getattr(req.environ['nova.context'], 'project_id', '')
+ base_url = req.application_url
+ flavor_builder = nova.api.openstack.views.flavors.ViewBuilderV11(
+ base_url, project_id)
+ image_builder = nova.api.openstack.views.images.ViewBuilderV11(
+ base_url, project_id)
+ addresses_builder = nova.api.openstack.views.addresses.ViewBuilderV11()
+ builder = nova.api.openstack.views.servers.ViewBuilderV11(
+ addresses_builder, flavor_builder, image_builder,
+ base_url, project_id)
+ return builder.build_list(instances, is_detail=is_detail)
+
def _action_change_password(self, input_dict, req, id):
context = req.environ['nova.context']
if (not 'changePassword' in input_dict
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index 473dc9e7e..1228c81f7 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -40,7 +40,7 @@ class ViewBuilder(object):
def __init__(self, addresses_builder):
self.addresses_builder = addresses_builder
- def build(self, inst, is_detail):
+ def build(self, inst, is_detail=False):
"""Return a dict that represenst a server."""
if inst.get('_is_precooked', False):
server = dict(server=inst)
@@ -54,6 +54,16 @@ class ViewBuilder(object):
return server
+ def build_list(self, server_objs, is_detail=False, **kwargs):
+ limit = kwargs.get('limit', None)
+ servers = []
+ servers_links = []
+
+ for server_obj in server_objs:
+ servers.append(self.build(server_obj, is_detail)['server'])
+
+ return dict(servers=servers)
+
def _build_simple(self, inst):
"""Return a simple model of a server."""
return dict(server=dict(id=inst['id'], name=inst['display_name']))
@@ -205,6 +215,16 @@ class ViewBuilderV11(ViewBuilder):
response["links"] = links
+ def build_list(self, server_objs, is_detail=False, **kwargs):
+ limit = kwargs.get('limit', None)
+ servers = []
+ servers_links = []
+
+ for server_obj in server_objs:
+ servers.append(self.build(server_obj, is_detail)['server'])
+
+ return dict(servers=servers)
+
def generate_href(self, server_id):
"""Create an url that refers to a specific server id."""
return os.path.join(self.base_url, self.project_id,