Skip to content

Commit a7a224c

Browse files
committed
add tests, fix missing params
1 parent d1711d5 commit a7a224c

File tree

2 files changed

+78
-7
lines changed

2 files changed

+78
-7
lines changed

pyiceberg/catalog/rest/__init__.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ def list_tables_raw(
607607
params["pageToken"] = next_page_token
608608
if page_size is not None:
609609
params["pageSize"] = page_size
610-
response = self._session.get(self.url(Endpoints.list_tables, namespace=namespace_concat))
610+
response = self._session.get(self.url(Endpoints.list_tables, namespace=namespace_concat), params=params)
611611
try:
612612
response.raise_for_status()
613613
except HTTPError as exc:
@@ -723,14 +723,12 @@ def list_views(self, namespace: Union[str, Identifier], page_size: Optional[int]
723723

724724
next_page_token = None
725725
while True:
726-
list_namespace_response = self.list_views_raw(
727-
namespace=namespace, page_size=page_size, next_page_token=next_page_token
728-
)
729-
views.extend([(*view.namespace, view.name) for view in list_namespace_response.identifiers])
730-
if list_namespace_response.next_page_token is None:
726+
list_views_response = self.list_views_raw(namespace=namespace, page_size=page_size, next_page_token=next_page_token)
727+
views.extend([(*view.namespace, view.name) for view in list_views_response.identifiers])
728+
if list_views_response.next_page_token is None:
731729
break
732730
else:
733-
next_page_token = list_namespace_response.next_page_token
731+
next_page_token = list_views_response.next_page_token
734732

735733
return views
736734

tests/catalog/test_rest.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,28 @@ def test_list_tables_200(rest_mock: Mocker) -> None:
412412
assert RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN).list_tables(namespace) == [("examples", "fooshare")]
413413

414414

415+
def test_list_tables_paginated_200(rest_mock: Mocker) -> None:
416+
namespace = "examples"
417+
rest_mock.get(
418+
f"{TEST_URI}v1/namespaces/{namespace}/tables",
419+
json={"identifiers": [{"namespace": ["examples"], "name": "fooshare"}], "next-page-token": "page2"},
420+
status_code=200,
421+
request_headers=TEST_HEADERS,
422+
)
423+
rest_mock.get(
424+
f"{TEST_URI}v1/namespaces/{namespace}/tables?pageToken=page2",
425+
json={"identifiers": [{"namespace": ["examples"], "name": "fooshare2"}]},
426+
status_code=200,
427+
request_headers=TEST_HEADERS,
428+
)
429+
430+
assert RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN).list_tables(namespace) == [
431+
("examples", "fooshare"),
432+
("examples", "fooshare2"),
433+
]
434+
assert rest_mock.call_count == 3
435+
436+
415437
def test_list_tables_200_sigv4(rest_mock: Mocker) -> None:
416438
namespace = "examples"
417439
rest_mock.get(
@@ -458,6 +480,30 @@ def test_list_views_200(rest_mock: Mocker) -> None:
458480
assert RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN).list_views(namespace) == [("examples", "fooshare")]
459481

460482

483+
def test_list_views_paginated_200(rest_mock: Mocker) -> None:
484+
namespace = "examples"
485+
rest_mock.get(
486+
f"{TEST_URI}v1/namespaces/{namespace}/views",
487+
json={"identifiers": [{"namespace": ["examples"], "name": "fooshare"}], "next-page-token": "page2"},
488+
status_code=200,
489+
request_headers=TEST_HEADERS,
490+
)
491+
492+
rest_mock.get(
493+
f"{TEST_URI}v1/namespaces/{namespace}/views?pageToken=page2",
494+
json={"identifiers": [{"namespace": ["examples"], "name": "fooshare2"}]},
495+
status_code=200,
496+
request_headers=TEST_HEADERS,
497+
)
498+
499+
assert RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN).list_views(namespace) == [
500+
("examples", "fooshare"),
501+
("examples", "fooshare2"),
502+
]
503+
504+
assert rest_mock.call_count == 3
505+
506+
461507
def test_list_views_200_sigv4(rest_mock: Mocker) -> None:
462508
namespace = "examples"
463509
rest_mock.get(
@@ -543,6 +589,33 @@ def test_list_namespaces_200(rest_mock: Mocker) -> None:
543589
]
544590

545591

592+
def test_list_namespaces_paginated_200(rest_mock: Mocker) -> None:
593+
rest_mock.get(
594+
f"{TEST_URI}v1/namespaces",
595+
json={"namespaces": [["default"], ["examples"], ["fokko"], ["system"]], "next-page-token": "page2"},
596+
status_code=200,
597+
request_headers=TEST_HEADERS,
598+
)
599+
rest_mock.get(
600+
f"{TEST_URI}v1/namespaces?pageToken=page2",
601+
json={"namespaces": [["default2"], ["examples2"], ["fokko2"], ["system2"]]},
602+
status_code=200,
603+
request_headers=TEST_HEADERS,
604+
)
605+
assert RestCatalog("rest", uri=TEST_URI, token=TEST_TOKEN).list_namespaces() == [
606+
("default",),
607+
("examples",),
608+
("fokko",),
609+
("system",),
610+
("default2",),
611+
("examples2",),
612+
("fokko2",),
613+
("system2",),
614+
]
615+
616+
assert rest_mock.call_count == 3
617+
618+
546619
def test_list_namespace_with_parent_200(rest_mock: Mocker) -> None:
547620
rest_mock.get(
548621
f"{TEST_URI}v1/namespaces?parent=accounting",

0 commit comments

Comments
 (0)