|
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