Spaces:
Runtime error
Runtime error
| 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 | |