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"