Skip to content

Commit 971a617

Browse files
fix: handle situation where GitLab does not return values
If a query returns more than 10,000 records than the following values are NOT returned: x.total_pages x.total Modify the code to allow no value to be set for these values. If there is not a value returned the functions will now return None. https://docs.gitlab.com/ee/user/gitlab_com/index.html#pagination-response-headers Closes #1686
1 parent 83dcabf commit 971a617

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

docs/api-usage.rst

+11-2
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,17 @@ The generator exposes extra listing information as received from the server:
265265
* ``prev_page``: if ``None`` the current page is the first one
266266
* ``next_page``: if ``None`` the current page is the last one
267267
* ``per_page``: number of items per page
268-
* ``total_pages``: total number of pages available
269-
* ``total``: total number of items in the list
268+
* ``total_pages``: total number of pages available. This may be a ``None`` value.
269+
* ``total``: total number of items in the list. This may be a ``None`` value.
270+
271+
.. note::
272+
273+
``total_pages`` and ``total`` may have a value of ``None``. For performance
274+
reasons, if a query returns more than 10,000 records, GitLab doesn’t return
275+
any value for ``total_pages`` or ``total``.
276+
277+
For more information see:
278+
https://docs.gitlab.com/ee/user/gitlab_com/index.html#pagination-response-headers
270279

271280
Sudo
272281
====

gitlab/base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -288,12 +288,12 @@ def per_page(self) -> int:
288288
return self._list.per_page
289289

290290
@property
291-
def total_pages(self) -> int:
291+
def total_pages(self) -> Optional[int]:
292292
"""The total number of pages."""
293293
return self._list.total_pages
294294

295295
@property
296-
def total(self) -> int:
296+
def total(self) -> Optional[int]:
297297
"""The total number of items."""
298298
return self._list.total
299299

gitlab/client.py

+12-6
Original file line numberDiff line numberDiff line change
@@ -966,17 +966,23 @@ def per_page(self) -> int:
966966
return int(self._per_page)
967967

968968
@property
969-
def total_pages(self) -> int:
969+
def total_pages(self) -> Optional[int]:
970970
"""The total number of pages."""
971-
if TYPE_CHECKING:
972-
assert self._total_pages is not None
971+
if self._total_pages is None:
972+
# NOTE(jlvillal): When a query returns more than 10,000 items, GitLab
973+
# doesn't return the header for this value. So we return None.
974+
# https://docs.gitlab.com/ee/user/gitlab_com/index.html#pagination-response-headers
975+
return None
973976
return int(self._total_pages)
974977

975978
@property
976-
def total(self) -> int:
979+
def total(self) -> Optional[int]:
977980
"""The total number of items."""
978-
if TYPE_CHECKING:
979-
assert self._total is not None
981+
if self._total is None:
982+
# NOTE(jlvillal): When a query returns more than 10,000 items, GitLab
983+
# doesn't return the header for this value. So we return None.
984+
# https://docs.gitlab.com/ee/user/gitlab_com/index.html#pagination-response-headers
985+
return None
980986
return int(self._total)
981987

982988
def __iter__(self) -> "GitlabList":

0 commit comments

Comments
 (0)