Beispiel #1
0
def test_connectors():
    assert parse_query("first and document") == AndQuery([WordQuery("first"), WordQuery("document")])
    assert parse_query("first or document") == OrQuery([WordQuery("first"), WordQuery("document")])
    assert parse_query("first AND doc OR document") == OrQuery(
        [AndQuery([WordQuery("first"), WordQuery("doc")]), WordQuery("document")]
    )
    assert parse_query("first doc OR document") == OrQuery(
        [AndQuery([WordQuery("first"), WordQuery("doc")]), WordQuery("document")]
    )
Beispiel #2
0
def test_fields():
    assert parse_query("keyword:first document") == AndQuery(
        [WordQuery("first", KeywordField()), WordQuery("document")]
    )
    assert parse_query("keyword:\"first document\"") == PhraseQuery("first document", KeywordField())
    with pytest.raises(InvalidQueryException):
        parse_query("keyword:(first and document)")
    assert parse_query("@keyword first document") == AndQuery(
        [WordQuery("first", KeywordField()), WordQuery("document")]
    )
Beispiel #3
0
def test_brackets():
    assert parse_query("(first)") == WordQuery("first")
    assert parse_query("first and (doc or document)") == AndQuery(
        [WordQuery("first"), OrQuery([WordQuery("doc"), WordQuery("document")])]
    )
    assert parse_query("first (doc or document)") == AndQuery(
        [WordQuery("first"), OrQuery([WordQuery("doc"), WordQuery("document")])]
    )
    with pytest.raises(InvalidQueryException):
        parse_query("first (doc or document")
Beispiel #4
0
 def add_to_blocklist(self, destination: int, tag: str):
     # Ensure blocklist query can be parsed without error
     self.blocklist_query_cache[tag] = parse_query(tag)
     # Add to blocklists
     if destination in self.blocklists:
         self.blocklists[destination].add(tag)
     else:
         self.blocklists[destination] = {tag}
Beispiel #5
0
def test_negation():
    assert parse_query("-first") == NotQuery(WordQuery("first"))
    assert parse_query("!first") == NotQuery(WordQuery("first"))
    assert parse_query("! first") == NotQuery(WordQuery("first"))
    assert parse_query("not first") == NotQuery(WordQuery("first"))
    assert parse_query("NOT first") == NotQuery(WordQuery("first"))
    assert parse_query("first not second") == AndQuery([WordQuery("first"), NotQuery(WordQuery("second"))])
Beispiel #6
0
def test_quotes():
    assert parse_query("\"first document\"") == PhraseQuery("first document")
    assert parse_query("\"Hello WORLD!\"") == PhraseQuery("Hello WORLD!")
Beispiel #7
0
def test_rating_field():
    assert parse_query("rating:general") == RatingQuery(Rating.GENERAL)
    assert parse_query("-rating:adult") == NotQuery(RatingQuery(Rating.ADULT))
    assert parse_query("ych rating:mature") == AndQuery([WordQuery("ych"), RatingQuery(Rating.MATURE)])
Beispiel #8
0
def test_description_field():
    assert parse_query("description:first") == WordQuery("first", DescriptionField())
    assert parse_query("desc:first") == WordQuery("first", DescriptionField())
    assert parse_query("message:first") == WordQuery("first", DescriptionField())
Beispiel #9
0
def test_rating_invalid():
    with pytest.raises(InvalidQueryException):
        parse_query("rating:alright")
Beispiel #10
0
def test_escaped_quotes():
    assert parse_query("\"hello \\\" document\"") == PhraseQuery("hello \" document")
Beispiel #11
0
def test_exceptions():
    assert parse_query("multi* except (multitude or \"no multi\" or multicol*)") == ExceptionQuery(
        PrefixQuery("multi"), LocationOrQuery([
            WordQuery("multitude"), PhraseQuery("no multi"), PrefixQuery("multicol")
        ])
    )
