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:
|
||||
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:
|
||||
value = cls.existing(**data)
|
||||
marker = value.id
|
||||
yielded += 1
|
||||
yield value
|
||||
|
||||
if limit and yielded < limit:
|
||||
more_data = False
|
||||
|
||||
@classmethod
|
||||
def find(cls, session, name_or_id, path_args=None):
|
||||
"""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.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):
|
||||
obj = FakeResource()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user