Skip to content

Commit eb79f30

Browse files
committed
fix: normalize search output
1 parent ff603f4 commit eb79f30

File tree

3 files changed

+18
-27
lines changed

3 files changed

+18
-27
lines changed

python/rustac/rustac.pyi

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ class DuckdbClient:
5656
filter: Optional[str | dict[str, Any]] = None,
5757
query: Optional[dict[str, Any]] = None,
5858
**kwargs: str,
59-
) -> dict[str, Any]:
60-
"""Search a stac-geoparquet file with duckdb, returning an item collection.
59+
) -> list[dict[str, Any]]:
60+
"""Search a stac-geoparquet file with duckdb, returning a list of items.
6161
6262
Args:
6363
href: The stac-geoparquet file.
@@ -85,7 +85,7 @@ class DuckdbClient:
8585
kwargs: Additional parameters to pass in to the search.
8686
8787
Returns:
88-
A feature collection of STAC items.
88+
A list of STAC items.
8989
"""
9090

9191
def search_to_arrow(
@@ -264,7 +264,7 @@ async def search(
264264
query: Optional[dict[str, Any]] = None,
265265
use_duckdb: Optional[bool] = None,
266266
**kwargs: str,
267-
) -> dict[str, Any]:
267+
) -> list[dict[str, Any]]:
268268
"""
269269
Searches a STAC API server.
270270
@@ -303,10 +303,10 @@ async def search(
303303
kwargs: Additional parameters to pass in to the search.
304304
305305
Returns:
306-
A feature collection of the returned STAC items.
306+
STAC items
307307
308308
Examples:
309-
>>> item_collection = await rustac.search(
309+
>>> items = await rustac.search(
310310
... "https://landsatlook.usgs.gov/stac-server",
311311
... collections=["landsat-c2l2-sr"],
312312
... intersects={"type": "Point", "coordinates": [-105.119, 40.173]},

src/duckdb.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl DuckdbClient {
5959
filter: Option<StringOrDict>,
6060
query: Option<Bound<'py, PyDict>>,
6161
kwargs: Option<Bound<'py, PyDict>>,
62-
) -> Result<Bound<'py, PyDict>> {
62+
) -> Result<Bound<'py, PyList>> {
6363
let search = crate::search::build(
6464
intersects,
6565
ids,
@@ -81,9 +81,9 @@ impl DuckdbClient {
8181
.map_err(|err| PyException::new_err(err.to_string()))?;
8282
client.search(&href, search)?
8383
};
84-
let dict = pythonize::pythonize(py, &item_collection)?;
85-
let dict = dict.extract()?;
86-
Ok(dict)
84+
let list = pythonize::pythonize(py, &item_collection.items)?;
85+
let list = list.extract()?;
86+
Ok(list)
8787
}
8888

8989
#[pyo3(signature = (href, *, intersects=None, ids=None, collections=None, limit=None, bbox=None, datetime=None, include=None, exclude=None, sortby=None, filter=None, query=None, **kwargs))]

tests/test_duckdb.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,24 @@ def client() -> DuckdbClient:
1010

1111

1212
def test_search(client: DuckdbClient) -> None:
13-
item_collection = client.search("data/extended-item.parquet")
14-
assert len(item_collection["features"]) == 1
13+
items = client.search("data/extended-item.parquet")
14+
assert len(items) == 1
1515

1616

1717
def test_search_offset(client: DuckdbClient) -> None:
18-
item_collection = client.search(
19-
"data/100-sentinel-2-items.parquet", offset=0, limit=1
20-
)
21-
assert (
22-
item_collection["features"][0]["id"]
23-
== "S2B_MSIL2A_20241203T174629_R098_T13TDE_20241203T211406"
24-
)
25-
26-
item_collection = client.search(
27-
"data/100-sentinel-2-items.parquet", offset=1, limit=1
28-
)
29-
assert (
30-
item_collection["features"][0]["id"]
31-
== "S2A_MSIL2A_20241201T175721_R141_T13TDE_20241201T213150"
32-
)
18+
items = client.search("data/100-sentinel-2-items.parquet", offset=0, limit=1)
19+
assert items[0]["id"] == "S2B_MSIL2A_20241203T174629_R098_T13TDE_20241203T211406"
20+
21+
items = client.search("data/100-sentinel-2-items.parquet", offset=1, limit=1)
22+
assert items[0]["id"] == "S2A_MSIL2A_20241201T175721_R141_T13TDE_20241201T213150"
3323

3424

3525
def test_get_collections(client: DuckdbClient) -> None:
3626
collections = client.get_collections("data/100-sentinel-2-items.parquet")
3727
assert len(collections) == 1
3828

3929

30+
@pytest.mark.skip("slow")
4031
def test_init_with_config() -> None:
4132
DuckdbClient(use_s3_credential_chain=True, use_hive_partitioning=True)
4233

0 commit comments

Comments
 (0)