summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-01-24 07:11:26 +0000
committerGerrit Code Review <review@openstack.org>2012-01-24 07:11:26 +0000
commit7d9d2ec38747e6683ec97cd7c1af2e98eb82ea56 (patch)
treec181dbd149fdd8b7e912b0afed635207c46823b5 /nova/api
parentb8f78573138ef74ebff0d28f480f5f84e3d7a7d3 (diff)
parent48f4e140ec929d8abec6145088df9db758ecda9a (diff)
downloadnova-7d9d2ec38747e6683ec97cd7c1af2e98eb82ea56.tar.gz
nova-7d9d2ec38747e6683ec97cd7c1af2e98eb82ea56.tar.xz
nova-7d9d2ec38747e6683ec97cd7c1af2e98eb82ea56.zip
Merge "Fixed limiting for flavors"
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/common.py7
-rw-r--r--nova/api/openstack/compute/flavors.py7
-rw-r--r--nova/api/openstack/compute/views/flavors.py23
3 files changed, 24 insertions, 13 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index 15f5be737..f3aa3a564 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -504,13 +504,16 @@ class ViewBuilder(object):
self._collection_name,
str(identifier))
- def _get_collection_links(self, request, items):
+ def _get_collection_links(self, request, items, id_key="uuid"):
"""Retrieve 'next' link, if applicable."""
links = []
limit = int(request.params.get("limit", 0))
if limit and limit == len(items):
last_item = items[-1]
- last_item_id = last_item.get("uuid", last_item["id"])
+ if id_key in last_item:
+ last_item_id = last_item[id_key]
+ else:
+ last_item_id = last_item["id"]
links.append({
"rel": "next",
"href": self._get_next_link(request, last_item_id),
diff --git a/nova/api/openstack/compute/flavors.py b/nova/api/openstack/compute/flavors.py
index b5212e703..c7ceecbec 100644
--- a/nova/api/openstack/compute/flavors.py
+++ b/nova/api/openstack/compute/flavors.py
@@ -18,6 +18,7 @@
import webob
from nova.api.openstack.compute.views import flavors as flavors_view
+from nova.api.openstack import common
from nova.api.openstack import wsgi
from nova.api.openstack import xmlutil
from nova.compute import instance_types
@@ -72,13 +73,15 @@ class Controller(wsgi.Controller):
def index(self, req):
"""Return all flavors in brief."""
flavors = self._get_flavors(req)
- return self._view_builder.index(req, flavors)
+ limited_flavors = common.limited_by_marker(flavors.values(), req)
+ return self._view_builder.index(req, limited_flavors)
@wsgi.serializers(xml=FlavorsTemplate)
def detail(self, req):
"""Return all flavors in detail."""
flavors = self._get_flavors(req)
- return self._view_builder.detail(req, flavors)
+ limited_flavors = common.limited_by_marker(flavors.values(), req)
+ return self._view_builder.detail(req, limited_flavors)
@wsgi.serializers(xml=FlavorTemplate)
def show(self, req, id):
diff --git a/nova/api/openstack/compute/views/flavors.py b/nova/api/openstack/compute/views/flavors.py
index 64284e406..050ea20d3 100644
--- a/nova/api/openstack/compute/views/flavors.py
+++ b/nova/api/openstack/compute/views/flavors.py
@@ -47,16 +47,21 @@ class ViewBuilder(common.ViewBuilder):
def index(self, request, flavors):
"""Return the 'index' view of flavors."""
- def _get_flavors(request, flavors):
- for _, flavor in flavors.iteritems():
- yield self.basic(request, flavor)["flavor"]
-
- return dict(flavors=list(_get_flavors(request, flavors)))
+ return self._list_view(self.basic, request, flavors)
def detail(self, request, flavors):
"""Return the 'detail' view of flavors."""
- def _get_flavors(request, flavors):
- for _, flavor in flavors.iteritems():
- yield self.show(request, flavor)["flavor"]
+ return self._list_view(self.show, request, flavors)
+
+ def _list_view(self, func, request, flavors):
+ """Provide a view for a list of flavors."""
+ flavor_list = [func(request, flavor)["flavor"] for flavor in flavors]
+ flavors_links = self._get_collection_links(request,
+ flavors,
+ "flavorid")
+ flavors_dict = dict(flavors=flavor_list)
+
+ if flavors_links:
+ flavors_dict["flavors_links"] = flavors_links
- return dict(flavors=list(_get_flavors(request, flavors)))
+ return flavors_dict