Merge "Remove extra GET call when limit provided to list"
This commit is contained in:
@@ -469,11 +469,19 @@ class Resource(collections.MutableMapping):
|
|||||||
if not resp:
|
if not resp:
|
||||||
more_data = False
|
more_data = False
|
||||||
|
|
||||||
|
# Keep track of how many items we've yielded. If we yielded
|
||||||
|
# less than our limit, we don't need to do an extra request
|
||||||
|
# to get back an empty data set, which acts as a sentinel.
|
||||||
|
yielded = 0
|
||||||
for data in resp:
|
for data in resp:
|
||||||
value = cls.existing(**data)
|
value = cls.existing(**data)
|
||||||
marker = value.id
|
marker = value.id
|
||||||
|
yielded += 1
|
||||||
yield value
|
yield value
|
||||||
|
|
||||||
|
if limit and yielded < limit:
|
||||||
|
more_data = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def find(cls, session, name_or_id, path_args=None):
|
def find(cls, session, name_or_id, path_args=None):
|
||||||
"""Find a resource by name or id as an instance."""
|
"""Find a resource by name or id as an instance."""
|
||||||
|
|||||||
@@ -324,6 +324,18 @@ class ResourceTests(base.TestTransportBase):
|
|||||||
self.assertEqual(fake_name, obj.name)
|
self.assertEqual(fake_name, obj.name)
|
||||||
self.assertIsInstance(obj, FakeResource)
|
self.assertIsInstance(obj, FakeResource)
|
||||||
|
|
||||||
|
def test_list_bail_out(self):
|
||||||
|
results = [fake_data.copy(), fake_data.copy(), fake_data.copy()]
|
||||||
|
body = mock.Mock(body={fake_resources: results})
|
||||||
|
attrs = {"get.return_value": body}
|
||||||
|
session = mock.Mock(**attrs)
|
||||||
|
|
||||||
|
list(FakeResource.list(session, limit=len(results) + 1,
|
||||||
|
path_args=fake_arguments))
|
||||||
|
|
||||||
|
# Ensure we only made one call to complete this.
|
||||||
|
self.assertEqual(session.get.call_count, 1)
|
||||||
|
|
||||||
def test_attrs(self):
|
def test_attrs(self):
|
||||||
obj = FakeResource()
|
obj = FakeResource()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user