|
1 | 1 | """Item crud client.""" |
2 | 2 | import json |
3 | 3 | import logging |
| 4 | +import stac_pydantic |
4 | 5 | from datetime import datetime as datetime_type |
5 | 6 | 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 |
7 | 8 | from urllib.parse import urljoin |
8 | 9 |
|
9 | 10 | import attr |
|
13 | 14 | from stac_pydantic.links import Relations |
14 | 15 | from stac_pydantic.shared import MimeTypes |
15 | 16 | from starlette.requests import Request |
| 17 | +from stac_fastapi.types.config import Settings |
16 | 18 |
|
17 | 19 | from stac_fastapi.elasticsearch import serializers |
18 | 20 | from stac_fastapi.elasticsearch.config import ElasticsearchSettings |
@@ -242,17 +244,17 @@ async def get_search( |
242 | 244 | # base_args["filter"] = orjson.loads(to_cql2(parse_cql2_text(filter))) |
243 | 245 | # print(f'>>> {base_args["filter"]}') |
244 | 246 |
|
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} |
256 | 258 |
|
257 | 259 | # Do the request |
258 | 260 | try: |
@@ -338,25 +340,25 @@ async def post_search( |
338 | 340 | self.item_serializer.db_to_stac(item, base_url=base_url) for item in items |
339 | 341 | ] |
340 | 342 |
|
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 | + ] |
360 | 362 |
|
361 | 363 | context_obj = None |
362 | 364 | if self.extension_is_enabled("ContextExtension"): |
|
0 commit comments