Skip to content

Commit b232949

Browse files
move clean_search_args as client method (#182)
1 parent 3e98870 commit b232949

File tree

1 file changed

+59
-59
lines changed

1 file changed

+59
-59
lines changed

stac_fastapi/pgstac/core.py

+59-59
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ async def all_collections( # noqa: C901
7777
"query": orjson.loads(unquote_plus(query)) if query else query,
7878
}
7979

80-
clean_args = clean_search_args(
80+
clean_args = self._clean_search_args(
8181
base_args=base_args,
8282
datetime=datetime,
8383
fields=fields,
@@ -484,7 +484,7 @@ async def get_search(
484484
"query": orjson.loads(unquote_plus(query)) if query else query,
485485
}
486486

487-
clean = clean_search_args(
487+
clean = self._clean_search_args(
488488
base_args=base_args,
489489
intersects=intersects,
490490
datetime=datetime,
@@ -504,61 +504,61 @@ async def get_search(
504504

505505
return await self.post_search(search_request, request=request)
506506

507+
def _clean_search_args( # noqa: C901
508+
self,
509+
base_args: Dict[str, Any],
510+
intersects: Optional[str] = None,
511+
datetime: Optional[DateTimeType] = None,
512+
fields: Optional[List[str]] = None,
513+
sortby: Optional[str] = None,
514+
filter_query: Optional[str] = None,
515+
filter_lang: Optional[str] = None,
516+
) -> Dict[str, Any]:
517+
"""Clean up search arguments to match format expected by pgstac"""
518+
if filter_query:
519+
if filter_lang == "cql2-text":
520+
filter_query = to_cql2(parse_cql2_text(filter_query))
521+
filter_lang = "cql2-json"
507522

508-
def clean_search_args( # noqa: C901
509-
base_args: Dict[str, Any],
510-
intersects: Optional[str] = None,
511-
datetime: Optional[DateTimeType] = None,
512-
fields: Optional[List[str]] = None,
513-
sortby: Optional[str] = None,
514-
filter_query: Optional[str] = None,
515-
filter_lang: Optional[str] = None,
516-
) -> Dict[str, Any]:
517-
"""Clean up search arguments to match format expected by pgstac"""
518-
if filter_query:
519-
if filter_lang == "cql2-text":
520-
filter_query = to_cql2(parse_cql2_text(filter_query))
521-
filter_lang = "cql2-json"
522-
523-
base_args["filter"] = orjson.loads(filter_query)
524-
base_args["filter_lang"] = filter_lang
525-
526-
if datetime:
527-
base_args["datetime"] = format_datetime_range(datetime)
528-
529-
if intersects:
530-
base_args["intersects"] = orjson.loads(unquote_plus(intersects))
531-
532-
if sortby:
533-
# https://github.com/radiantearth/stac-spec/tree/master/api-spec/extensions/sort#http-get-or-post-form
534-
sort_param = []
535-
for sort in sortby:
536-
sortparts = re.match(r"^([+-]?)(.*)$", sort)
537-
if sortparts:
538-
sort_param.append(
539-
{
540-
"field": sortparts.group(2).strip(),
541-
"direction": "desc" if sortparts.group(1) == "-" else "asc",
542-
}
543-
)
544-
base_args["sortby"] = sort_param
545-
546-
if fields:
547-
includes = set()
548-
excludes = set()
549-
for field in fields:
550-
if field[0] == "-":
551-
excludes.add(field[1:])
552-
elif field[0] == "+":
553-
includes.add(field[1:])
554-
else:
555-
includes.add(field)
556-
base_args["fields"] = {"include": includes, "exclude": excludes}
557-
558-
# Remove None values from dict
559-
clean = {}
560-
for k, v in base_args.items():
561-
if v is not None and v != []:
562-
clean[k] = v
563-
564-
return clean
523+
base_args["filter"] = orjson.loads(filter_query)
524+
base_args["filter_lang"] = filter_lang
525+
526+
if datetime:
527+
base_args["datetime"] = format_datetime_range(datetime)
528+
529+
if intersects:
530+
base_args["intersects"] = orjson.loads(unquote_plus(intersects))
531+
532+
if sortby:
533+
# https://github.com/radiantearth/stac-spec/tree/master/api-spec/extensions/sort#http-get-or-post-form
534+
sort_param = []
535+
for sort in sortby:
536+
sortparts = re.match(r"^([+-]?)(.*)$", sort)
537+
if sortparts:
538+
sort_param.append(
539+
{
540+
"field": sortparts.group(2).strip(),
541+
"direction": "desc" if sortparts.group(1) == "-" else "asc",
542+
}
543+
)
544+
base_args["sortby"] = sort_param
545+
546+
if fields:
547+
includes = set()
548+
excludes = set()
549+
for field in fields:
550+
if field[0] == "-":
551+
excludes.add(field[1:])
552+
elif field[0] == "+":
553+
includes.add(field[1:])
554+
else:
555+
includes.add(field)
556+
base_args["fields"] = {"include": includes, "exclude": excludes}
557+
558+
# Remove None values from dict
559+
clean = {}
560+
for k, v in base_args.items():
561+
if v is not None and v != []:
562+
clean[k] = v
563+
564+
return clean

0 commit comments

Comments
 (0)