示例#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")]
    )
示例#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")]
    )
示例#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")
示例#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}
示例#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"))])
示例#6
0
def test_quotes():
    assert parse_query("\"first document\"") == PhraseQuery("first document")
    assert parse_query("\"Hello WORLD!\"") == PhraseQuery("Hello WORLD!")
示例#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)])
示例#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())
示例#9
0
def test_rating_invalid():
    with pytest.raises(InvalidQueryException):
        parse_query("rating:alright")
示例#10
0
def test_escaped_quotes():
    assert parse_query("\"hello \\\" document\"") == PhraseQuery("hello \" document")
示例#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")
        ])
    )
示例#12
0
def test_exception():
    assert parse_query("multi* except multitude") == ExceptionQuery(
        PrefixQuery("multi"), LocationOrQuery([WordQuery("multitude")])
    )
示例#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*")
示例#14
0
def test_suffix():
    assert parse_query("*first") == SuffixQuery("first")
示例#15
0
def test_prefix():
    assert parse_query("first*") == PrefixQuery("first")
示例#16
0
def test_invalid_field():
    with pytest.raises(InvalidQueryException):
        parse_query("fake:first")
示例#17
0
def test_quotes_and_brackets():
    assert parse_query("not (hello \"first :) document\")") == NotQuery(
        AndQuery([WordQuery("hello"), PhraseQuery("first :) document")])
    )
示例#18
0
def test_field_brackets():
    with pytest.raises(InvalidQueryException):
        parse_query("keywords:(deer ych)")
示例#19
0
def test_extra_quotes():
    with pytest.raises(InvalidQueryException):
        parse_query("\"hello \" document\"")
示例#20
0
def test_title_field():
    assert parse_query("title:first") == WordQuery("first", TitleField())
    assert parse_query("TITLE: first") == WordQuery("first", TitleField())
示例#21
0
def test_field_exceptions_brackets():
    assert parse_query("keywords:(multi* except multicol*)") == ExceptionQuery(
        PrefixQuery("multi", KeywordField()),
        LocationOrQuery([PrefixQuery("multicol", KeywordField())])
    )
示例#22
0
def test_rating_quote():
    with pytest.raises(InvalidQueryException):
        parse_query("rating:\"general adult\"")
示例#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())
示例#24
0
def test_field_exception_invalid():
    with pytest.raises(InvalidQueryException):
        parse_query("multi* except keywords:multitude")
示例#25
0
def test_parser():
    assert parse_query("first") == WordQuery("first")
    assert parse_query("first document") == AndQuery([WordQuery("first"), WordQuery("document")])
示例#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)")
示例#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]
示例#28
0
def test_word_starting_not():
    assert parse_query("notice") == WordQuery("notice")
示例#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
示例#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())