summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Lamar <brian.lamar@rackspace.com>2012-08-15 14:39:39 -0400
committerBrian Lamar <brian.lamar@rackspace.com>2012-08-15 14:50:11 -0400
commitd64876424e87b3a7f76a9bf4d29fdacbc5ad4bc4 (patch)
tree18714adff091abc444654bdb9be16a4ce485d0d7
parenta5b8165d7de5edd15a616e2ff97c1f8b72b53e8c (diff)
downloadpython-glanceclient-0.4.2.tar.gz
Ensure v1 'limit' query parameter works correctly.0.4.2
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
-rw-r--r--glanceclient/v1/images.py6
-rw-r--r--tests/v1/test_images.py5
2 files changed, 7 insertions, 4 deletions
diff --git a/glanceclient/v1/images.py b/glanceclient/v1/images.py
index a4b759a..b41b314 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 6f258e6..759010f 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):