Spaces:
Runtime error
Runtime error
File size: 1,456 Bytes
66340f1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import json
from typing import Callable, Optional, Type
from fastapi import HTTPException, Query
from sqlalchemy import UnaryExpression, asc, desc
from app.db import Base
from app.schemas.request_params import RequestParams
def parse_react_admin_params(model: Type[Base]) -> Callable:
"""Parses sort and range parameters coming from a react-admin request"""
def inner(
sort_: Optional[str] = Query(
None,
alias="sort",
description='Format: `["field_name", "direction"]`',
example='["id", "ASC"]',
),
range_: Optional[str] = Query(
None,
alias="range",
description="Format: `[start, end]`",
example="[0, 10]",
),
) -> RequestParams:
skip, limit = 0, 10
if range_:
start, end = json.loads(range_)
skip, limit = start, (end - start + 1)
order_by: UnaryExpression = desc(model.id)
if sort_:
sort_column, sort_order = json.loads(sort_)
if sort_order.lower() == "asc":
direction = asc
elif sort_order.lower() == "desc":
direction = desc
else:
raise HTTPException(400, f"Invalid sort direction {sort_order}")
order_by = direction(model.__table__.c[sort_column])
return RequestParams(skip=skip, limit=limit, order_by=order_by)
return inner
|