From d64876424e87b3a7f76a9bf4d29fdacbc5ad4bc4 Mon Sep 17 00:00:00 2001 From: Brian Lamar Date: Wed, 15 Aug 2012 14:39:39 -0400 Subject: [PATCH] Ensure v1 'limit' query parameter works correctly. The tests were present but were not asserting list results. page_size was overriding the absolute limit so limits were not working if they were less than the page_size. Fixes bug 1037233 Change-Id: If102824212e3846bc65d3f7928cf7aa2e48aaa63 --- glanceclient/v1/images.py | 6 ++++-- tests/v1/test_images.py | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) 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):