Source code for fsh_lib.filter_values
from typing import Literal
from pydantic import BaseModel, Field
DEFAULT_LIMIT = 20
_MAX_LIMIT = 200
[docs]
class FilterValuesRequest(BaseModel):
search: str = ""
limit: int = Field(default=DEFAULT_LIMIT, ge=1, le=_MAX_LIMIT)
ids: dict[str, tuple[str, ...]] = Field(default_factory=dict)
fields: list[str] = Field(default_factory=list)
@property
def filter_fields(self) -> list[str] | None:
if self.ids:
return list(self.ids.keys())
if self.fields:
return self.fields
return None
@property
def computed_limit(self) -> int:
return max(self.limit, sum(len(ids) for ids in self.ids.values()))
@property
def mode(self) -> Literal["ids", "trigram"]:
if not self.fields and self.ids:
return "ids"
ids = {_id for field in self.fields for _id in self.ids.get(field, ())}
if ids:
return "ids"
return "trigram"