diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f9226fa..d50d6ff9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- Exclude unset fields in search response [#166](https://github.com/stac-utils/stac-fastapi-elasticsearch/issues/166) ## [v1.0.0] diff --git a/stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/core.py b/stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/core.py index 65e9a458..76bb04cd 100644 --- a/stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/core.py +++ b/stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/core.py @@ -509,7 +509,9 @@ async def post_search( filter_kwargs = search_request.fields.filter_fields items = [ - orjson.loads(stac_pydantic.Item(**feat).json(**filter_kwargs)) + orjson.loads( + stac_pydantic.Item(**feat).json(**filter_kwargs, exclude_unset=True) + ) for feat in items ] diff --git a/stac_fastapi/elasticsearch/tests/api/test_api.py b/stac_fastapi/elasticsearch/tests/api/test_api.py index 932edc08..c50256da 100644 --- a/stac_fastapi/elasticsearch/tests/api/test_api.py +++ b/stac_fastapi/elasticsearch/tests/api/test_api.py @@ -163,6 +163,23 @@ async def test_app_fields_extension_no_properties_post(app_client, ctx, txn_clie assert "properties" not in resp_json["features"][0] +@pytest.mark.asyncio +async def test_app_fields_extension_no_null_fields(app_client, ctx, txn_client): + resp = await app_client.get("/search", params={"collections": ["test-collection"]}) + assert resp.status_code == 200 + resp_json = resp.json() + # check if no null fields: https://github.com/stac-utils/stac-fastapi-elasticsearch/issues/166 + for feature in resp_json["features"]: + # assert "bbox" not in feature["geometry"] + for link in feature["links"]: + assert all(a not in link or link[a] is not None for a in ("title", "asset")) + for asset in feature["assets"]: + assert all( + a not in asset or asset[a] is not None + for a in ("start_datetime", "created") + ) + + @pytest.mark.asyncio async def test_app_fields_extension_return_all_properties(app_client, ctx, txn_client): item = ctx.item