From c0906f4d79a75a03b4f7df417aaa9a821c6656af Mon Sep 17 00:00:00 2001 From: Zach Leventer Date: Fri, 24 Apr 2026 07:08:59 -0400 Subject: [PATCH] Fix #69/#61: add next_page_token to Paging for cursor-based pagination Versioned APIs (202404+) return a nextPageToken cursor in the paging object instead of start/count/total. Also fixes metadata extraction using dict.get() instead of getattr() on a plain dict. --- linkedin_api/clients/restli/response.py | 7 +++++++ linkedin_api/clients/restli/response_formatter.py | 3 ++- tests/clients/restli/client_test.py | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/linkedin_api/clients/restli/response.py b/linkedin_api/clients/restli/response.py index 27f0a86..4d5090f 100644 --- a/linkedin_api/clients/restli/response.py +++ b/linkedin_api/clients/restli/response.py @@ -10,6 +10,7 @@ def __init__( start: Optional[int] = None, count: Optional[int] = None, total: Optional[int] = None, + next_page_token: Optional[str] = None, ): self.start = start """ @@ -26,6 +27,12 @@ def __init__( The total number of results available. """ + self.next_page_token = next_page_token + """ + An opaque cursor string for cursor-based pagination, returned by versioned APIs (202404+). + Pass this value as the `pageToken` query parameter to retrieve the next page. + """ + class BaseRestliResponse(BaseResponse): pass diff --git a/linkedin_api/clients/restli/response_formatter.py b/linkedin_api/clients/restli/response_formatter.py index 0f7da7b..0957341 100644 --- a/linkedin_api/clients/restli/response_formatter.py +++ b/linkedin_api/clients/restli/response_formatter.py @@ -74,10 +74,11 @@ def format_response(cls, response: Response) -> CollectionResponse: paging.get("start", None), paging.get("count", None), paging.get("total", None), + paging.get("nextPageToken", None), ) if paging else Paging(), - metadata=getattr(json_data, "metadata", None), + metadata=json_data.get("metadata", None), ) diff --git a/tests/clients/restli/client_test.py b/tests/clients/restli/client_test.py index e397449..079dc7c 100644 --- a/tests/clients/restli/client_test.py +++ b/tests/clients/restli/client_test.py @@ -300,7 +300,7 @@ "checked_headers": {"X-RestLi-Method": RESTLI_METHODS.GET_ALL.value}, "response_properties": { "elements": [{"name": "A"}, {"name": "B"}], - "paging": {"start": 0, "count": 2, "total": 10}, + "paging": {"start": 0, "count": 2, "total": 10, "next_page_token": None}, }, }, ), @@ -336,7 +336,7 @@ "checked_headers": {"X-RestLi-Method": RESTLI_METHODS.FINDER.value}, "response_properties": { "elements": [{"name": "A"}, {"name": "B"}], - "paging": {"start": 0, "count": 2, "total": 10}, + "paging": {"start": 0, "count": 2, "total": 10, "next_page_token": None}, }, }, ),