Exemple #1
0
 def test_lucene_resolution_simple(self):
     tree = (UnknownOperation(Word("a"), Word("b"),
                              UnknownOperation(Word("c"), Word("d"))))
     expected = (AndOperation(Word("a"), Word("b"),
                              AndOperation(Word("c"), Word("d"))))
     resolver = UnknownOperationResolver(resolve_to=None)
     self.assertEqual(resolver(tree), expected)
Exemple #2
0
 def test_and_resolution(self):
     tree = (UnknownOperation(Word("a"), Word("b"),
                              OrOperation(Word("c"), Word("d"))))
     expected = (AndOperation(Word("a"), Word("b"),
                              OrOperation(Word("c"), Word("d"))))
     resolver = UnknownOperationResolver(resolve_to=AndOperation)
     self.assertEqual(resolver(tree), expected)
Exemple #3
0
    def _parse_query(self, query: str, ambiguous_action: bool) -> None:
        """
        Parse the query, replace any ambiguous (unknown) parts with the correct operation
        and check for unsupported operations.

        Args:
            query: A Lucene style query.
            ambiguous_action: The action to use for ambiguous queries, for example "field1:value1 field2:value2" (default: "AND")
        """
        if query is None or query.strip() == "":
            raise ValueError("Need a valid query")

        try:
            self._tree = parser.parse(query)
        except ParseError as exc:
            raise QueryException("Could not parse the query, error: {}".format(
                str(exc)))

        # Replace any UnknownOperation with the chosen action
        if ambiguous_action != "Exception":
            operation = self.ambiguous_actions[ambiguous_action]
            resolver = UnknownOperationResolver(resolve_to=operation)
            self._tree = resolver(self._tree)

        # Raise a QueryException if the user has passed unsupported search terms
        self._check_tree(self._tree)
Exemple #4
0
    def test_head_tail_pos(self):
        tree = parser.parse("\ra\nb (c\t (d e f)) ")
        resolver = UnknownOperationResolver(resolve_to=None)
        transformed = resolver(tree)
        self.assertEqual(str(transformed),
                         "\ra\nAND b AND (c\t AND (d AND e AND f)) ")
        self.assertEqual(transformed.pos, tree.pos)
        self.assertEqual(transformed.size, tree.size)
        and_op, orig_op = transformed.children[2].children[0], tree.children[
            2].children[0]
        self.assertEqual(type(and_op), AndOperation)
        self.assertEqual(and_op.pos, orig_op.pos)
        self.assertEqual(and_op.size, orig_op.size)
        and_op, orig_op = and_op.children[1].children[0], orig_op.children[
            1].children[0]
        self.assertEqual(type(and_op), AndOperation)
        self.assertEqual(and_op.pos, orig_op.pos)
        self.assertEqual(and_op.size, orig_op.size)

        resolver = UnknownOperationResolver(resolve_to=OrOperation)
        transformed = resolver(tree)
        self.assertEqual(str(transformed),
                         "\ra\nOR b OR (c\t OR (d OR e OR f)) ")
Exemple #5
0
 def test_lucene_resolution_last_op_with_group(self):
     tree = (OrOperation(
         Word("a"), Word("b"),
         Group(
             AndOperation(Word("c"), UnknownOperation(Word("d"),
                                                      Word("e")))),
         UnknownOperation(Word("f"), Word("g")),
         Group(UnknownOperation(Word("h"), Word("i")))))
     expected = (OrOperation(
         Word("a"), Word("b"),
         Group(AndOperation(Word("c"), AndOperation(Word("d"), Word("e")))),
         OrOperation(Word("f"), Word("g")),
         Group(AndOperation(Word("h"), Word("i")))))
     resolver = UnknownOperationResolver(resolve_to=None)
     self.assertEqual(resolver(tree), expected)
Exemple #6
0
 def test_lucene_resolution_last_op(self):
     tree = (OrOperation(
         Word("a"), Word("b"), UnknownOperation(Word("c"), Word("d")),
         AndOperation(Word("e"), UnknownOperation(Word("f"), Word("g"))),
         UnknownOperation(Word("i"), Word("j")),
         OrOperation(Word("k"), UnknownOperation(Word("l"), Word("m"))),
         UnknownOperation(Word("n"), Word("o"))))
     expected = (OrOperation(
         Word("a"), Word("b"), OrOperation(Word("c"), Word("d")),
         AndOperation(Word("e"), AndOperation(Word("f"), Word("g"))),
         AndOperation(Word("i"), Word("j")),
         OrOperation(Word("k"), OrOperation(Word("l"), Word("m"))),
         OrOperation(Word("n"), Word("o"))))
     resolver = UnknownOperationResolver(resolve_to=None)
     self.assertEqual(resolver(tree), expected)
Exemple #7
0
 def test_resolve_to_verification(self):
     with self.assertRaises(ValueError):
         UnknownOperationResolver(resolve_to=object())
Exemple #8
0
from .models import UserAuths
from .models import Auth
from  .WritableUtils import *
from .rangebuilder import *
from luqum.parser import lexer, parser, ParseError
from luqum.pretty import prettify
from luqum.utils import UnknownOperationResolver, LuceneTreeVisitorV2
from luqum.exceptions import OrAndAndOnSameLevel
from luqum.tree import OrOperation, AndOperation, UnknownOperation
from luqum.tree import Word  # noqa: F401
import asyncio
from collections import deque
import queue
import concurrent.futures

resolver = UnknownOperationResolver()




import pysharkbite
class LookupInformation(object):
    def __init__(self,lookupTable,auths, tableOps):
        self._lookupTable=lookupTable
        self._auths = auths
        self._tableOps = tableOps

    def getLookupTable(self):
        return self._lookupTable

    def getAuths(self):
Exemple #9
0
import contextlib
import io
import logging
import sqlite3
import string

from luqum.parser import parser
from luqum.tree import AndOperation
from luqum.utils import LuceneTreeTransformer, UnknownOperationResolver

log = logging.getLogger(__name__)

_SAFE_QUERY_CHARS = set(
    ':()"'
)  # "-" is not processed to NOT by luqum. ":" is required by luqum for "path:/foo". "()" are used by sqlite3 FTS5. """ is used for quoting.
_UNKNOWN_OP_RESOLVER = UnknownOperationResolver(AndOperation)
_UNSAFE_QUERY_CHARS = set(string.punctuation) - _SAFE_QUERY_CHARS


class _SearchFieldRemover(LuceneTreeTransformer):
    def visit_search_field(self, node, parents):  # pylint: disable=unused-argument,no-self-use
        return None


class SqliteFTS5Matcher:
    """Validate whether a given GitHub code search query matches against the specified text using SQLite FTS5."""
    def __init__(self, query: str) -> None:
        self._query = self._convert_github_query_to_sqlite_fts5_query(query)
        if query != self._query:
            log.info(
                f"Adjusted the query {query!r} for local validation to {self._query!r}."