Skip to content

Commit 8e76c7b

Browse files
authored
Merge pull request #41 from cloudblue/LITE-23686-make-first-use-limit-1
LITE-23686 use limit=1 on calls to first
2 parents 4ebca4b + 596b334 commit 8e76c7b

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

connect/client/models/resourceset.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -351,10 +351,12 @@ def count(self):
351351
:rtype: int
352352
"""
353353
if not self._content_range:
354-
url = self._get_request_url()
355-
kwargs = self._get_request_kwargs()
354+
copy = self._copy()
355+
url = copy._get_request_url()
356+
kwargs = copy._get_request_kwargs()
356357
kwargs['params']['limit'] = 0
357-
self._execute_request(url, kwargs)
358+
copy._execute_request(url, kwargs)
359+
return copy._content_range.count
358360
return self._content_range.count
359361

360362
def first(self):
@@ -365,8 +367,11 @@ def first(self):
365367
:return: The first resource.
366368
:rtype: dict, None
367369
"""
368-
self._fetch_all()
369-
return self._results[0] if self._results else None
370+
copy = self._copy()
371+
copy._limit = 1
372+
copy._offset = 0
373+
copy._fetch_all()
374+
return copy._results[0] if copy._results else None
370375

371376
def _iterator(self):
372377
args = (
@@ -484,8 +489,11 @@ async def first(self):
484489
:return: The first resource.
485490
:rtype: dict, None
486491
"""
487-
await self._fetch_all()
488-
return self._results[0] if self._results else None
492+
copy = self._copy()
493+
copy._limit = 1
494+
copy._offset = 0
495+
await copy._fetch_all()
496+
return copy._results[0] if copy._results else None
489497

490498
def _iterator(self):
491499
args = (

tests/client/test_models.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -701,11 +701,12 @@ def test_rs_count(mocker, rs_factory):
701701
'connect.client.models.resourceset.parse_content_range',
702702
return_value=content_range,
703703
)
704+
rs_copy = rs_factory()
705+
mocker.patch.object(ResourceSet, '_copy', return_value=rs_copy)
704706
rs = rs_factory()
705707
rs._client.get = mocker.MagicMock(return_value=[])
706-
707708
assert rs.count() == 100
708-
assert rs.content_range == content_range
709+
assert rs_copy.content_range == content_range
709710

710711

711712
def test_rs_first(mocker, rs_factory):
@@ -716,18 +717,34 @@ def test_rs_first(mocker, rs_factory):
716717
)
717718
expected = [{'id': i} for i in range(10)]
718719
rs = rs_factory()
719-
rs._client.get = mocker.MagicMock(return_value=expected)
720+
721+
rs_copy = rs_factory()
722+
723+
mocker.patch.object(ResourceSet, '_copy', return_value=rs_copy)
724+
725+
rs_copy._client.get = mocker.MagicMock(return_value=expected)
720726

721727
first = rs.first()
722728

723729
assert first == expected[0]
730+
assert rs._results is None
731+
assert rs_copy._results == expected
732+
assert rs_copy._limit == 1
733+
assert rs_copy._offset == 0
724734

725735
rs = rs_factory()
736+
rs_copy = rs_factory()
737+
738+
mocker.patch.object(ResourceSet, '_copy', return_value=rs_copy)
726739
rs._client.get = mocker.MagicMock(return_value=[])
727740

728741
first = rs.first()
729742

730743
assert first is None
744+
assert rs._results is None
745+
assert rs_copy._results == []
746+
assert rs_copy._limit == 1
747+
assert rs_copy._offset == 0
731748

732749

733750
def test_rs_all(rs_factory):

0 commit comments

Comments
 (0)