from typing import Optional, Any, Tuple, List, Union
from .abstract import (
LeafQueryClause,
AbstractSingleFieldQueryClause,
KeyFieldQueryClause,
)
from pandagg.types import QueryName
[docs]class Exists(LeafQueryClause):
KEY = "exists"
def __init__(self, field: str, _name: Optional[QueryName] = None) -> None:
self.field: str = field
super(Exists, self).__init__(_name=_name, field=field)
[docs] def line_repr(self, depth: int, **kwargs: Any) -> Tuple[str, str]:
return self.KEY, "field=%s" % self.field
[docs]class Fuzzy(KeyFieldQueryClause):
KEY = "fuzzy"
_implicit_param = "value"
[docs]class Ids(LeafQueryClause):
KEY = "ids"
def __init__(
self, values: List[Union[int, str]], _name: Optional[QueryName] = None
) -> None:
self.values: List[Union[int, str]] = values
super(Ids, self).__init__(_name=_name, values=values)
[docs] def line_repr(self, depth: int, **kwargs: Any) -> Tuple[str, str]:
return self.KEY, "values=%s" % self.values
[docs]class Prefix(KeyFieldQueryClause):
KEY = "prefix"
_implicit_param = "value"
[docs]class Range(KeyFieldQueryClause):
KEY = "range"
[docs]class Regexp(KeyFieldQueryClause):
KEY = "regexp"
_implicit_param = "value"
[docs]class Term(KeyFieldQueryClause):
KEY = "term"
_implicit_param = "value"
[docs]class Terms(AbstractSingleFieldQueryClause):
KEY = "terms"
def __init__(self, **body: Any) -> None:
_name: Optional[str] = body.pop("_name", None)
boost: Optional[float] = body.pop("boost", None)
if len(body) != 1:
raise ValueError("Wrong declaration: %s" % body)
field, terms = self.expand__to_dot(body).popitem()
super(Terms, self).__init__(
_name=_name, field=field, boost=boost, **{field: terms}
)
[docs]class TermsSet(KeyFieldQueryClause):
KEY = "terms_set"
_implicit_param = "terms"
[docs]class Type(KeyFieldQueryClause):
KEY = "type"
_implicit_param = "value"
[docs]class Wildcard(KeyFieldQueryClause):
KEY = "wildcard"
_implicit_param = "value"