from nexus.meta_api.query_extensionner.grammar import ( FieldResolver, MorphyResolver, OrOperation, UnknownOperationResolver, parser, ) from . import checks from .checks import QueryClass class QueryProcessor: checks = tuple() def process(self, query, language): raise NotImplementedError() class ClassicQueryProcessor(QueryProcessor): checks = (checks.check_doi, checks.check_isbn, checks.check_nid, checks.check_url) def process(self, query, language): uor = UnknownOperationResolver(OrOperation) fr = FieldResolver() morphy = MorphyResolver(language) for c in self.checks: r = c(query) if r: return r return {'query': str(uor.visit(fr.visit(morphy.visit(parser.parse(query))))), 'class': QueryClass.Default}