Skip to content

Commit 9c52069

Browse files
cauriolsbrunato
authored andcommitted
feat: pagination token
1 parent 2a668d1 commit 9c52069

File tree

3 files changed

+9
-14
lines changed

3 files changed

+9
-14
lines changed

stac_fastapi/eodag/app.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
SortExtension,
4646
)
4747
from stac_fastapi.extensions.core.free_text import FreeTextConformanceClasses
48+
from stac_fastapi.extensions.core.pagination.token_pagination import TokenPaginationExtension
4849
from stac_fastapi.extensions.core.query import QueryConformanceClasses
4950
from stac_fastapi.extensions.core.sort import SortConformanceClasses
5051

@@ -60,7 +61,6 @@
6061
from stac_fastapi.eodag.extensions.ecmwf import EcmwfExtension
6162
from stac_fastapi.eodag.extensions.filter import FiltersClient
6263
from stac_fastapi.eodag.extensions.offset_pagination import OffsetPaginationExtension
63-
from stac_fastapi.eodag.extensions.pagination import PaginationExtension
6464
from stac_fastapi.eodag.extensions.stac import (
6565
ElectroOpticalExtension,
6666
FederationExtension,
@@ -107,7 +107,7 @@
107107
"query": QueryExtension(),
108108
"sort": SortExtension(),
109109
"filter": FilterExtension(client=FiltersClient(stac_metadata_model=stac_metadata_model)),
110-
"pagination": PaginationExtension(),
110+
"token": TokenPaginationExtension(),
111111
}
112112

113113
# collection_search extensions
@@ -120,7 +120,7 @@
120120

121121
# item_collection extensions
122122
itm_col_extensions_map = {
123-
"pagination": PaginationExtension(),
123+
"token": TokenPaginationExtension(),
124124
"sort": SortExtension(conformance_classes=[SortConformanceClasses.ITEMS]),
125125
}
126126

stac_fastapi/eodag/core.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
from stac_pydantic.shared import MimeTypes
4343

4444
from eodag import SearchResult
45-
from eodag.api.core import DEFAULT_ITEMS_PER_PAGE
4645
from eodag.plugins.search.build_search_result import ECMWFSearch
4746
from eodag.utils import deepcopy, get_geometry_from_various
4847
from eodag.utils.exceptions import NoMatchingCollection as EodagNoMatchingCollection
@@ -217,13 +216,8 @@ def _search_base(self, search_request: BaseSearchPostRequest, request: Request)
217216

218217
# pagination
219218
next_page = None
220-
if search_request.page:
221-
number_returned = len(search_result)
222-
items_per_page = search_request.limit or DEFAULT_ITEMS_PER_PAGE
223-
if not search_result.number_matched or (
224-
(search_request.page - 1) * items_per_page + number_returned < search_result.number_matched
225-
):
226-
next_page = search_request.page + 1
219+
if hasattr(search_result, "next_page_token_key"):
220+
next_page = search_result.next_page_token_key.split(":", 1)[1]
227221

228222
collection["links"] = PagingLinks(
229223
request=request,
@@ -447,6 +441,7 @@ def get_search(
447441
intersects: Optional[str] = None,
448442
filter_expr: Optional[str] = None,
449443
filter_lang: Optional[str] = "cql2-text",
444+
token: Optional[str] = None,
450445
**kwargs: Any,
451446
) -> ItemCollection:
452447
"""
@@ -474,7 +469,7 @@ def get_search(
474469
"bbox": bbox,
475470
"limit": limit,
476471
"query": orjson.loads(unquote_plus(query)) if query else query,
477-
"page": page,
472+
"token": token,
478473
"sortby": get_sortby_to_post(sortby),
479474
"intersects": orjson.loads(unquote_plus(intersects)) if intersects else intersects,
480475
}
@@ -569,7 +564,7 @@ def prepare_search_base_args(search_request: BaseSearchPostRequest, model: type[
569564
"""
570565
base_args = (
571566
{
572-
"page": search_request.page,
567+
"token": search_request.token,
573568
"items_per_page": search_request.limit,
574569
"raise_errors": False,
575570
"count": get_settings().count,

stac_fastapi/eodag/models/links.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def link_next(self) -> Optional[dict[str, Any]]:
146146
if self.next is not None:
147147
method = self.request.method
148148
if method == "GET":
149-
href = merge_params(self.url, {"page": [str(self.next)]})
149+
href = merge_params(self.url, {"token": [str(self.next)]})
150150
return {
151151
"rel": Relations.next.value,
152152
"type": MimeTypes.geojson.value,

0 commit comments

Comments
 (0)