Skip to content

Commit 0391083

Browse files
committed
feat: allow tokens for paging
1 parent 7d3ea43 commit 0391083

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ impl Client {
293293
})
294294
}
295295

296-
#[pyo3(signature = (*, collections=None, ids=None, intersects=None, bbox=None, datetime=None, include=None, exclude=None, sortby=None, filter=None, query=None, limit=None))]
296+
#[pyo3(signature = (*, collections=None, ids=None, intersects=None, bbox=None, datetime=None, include=None, exclude=None, sortby=None, filter=None, query=None, limit=None, **kwargs))]
297297
fn search<'a>(
298298
&self,
299299
py: Python<'a>,
@@ -308,6 +308,7 @@ impl Client {
308308
filter: Option<StringOrDict>,
309309
query: Option<Bound<'a, PyDict>>,
310310
limit: Option<u64>,
311+
kwargs: Option<Bound<'a, PyDict>>,
311312
) -> PyResult<Bound<'a, PyAny>> {
312313
let search = stac_api::python::search(
313314
intersects,
@@ -321,6 +322,7 @@ impl Client {
321322
sortby,
322323
filter,
323324
query,
325+
kwargs,
324326
)?;
325327
self.run(py, |pool| async move {
326328
let connection = pool.get().await?;

tests/test_search.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import copy
2+
import urllib.parse
23
from typing import Any
34

45
import pytest
@@ -219,3 +220,30 @@ async def test_collections(
219220

220221
feature_collection = await client.search(collections=["simple-collection"])
221222
assert len(feature_collection["features"]) == 1
223+
224+
225+
async def test_pagination(
226+
client: Client, collection: dict[str, Any], item: dict[str, Any]
227+
) -> None:
228+
version = await client.get_version()
229+
230+
await client.create_collection(collection)
231+
item["id"] = "first-item"
232+
await client.create_item(item)
233+
second_item = copy.deepcopy(item)
234+
second_item["id"] = "second-item"
235+
await client.create_item(second_item)
236+
237+
feature_collection = await client.search(limit=1, sortby="id")
238+
239+
if version.startswith("0.9"):
240+
next_link = next(
241+
(link for link in feature_collection["links"] if link["rel"] == "next")
242+
)
243+
url = urllib.parse.urlparse(next_link["href"])
244+
token = url.query.split("=")[1]
245+
elif version.startswith("0.8"):
246+
token = "next:" + feature_collection["next"]
247+
248+
feature_collection = await client.search(limit=1, sortby="id", token=token)
249+
assert feature_collection["features"][0]["id"] == "second-item"

0 commit comments

Comments
 (0)