diff --git a/glanceclient/v1/images.py b/glanceclient/v1/images.py index a4b759a4..b41b3140 100644 --- a/glanceclient/v1/images.py +++ b/glanceclient/v1/images.py @@ -123,18 +123,20 @@ class ImageManager(base.Manager): structure of an image object :rtype: list of :class:`Image` """ - limit = kwargs.get('limit') + absolute_limit = kwargs.get('limit') def paginate(qp, seen=0): url = '/v1/images/detail?%s' % urllib.urlencode(qp) images = self._list(url, "images") for image in images: seen += 1 + if absolute_limit is not None and seen > absolute_limit: + return yield image page_size = qp.get('limit') if (page_size and len(images) == page_size and - (limit is None or 0 < seen < limit)): + (absolute_limit is None or 0 < seen < absolute_limit)): qp['marker'] = image.id for image in paginate(qp, seen): yield image diff --git a/tests/v1/test_images.py b/tests/v1/test_images.py index 6f258e61..759010f2 100644 --- a/tests/v1/test_images.py +++ b/tests/v1/test_images.py @@ -223,8 +223,9 @@ class ImageManagerTest(unittest.TestCase): self.assertEqual(images[2].id, 'c') def test_list_with_limit_less_than_page_size(self): - list(self.mgr.list(page_size=20, limit=10)) - expect = [('GET', '/v1/images/detail?limit=20', {}, None)] + results = list(self.mgr.list(page_size=2, limit=1)) + expect = [('GET', '/v1/images/detail?limit=2', {}, None)] + self.assertEqual(1, len(results)) self.assertEqual(self.api.calls, expect) def test_list_with_limit_greater_than_page_size(self):