@@ -520,21 +520,25 @@ def _post_collections_bulk_items(self, request, context):
520520 def _get_search (self , request , context ):
521521 """Handler of `GET /search` requests."""
522522 collections = request .qs ["collections" ][0 ].split ("," )
523- filter = request .qs ["filter" ][0 ] if "filter" in request .qs else None
524-
525- if filter :
526- # TODO: use a more robust CQL2-text parser?
527- assert re .match (r"^\s*\"properties\.status\"='\w+'(\s+or\s+\"properties\.status\"='\w+')*\s*$" , filter )
528- statuses = re .findall (r"\"properties\.status\"='(\w+)'" , filter )
529- else :
530- statuses = None
531-
532523 items = [
533524 item
534525 for cid in collections
535526 for item in self .items .get (cid , {}).values ()
536- if statuses is None or item .get ("properties" , {}).get ("status" ) in statuses
537527 ]
528+ if "ids" in request .qs :
529+ [ids ] = request .qs ["ids" ]
530+ ids = set (ids .split ("," ))
531+ items = [i for i in items if i .get ("id" ) in ids ]
532+ if "filter" in request .qs :
533+ [property_filter ] = request .qs ["filter" ]
534+ # TODO: use a more robust CQL2-text parser?
535+ assert request .qs ["filter-lang" ] == ["cql2-text" ]
536+ assert re .match (
537+ r"^\s*\"properties\.status\"='\w+'(\s+or\s+\"properties\.status\"='\w+')*\s*$" , property_filter
538+ )
539+ statuses = set (re .findall (r"\"properties\.status\"='(\w+)'" , property_filter ))
540+ items = [i for i in items if i .get ("properties" , {}).get ("status" ) in statuses ]
541+
538542 return {
539543 "type" : "FeatureCollection" ,
540544 "features" : items ,
0 commit comments