basis/components/models/tables.py
apeters 1d204f26b8 pre-Korves.Net
Signed-off-by: apeters <apeters@korves.net>
2025-05-21 08:05:07 +00:00

50 lines
1.6 KiB
Python

from config import defaults
from components.utils import ensure_list, to_unique_sorted_str_list
from components.models import *
class TableSearch(BaseModel):
q: Annotated[Any, AfterValidator(lambda x: str(x))] = ""
page: Annotated[Any, AfterValidator(lambda x: int(x) if x else 1)] = 1
page_size: Annotated[
Any,
AfterValidator(lambda x: int(x) if x else defaults.TABLE_PAGE_SIZE),
] = defaults.TABLE_PAGE_SIZE
sorting: tuple = ("created", True)
filters: Annotated[
Any,
AfterValidator(lambda x: to_unique_sorted_str_list(ensure_list(x))),
] = {}
@field_validator("filters", mode="after")
def filters_formatter(cls, v):
filters = dict()
for f in v:
key_name, key_value = f.split(":")
if key_name == "assigned_users":
continue
if key_name not in filters.keys():
filters[key_name] = key_value
else:
if isinstance(filters[key_name], list):
filters[key_name].append(key_value)
else:
filters[key_name] = [filters[key_name], key_value]
return filters
@field_validator("sorting", mode="before")
def split_sorting(cls, v):
if isinstance(v, str):
match v.split(":"):
case [
sort_attr,
direction,
]:
sort_reverse = True if direction == "desc" else False
case _:
sort_reverse = True
sort_attr = "created"
return (sort_attr, sort_reverse)