Beispiel #12
0
def test_exception():
    assert parse_query("multi* except multitude") == ExceptionQuery(
        PrefixQuery("multi"), LocationOrQuery([WordQuery("multitude")])
    )
Beispiel #13
0
def test_regex():
    assert parse_query("fi*st") == RegexQuery.from_string_with_asterisks("fi*st")
    assert parse_query("*fi*st*") == RegexQuery.from_string_with_asterisks("*fi*st*")
Beispiel #14
0
def test_suffix():
    assert parse_query("*first") == SuffixQuery("first")
Beispiel #15
0
def test_prefix():
    assert parse_query("first*") == PrefixQuery("first")
Beispiel #16
0
def test_invalid_field():
    with pytest.raises(InvalidQueryException):
        parse_query("fake:first")
Beispiel #17
0
def test_quotes_and_brackets():
    assert parse_query("not (hello \"first :) document\")") == NotQuery(
        AndQuery([WordQuery("hello"), PhraseQuery("first :) document")])
    )
Beispiel #18
0
def test_field_brackets():
    with pytest.raises(InvalidQueryException):
        parse_query("keywords:(deer ych)")
Beispiel #19
0
def test_extra_quotes():
    with pytest.raises(InvalidQueryException):
        parse_query("\"hello \" document\"")
Beispiel #20
0
def test_title_field():
    assert parse_query("title:first") == WordQuery("first", TitleField())
    assert parse_query("TITLE: first") == WordQuery("first", TitleField())
Beispiel #21
0
def test_field_exceptions_brackets():
    assert parse_query("keywords:(multi* except multicol*)") == ExceptionQuery(
        PrefixQuery("multi", KeywordField()),
        LocationOrQuery([PrefixQuery("multicol", KeywordField())])
    )
Beispiel #22
0
def test_rating_quote():
    with pytest.raises(InvalidQueryException):
        parse_query("rating:\"general adult\"")
Beispiel #23
0
def test_keyword_field():
    assert parse_query("keywords:ych") == WordQuery("ych", KeywordField())
    assert parse_query("tags:deer") == WordQuery("deer", KeywordField())
    assert parse_query("tag:dragon") == WordQuery("dragon", KeywordField())
Beispiel #24
0
def test_field_exception_invalid():
    with pytest.raises(InvalidQueryException):
        parse_query("multi* except keywords:multitude")
Beispiel #25
0
def test_parser():
    assert parse_query("first") == WordQuery("first")
    assert parse_query("first document") == AndQuery([WordQuery("first"), WordQuery("document")])
Beispiel #26
0
def test_keyword_exception_invalid():
    with pytest.raises(InvalidQueryException):
        q = parse_query("multi* except (multiple and multitude)")
        print(q)
    with pytest.raises(InvalidQueryException):
        parse_query("multi* except (not multitude)")
Beispiel #27
0
 def _get_blocklist_query(self, blocklist_str: str) -> Query:
     if blocklist_str not in self.blocklist_query_cache:
         self.blocklist_query_cache[blocklist_str] = parse_query(blocklist_str)
     return self.blocklist_query_cache[blocklist_str]
Beispiel #28
0
def test_word_starting_not():
    assert parse_query("notice") == WordQuery("notice")
Beispiel #29
0
 def __init__(self, query_str: str, destination: int):
     self.query_str = query_str
     self.destination = destination
     self.latest_update = None  # type: Optional[datetime.datetime]
     self.query = parse_query(query_str)
     self.paused = False
Beispiel #30
0
def test_artist_field():
    assert parse_query("artist:rajii") == WordQuery("rajii", ArtistField())
    assert parse_query("author:va-artist") == WordQuery("va-artist", ArtistField())
    assert parse_query("poster:fender") == WordQuery("fender", ArtistField())
    assert parse_query("lower:fender") == WordQuery("fender", ArtistField())
    assert parse_query("uploader:zephyr42") == WordQuery("zephyr42", ArtistField())