@@ -124,7 +124,7 @@ def hello():
124124 return Response (status = HTTPStatus .OK )
125125
126126
127- def process_products_request (request , headers ):
127+ def process_products_request (request , headers ) -> Response :
128128 """Docstring to be added."""
129129 catalog_path = app .config ["configuration_path" ] / "Catalog/GETFileResponse.json"
130130 catalog_data = json .loads (open (catalog_path ).read ())
@@ -241,9 +241,9 @@ def process_products_request(request, headers):
241241def process_query (query ):
242242 # Step 1: Remove the part before "any("
243243 queries = query .split ("any(" )
244-
244+
245245 results = []
246-
246+
247247 # Step 2: Process each part individually
248248 for q in queries :
249249 if ")" in q :
@@ -254,7 +254,7 @@ def process_query(query):
254254 # Collect and clean up each part
255255 for part in parts :
256256 results .append (part .strip ())
257-
257+
258258 return results
259259
260260
@@ -318,7 +318,7 @@ def split_composite_filter(filter_to_split: str) -> tuple[list[str], list[str]]:
318318 return splitted_filter , operators
319319
320320
321- def process_filter (request , input_filter ) :
321+ def process_filter (request , input_filter : str ) -> Response :
322322 """Recursive function to go through any filter (composite or not) and return
323323 the result of the full filter.
324324 """
@@ -331,7 +331,7 @@ def process_filter(request, input_filter):
331331 if "Attributes" in end_filter or "OData.CSC" in end_filter :
332332 return process_attributes_search (end_filter , request .args )
333333 return process_products_request (str (end_filter ), request .args )
334-
334+
335335 # If there is more than one filter, repeat operation on each one and combine its
336336 # results with the ones of the previous one using the correct operator
337337 else :
@@ -360,7 +360,7 @@ def extract_values_and_operation(part1, part2):
360360
361361 return value1 , operation , value2
362362
363- def process_attributes_search (query , headers ):
363+ def process_attributes_search (query , headers ) -> Response :
364364 # Don;t touch this, it just works
365365 results = process_query (query )
366366 if len (results ) == 2 :
@@ -473,65 +473,65 @@ def query_products():
473473 [query_text in request .args ["$filter" ].split (" " )[0 ] for query_text in ["Name" , "PublicationDate" , "Attributes" , "ContentDate/Start" , "ContentDate/End" ]],
474474 ):
475475 return Response (status = HTTPStatus .BAD_REQUEST )
476- else :
477- if " and " not in request .args ['$filter' ]:
478- conditions = re .split (r"\s+or\s+|\s+OR\s+" , match .group (1 ))
479- responses = [process_products_request (cond , request .args ) for cond in conditions ]
480- first_response = json .loads (responses [0 ].data )['value' ]
481- second_response = json .loads (responses [1 ].data )['value' ]
482- fresp_set = {d .get ("Id" , None ) for d in first_response }
483- sresp_set = {d .get ("Id" , None ) for d in second_response }
484- union_set = fresp_set .union (sresp_set )
485- union_elements = [d for d in first_response + second_response if d .get ("Id" ) in union_set ]
486- return Response (status = HTTPStatus .OK , response = prepare_response_odata_v4 (union_elements ), headers = request .args )
487- match len (request .args ['$filter' ].split (" and " )):
488- case 1 :
489- conditions = re .split (r"\s+or\s+|\s+OR\s+" , match .group (1 ))
490- responses = [process_products_request (cond , request .args ) for cond in conditions ]
491- first_response = json .loads (responses [0 ].data )['value' ]
492- second_response = json .loads (responses [1 ].data )['value' ]
493- fresp_set = {d .get ("Id" , None ) for d in first_response }
494- sresp_set = {d .get ("Id" , None ) for d in second_response }
495- union_set = fresp_set .union (sresp_set )
496- union_elements = [d for d in first_response + second_response if d .get ("Id" ) in union_set ]
497- responses = json .loads (process_products_request (filter , request .args ).data )["value" ]
498- fresp_set = {d .get ("Id" , None ) for d in responses }
499- sresp_set = {d .get ("Id" , None ) for d in union_elements }
500- common_response = fresp_set .intersection (sresp_set )
501- common_elements = [d for d in responses if d .get ("Id" ) in common_response ]
502- if common_elements :
503- return Response (
504- status = HTTPStatus .OK ,
505- response = prepare_response_odata_v4 (common_elements ),
506- headers = request .args ,
507- )
508- return Response (status = HTTPStatus .OK , response = json .dumps ({"value" : []}))
509- case 2 :
510- union_elements = []
511- for ops in request .args ['$filter' ].split (" and " ):
512- conditions = re .split (r"\s+or\s+|\s+OR\s+|\(|\)" , ops )
513- conditions = [p for p in conditions if p .strip ()]
514- responses = [process_products_request (cond , request .args ) for cond in conditions ]
515- first_response = json .loads (responses [0 ].data )['value' ]
516- second_response = json .loads (responses [1 ].data )['value' ]
517- fresp_set = {d .get ("Id" , None ) for d in first_response }
518- sresp_set = {d .get ("Id" , None ) for d in second_response }
519- union_set = fresp_set .union (sresp_set )
520- union_elements .append ([d for d in first_response + second_response if d .get ("Id" ) in union_set ])
521- first_ops_response = {d .get ("Id" , None ) for d in union_elements [0 ]}
522- second_ops_response = {d .get ("Id" , None ) for d in union_elements [1 ]}
523- common_response = first_ops_response .intersection (second_ops_response )
524- common_elements = [d for d in first_response + second_response if d .get ("Id" ) in common_response ]
525- return Response (status = HTTPStatus .OK , response = prepare_response_odata_v4 (common_elements ), headers = request .args )
526- case 4 :
527- conditions = request .args ['$filter' ].split (" and " )
528-
529- if any ("PublicationDate" in cond for cond in conditions ):
530- pass # Do nothing if at least one condition contains "PublicationDate"
531- case _:
532- msg = "Too complex for adgs sim"
533- logger .error (msg )
534- return Response ("Too complex for adgs sim" , status = HTTPStatus .BAD_REQUEST )
476+ # else:
477+ # if " and " not in request.args['$filter']:
478+ # conditions = re.split(r"\s+or\s+|\s+OR\s+", match.group(1))
479+ # responses = [process_products_request(cond, request.args) for cond in conditions]
480+ # first_response = json.loads(responses[0].data)['value']
481+ # second_response = json.loads(responses[1].data)['value']
482+ # fresp_set = {d.get("Id", None) for d in first_response}
483+ # sresp_set = {d.get("Id", None) for d in second_response}
484+ # union_set = fresp_set.union(sresp_set)
485+ # union_elements = [d for d in first_response + second_response if d.get("Id") in union_set]
486+ # return Response(status=HTTPStatus.OK, response=prepare_response_odata_v4(union_elements), headers=request.args)
487+ # match len(request.args['$filter'].split(" and ")):
488+ # case 1:
489+ # conditions = re.split(r"\s+or\s+|\s+OR\s+", match.group(1))
490+ # responses = [process_products_request(cond, request.args) for cond in conditions]
491+ # first_response = json.loads(responses[0].data)['value']
492+ # second_response = json.loads(responses[1].data)['value']
493+ # fresp_set = {d.get("Id", None) for d in first_response}
494+ # sresp_set = {d.get("Id", None) for d in second_response}
495+ # union_set = fresp_set.union(sresp_set)
496+ # union_elements = [d for d in first_response + second_response if d.get("Id") in union_set]
497+ # responses = json.loads(process_products_request(filter, request.args).data)["value"]
498+ # fresp_set = {d.get("Id", None) for d in responses}
499+ # sresp_set = {d.get("Id", None) for d in union_elements}
500+ # common_response = fresp_set.intersection(sresp_set)
501+ # common_elements = [d for d in responses if d.get("Id") in common_response]
502+ # if common_elements:
503+ # return Response(
504+ # status=HTTPStatus.OK,
505+ # response=prepare_response_odata_v4(common_elements),
506+ # headers=request.args,
507+ # )
508+ # return Response(status=HTTPStatus.OK, response=json.dumps({"value": []}))
509+ # case 2:
510+ # union_elements = []
511+ # for ops in request.args['$filter'].split(" and "):
512+ # conditions = re.split(r"\s+or\s+|\s+OR\s+|\(|\)", ops)
513+ # conditions = [p for p in conditions if p.strip()]
514+ # responses = [process_products_request(cond, request.args) for cond in conditions]
515+ # first_response = json.loads(responses[0].data)['value']
516+ # second_response = json.loads(responses[1].data)['value']
517+ # fresp_set = {d.get("Id", None) for d in first_response}
518+ # sresp_set = {d.get("Id", None) for d in second_response}
519+ # union_set = fresp_set.union(sresp_set)
520+ # union_elements.append([d for d in first_response + second_response if d.get("Id") in union_set])
521+ # first_ops_response = {d.get("Id", None) for d in union_elements[0]}
522+ # second_ops_response = {d.get("Id", None) for d in union_elements[1]}
523+ # common_response = first_ops_response.intersection(second_ops_response)
524+ # common_elements = [d for d in first_response + second_response if d.get("Id") in common_response]
525+ # return Response(status=HTTPStatus.OK, response=prepare_response_odata_v4(common_elements), headers=request.args)
526+ # case 4:
527+ # conditions = request.args['$filter'].split(" and ")
528+
529+ # if any("PublicationDate" in cond for cond in conditions):
530+ # pass # Do nothing if at least one condition contains "PublicationDate"
531+ # case _:
532+ # msg = "Too complex for adgs sim"
533+ # logger.error(msg)
534+ # return Response ("Too complex for adgs sim", status=HTTPStatus.BAD_REQUEST)
535535
536536 return process_filter (request , request .args ['$filter' ])
537537
0 commit comments