Skip to content

Commit b55ef7d

Browse files
committed
enable fields extension in core logic
1 parent 321d08c commit b55ef7d

File tree

1 file changed

+33
-31
lines changed
  • stac_fastapi/elasticsearch/stac_fastapi/elasticsearch

1 file changed

+33
-31
lines changed

stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/core.py

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
"""Item crud client."""
22
import json
33
import logging
4+
import stac_pydantic
45
from datetime import datetime as datetime_type
56
from datetime import timezone
6-
from typing import Any, Dict, List, Optional, Type, Union
7+
from typing import Any, Dict, List, Optional, Type, Union, Set
78
from urllib.parse import urljoin
89

910
import attr
@@ -13,6 +14,7 @@
1314
from stac_pydantic.links import Relations
1415
from stac_pydantic.shared import MimeTypes
1516
from starlette.requests import Request
17+
from stac_fastapi.types.config import Settings
1618

1719
from stac_fastapi.elasticsearch import serializers
1820
from stac_fastapi.elasticsearch.config import ElasticsearchSettings
@@ -242,17 +244,17 @@ async def get_search(
242244
# base_args["filter"] = orjson.loads(to_cql2(parse_cql2_text(filter)))
243245
# print(f'>>> {base_args["filter"]}')
244246

245-
# if fields:
246-
# includes = set()
247-
# excludes = set()
248-
# for field in fields:
249-
# if field[0] == "-":
250-
# excludes.add(field[1:])
251-
# elif field[0] == "+":
252-
# includes.add(field[1:])
253-
# else:
254-
# includes.add(field)
255-
# base_args["fields"] = {"include": includes, "exclude": excludes}
247+
if fields:
248+
includes = set()
249+
excludes = set()
250+
for field in fields:
251+
if field[0] == "-":
252+
excludes.add(field[1:])
253+
elif field[0] == "+":
254+
includes.add(field[1:])
255+
else:
256+
includes.add(field)
257+
base_args["fields"] = {"include": includes, "exclude": excludes}
256258

257259
# Do the request
258260
try:
@@ -338,25 +340,25 @@ async def post_search(
338340
self.item_serializer.db_to_stac(item, base_url=base_url) for item in items
339341
]
340342

341-
# if self.extension_is_enabled("FieldsExtension"):
342-
# if search_request.query is not None:
343-
# query_include: Set[str] = set(
344-
# [
345-
# k if k in Settings.get().indexed_fields else f"properties.{k}"
346-
# for k in search_request.query.keys()
347-
# ]
348-
# )
349-
# if not search_request.fields.include:
350-
# search_request.fields.include = query_include
351-
# else:
352-
# search_request.fields.include.union(query_include)
353-
354-
# filter_kwargs = search_request.fields.filter_fields
355-
356-
# response_features = [
357-
# json.loads(stac_pydantic.Item(**feat).json(**filter_kwargs))
358-
# for feat in response_features
359-
# ]
343+
if self.extension_is_enabled("FieldsExtension"):
344+
if search_request.query is not None:
345+
query_include: Set[str] = set(
346+
[
347+
k if k in Settings.get().indexed_fields else f"properties.{k}"
348+
for k in search_request.query.keys()
349+
]
350+
)
351+
if not search_request.fields.include:
352+
search_request.fields.include = query_include
353+
else:
354+
search_request.fields.include.union(query_include)
355+
356+
filter_kwargs = search_request.fields.filter_fields
357+
358+
items = [
359+
json.loads(stac_pydantic.Item(**feat).json(**filter_kwargs))
360+
for feat in items
361+
]
360362

361363
context_obj = None
362364
if self.extension_is_enabled("ContextExtension"):

0 commit comments

Comments
 (0)