Skip to content

Commit 553a73a

Browse files
committed
fixup! REST: Add pagination support for list_views
1 parent 43c3d69 commit 553a73a

2 files changed

Lines changed: 39 additions & 6 deletions

File tree

pyiceberg/catalog/rest/__init__.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,13 +1107,10 @@ def list_views(self, namespace: str | Identifier) -> list[Identifier]:
11071107
all_identifiers: list[Identifier] = []
11081108
page_token: str | None = None
11091109

1110+
url = self.url(Endpoints.list_views, namespace=namespace_concat)
11101111
while True:
1111-
# Build URL with pagination params
1112-
url = self.url(Endpoints.list_views, namespace=namespace_concat)
1113-
if page_token:
1114-
url = f"{url}?pageToken={page_token}"
1115-
1116-
response = self._session.get(url)
1112+
params = {"pageToken": page_token} if page_token else None
1113+
response = self._session.get(url, params=params)
11171114
try:
11181115
response.raise_for_status()
11191116
except HTTPError as exc:

tests/catalog/test_rest.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,42 @@ def test_list_views_paginated_200(rest_mock: Mocker) -> None:
687687
]
688688

689689

690+
def test_list_views_paginated_200_none_next_page_token(rest_mock: Mocker) -> None:
691+
namespace = "examples"
692+
# First page with next-page-token
693+
rest_mock.get(
694+
f"{TEST_URI}v1/namespaces/{namespace}/views",
695+
json={
696+
"identifiers": [
697+
{"namespace": ["examples"], "name": "view1"},
698+
{"namespace": ["examples"], "name": "view2"},
699+
],
700+
"next-page-token": "page2token",
701+
},
702+
status_code=200,
703+
request_headers=TEST_HEADERS,
704+
)
705+
# The last page with NONE next-page-token
706+
rest_mock.get(
707+
f"{TEST_URI}v1/namespaces/{namespace}/views?pageToken=page2token",
708+
json={
709+
"identifiers": [
710+
{"namespace": ["examples"], "name": "view3"},
711+
],
712+
"next-page-token": None,
713+
},
714+
status_code=200,
715+
request_headers=TEST_HEADERS,
716+
)
717+
718+
result = RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN).list_views(namespace)
719+
assert result == [
720+
("examples", "view1"),
721+
("examples", "view2"),
722+
("examples", "view3"),
723+
]
724+
725+
690726
def test_list_views_200_sigv4(rest_mock: Mocker) -> None:
691727
namespace = "examples"
692728
rest_mock.get(

0 commit comments

Comments
 (0)