Added marker functionality to flavours and images

Markers to support pagination was missing from flavours
and from images.

Change-Id: I27de83f18a4850b63020ac60e010839a13e916fb
This commit is contained in:
Pete Savage 2015-06-26 11:05:10 +01:00
parent 39020950d6
commit bde241b947
4 changed files with 22 additions and 5 deletions

View File

@ -45,6 +45,10 @@ class FlavorsTest(utils.TestCase):
for flavor in fl:
self.assertIsInstance(flavor, self.flavor_type)
def test_list_flavors_with_marker_limit(self):
self.cs.flavors.list(marker=1234, limit=4)
self.cs.assert_called('GET', '/flavors/detail?limit=4&marker=1234')
def test_list_flavors_is_public_none(self):
fl = self.cs.flavors.list(is_public=None)
self.cs.assert_called('GET', '/flavors/detail?is_public=None')

View File

@ -35,9 +35,9 @@ class ImagesTest(utils.FixturedTestCase):
for i in il:
self.assertIsInstance(i, images.Image)
def test_list_images_with_limit(self):
self.cs.images.list(limit=4)
self.assert_called('GET', '/images/detail?limit=4')
def test_list_images_with_marker_limit(self):
self.cs.images.list(marker=1234, limit=4)
self.assert_called('GET', '/images/detail?limit=4&marker=1234')
def test_get_image_details(self):
i = self.cs.images.get(1)

View File

@ -93,18 +93,26 @@ class FlavorManager(base.ManagerWithFind):
resource_class = Flavor
is_alphanum_id_allowed = True
def list(self, detailed=True, is_public=True):
def list(self, detailed=True, is_public=True, marker=None, limit=None):
"""
Get a list of all flavors.
:rtype: list of :class:`Flavor`.
:param limit: maximum number of flavors to return (optional).
:param marker: Begin returning flavors that appear later in the flavor
list than that represented by this flavor id (optional).
"""
qparams = {}
# is_public is ternary - None means give all flavors.
# By default Nova assumes True and gives admins public flavors
# and flavors from their own projects only.
if marker:
qparams['marker'] = str(marker)
if limit:
qparams['limit'] = int(limit)
if not is_public:
qparams['is_public'] = is_public
qparams = sorted(qparams.items(), key=lambda x: x[0])
query_string = "?%s" % parse.urlencode(qparams) if qparams else ""
detail = ""

View File

@ -52,12 +52,14 @@ class ImageManager(base.ManagerWithFind):
"""
return self._get("/images/%s" % base.getid(image), "image")
def list(self, detailed=True, limit=None):
def list(self, detailed=True, limit=None, marker=None):
"""
Get a list of all images.
:rtype: list of :class:`Image`
:param limit: maximum number of images to return.
:param marker: Begin returning images that appear later in the image
list than that represented by this image id (optional).
"""
params = {}
detail = ''
@ -65,6 +67,9 @@ class ImageManager(base.ManagerWithFind):
detail = '/detail'
if limit:
params['limit'] = int(limit)
if marker:
params['marker'] = str(marker)
params = sorted(params.items(), key=lambda x: x[0])
query = '?%s' % parse.urlencode(params) if params else ''
return self._list('/images%s%s' % (detail, query), 'images')