add web API option to limit the number of results

This commit is contained in:
ducklet 2021-06-22 12:22:50 +02:00
parent f602542f43
commit 0a21cb4420
2 changed files with 22 additions and 4 deletions

View file

@ -2,7 +2,7 @@ import logging
import re
from dataclasses import fields
from pathlib import Path
from typing import Literal, Optional, Type, TypeVar
from typing import Literal, Optional, Type, TypeVar, Union
import sqlalchemy
from databases import Database
@ -156,9 +156,9 @@ async def find_ratings(
ignore_tv_episodes: bool = False,
include_unrated: bool = False,
yearcomp: tuple[Literal["<", "=", ">"], int] = None,
limit_rows=10,
limit_rows: int = 10,
):
values = {
values: dict[str, Union[int, str]] = {
"limit_rows": limit_rows,
}

View file

@ -1,7 +1,7 @@
import base64
import binascii
import logging
from typing import Literal
from typing import Literal, Optional
from starlette.applications import Starlette
from starlette.authentication import (
@ -63,6 +63,23 @@ def yearcomp(s: str):
return comp, int(s)
def as_int(x, *, max: int = None, min: Optional[int] = 1, default: int = None):
try:
if not isinstance(x, int):
x = int(x)
if min is not None and x < min:
return min
if max is not None and x > max:
return max
return x
except:
if default is None:
raise
return default
async def ratings(request):
params = request.query_params
rows = await find_ratings(
@ -71,6 +88,7 @@ async def ratings(request):
ignore_tv_episodes=truthy(params.get("ignore_tv_episodes")),
include_unrated=truthy(params.get("include_unrated")),
yearcomp=yearcomp(params["year"]) if "year" in params else None,
limit_rows=as_int(params.get("per_page"), max=10, default=5),
)
aggr = {}