Skip to content

Commit

Permalink
add functionality for applying WHERE filter #260
Browse files Browse the repository at this point in the history
  • Loading branch information
MRichards99 committed Dec 20, 2021
1 parent e820c31 commit 694f7f2
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions datagateway_api/src/search_api/filters.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
from datetime import datetime
import logging

from icat.query import Query

from datagateway_api.src.common.date_handler import DateHandler
from datagateway_api.src.common.exceptions import FilterError
from datagateway_api.src.datagateway_api.icat.filters import (
PythonICATIncludeFilter,
PythonICATLimitFilter,
PythonICATSkipFilter,
PythonICATWhereFilter,
)
from datagateway_api.src.search_api.panosc_mappings import mappings
from datagateway_api.src.search_api.query import SearchAPIQuery

log = logging.getLogger()

Expand All @@ -23,9 +25,21 @@ def __init__(self, field, value, operation, search_api_query=None):
super().__init__(field, value, operation)

def apply_filter(self, query):
# Convert the field from a PaNOSC field name to an ICAT one
icat_field_name = mappings.mappings[query.panosc_entity_name][self.field]
self.field = icat_field_name
panosc_field_names = self.field.split(".")
icat_field_names = []
panosc_mapping_name = query.panosc_entity_name

# Convert PaNOSC field names to ICAT field names
for field_name in panosc_field_names:
panosc_mapping_name, icat_field_name = self.get_icat_mapping(
panosc_mapping_name, field_name,
)
icat_field_names.append(icat_field_name)

# Once we have got ICAT field names we no longer need the PaNOSC versions so
# overwriting them is all good. ICAT version needs to be in `self.field` due to
# code written in `PythonICATWhereFilter.apply_filter()`
self.field = ".".join(icat_field_names)

# TODO - `query.query.query` might be confusing, might rename `query` in
# function signature
Expand Down

0 comments on commit 694f7f2

Please sign in to comment.