Source code for clarin.sru.fcs.queryparser

from typing import Dict
from typing import List
from typing import Optional

from clarin.sru.constants import SRUDiagnostics
from clarin.sru.constants import SRUParam
from clarin.sru.constants import SRUVersion
from clarin.sru.diagnostic import SRUDiagnosticList
from clarin.sru.queryparser import SRUQuery
from clarin.sru.queryparser import SRUQueryParser
from fcsql import QueryNode
from fcsql import QueryParser
from fcsql import QueryParserException

from clarin.sru.fcs.constants import FCSQueryType

# ---------------------------------------------------------------------------


[docs]class FCSQuery(SRUQuery[QueryNode]): @property def query_type(self) -> str: return FCSQueryType.FCS.value
[docs]class FCSQueryParser(SRUQueryParser[QueryNode]): """Default query parser to parse FCS-QL.""" def __init__(self) -> None: super().__init__() self.parser = QueryParser() @property def query_type(self) -> str: return FCSQueryType.FCS @property def query_parameter_names(self) -> List[str]: return [SRUParam.QUERY.value]
[docs] def supports_version(self, version: Optional[SRUVersion]) -> bool: if not version: raise TypeError("Argument version is invalid/None.") # FCS-QL is only supported by SRU 2.0 return version >= SRUVersion.VERSION_2_0
[docs] def parse_query( self, version: SRUVersion, parameters: Dict[str, str], diagnostics: SRUDiagnosticList, ) -> Optional[SRUQuery[QueryNode]]: raw_query = parameters.get(SRUParam.QUERY) if raw_query is None: diagnostics.add_diagnostic( SRUDiagnostics.GENERAL_SYSTEM_ERROR, message="no query passed to query parser", ) return None try: parsed_query: QueryNode = self.parser.parse(raw_query) return FCSQuery(raw_query, parsed_query) except QueryParserException as ex: diagnostics.add_diagnostic( SRUDiagnostics.QUERY_SYNTAX_ERROR, message=str(ex) ) except Exception: diagnostics.add_diagnostic( SRUDiagnostics.GENERAL_SYSTEM_ERROR, message="Unexpected error while parsing query.", ) return None
# ---------------------------------------------------------------------------