Skip to content

Commit

Permalink
filters operators
Browse files Browse the repository at this point in the history
  • Loading branch information
costero-e committed Feb 15, 2023
1 parent 3d6a95b commit 81b37ad
Show file tree
Hide file tree
Showing 8 changed files with 383 additions and 384 deletions.
72 changes: 9 additions & 63 deletions beacon/db/analyses.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,72 +10,18 @@

LOG = logging.getLogger(__name__)

ANALYSES_PROPERTY_MAP = {
"aligner": "aligner",
"analysisDate": "analysisDate",
"biosampleId": "biosampleId",
"individualId": "individualId",
"pipelineName": "pipelineName",
"pipelineRef": "pipelineRef",
"runId": "runId",
"variantCaller": "variantCaller"
}

def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]:
LOG.debug("len value = {}".format(len(value)))
filters = []
if len(value) == 1:
filters.append(AlphanumericFilter(
id=ANALYSES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.GREATER_EQUAL
))
elif len(value) == 2:
filters.append(AlphanumericFilter(
id=ANALYSES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.GREATER_EQUAL
))
filters.append(AlphanumericFilter(
id=ANALYSES_PROPERTY_MAP[key],
value=[value[1]],
operator=Operator.LESS_EQUAL
))
return filters


def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]:
LOG.debug("len value = {}".format(len(value)))
filters = []
if len(value) == 1:
filters.append(AlphanumericFilter(
id=ANALYSES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.LESS_EQUAL
))
elif len(value) == 2:
filters.append(AlphanumericFilter(
id=ANALYSES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.GREATER_EQUAL
))
filters.append(AlphanumericFilter(
id=ANALYSES_PROPERTY_MAP[key],
value=[value[1]],
operator=Operator.LESS_EQUAL
))
return filters


def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams):
LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters)))
if len(qparams.query.request_parameters) > 0 and "$and" not in query:
query["$and"] = []
for k, v in qparams.query.request_parameters.items():
query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter(
id=ANALYSES_PROPERTY_MAP[k],
value=v
)))
query["$text"] = {}
if ',' in v:
v_list = v.split(',')
v_string=''
for val in v_list:
v_string += f'"{val}"'
query["$text"]["$search"]=v_string
else:
query["$text"]["$search"]=v
return query

def get_analyses(entry_id: Optional[str], qparams: RequestParams):
Expand Down
68 changes: 9 additions & 59 deletions beacon/db/biosamples.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,70 +11,20 @@

LOG = logging.getLogger(__name__)

BIOSAMPLES_PROPERTY_MAP = {
"biosampleStatusId": "biosampleStatus.id",
"biosampleStatusLabel": "biosampleStatus.label",
"collectionDate": "collectionDate",
"collectionMoment": "collectionMoment",
"sampleOriginTypeId": "sampleOriginType.id",
"sampleOriginTypeLabel": "sampleOriginType.label"
}

def generate_position_filter_start(key: str, value: List[int]) -> List[AlphanumericFilter]:
LOG.debug("len value = {}".format(len(value)))
filters = []
if len(value) == 1:
filters.append(AlphanumericFilter(
id=BIOSAMPLES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.GREATER_EQUAL
))
elif len(value) == 2:
filters.append(AlphanumericFilter(
id=BIOSAMPLES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.GREATER_EQUAL
))
filters.append(AlphanumericFilter(
id=BIOSAMPLES_PROPERTY_MAP[key],
value=[value[1]],
operator=Operator.LESS_EQUAL
))
return filters


def generate_position_filter_end(key: str, value: List[int]) -> List[AlphanumericFilter]:
LOG.debug("len value = {}".format(len(value)))
filters = []
if len(value) == 1:
filters.append(AlphanumericFilter(
id=BIOSAMPLES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.LESS_EQUAL
))
elif len(value) == 2:
filters.append(AlphanumericFilter(
id=BIOSAMPLES_PROPERTY_MAP[key],
value=[value[0]],
operator=Operator.GREATER_EQUAL
))
filters.append(AlphanumericFilter(
id=BIOSAMPLES_PROPERTY_MAP[key],
value=[value[1]],
operator=Operator.LESS_EQUAL
))
return filters


def apply_request_parameters(query: Dict[str, List[dict]], qparams: RequestParams):
LOG.debug("Request parameters len = {}".format(len(qparams.query.request_parameters)))
if len(qparams.query.request_parameters) > 0 and "$and" not in query:
query["$and"] = []
for k, v in qparams.query.request_parameters.items():
query["$and"].append(apply_alphanumeric_filter({}, AlphanumericFilter(
id=BIOSAMPLES_PROPERTY_MAP[k],
value=v
)))
query["$text"] = {}
if ',' in v:
v_list = v.split(',')
v_string=''
for val in v_list:
v_string += f'"{val}"'
query["$text"]["$search"]=v_string
else:
query["$text"]["$search"]=v
return query


Expand Down
Loading

0 comments on commit 81b37ad

Please sign in to comment.