add web API option to limit the number of results
This commit is contained in:
parent
f602542f43
commit
0a21cb4420
2 changed files with 22 additions and 4 deletions
|
|
@ -2,7 +2,7 @@ import logging
|
||||||
import re
|
import re
|
||||||
from dataclasses import fields
|
from dataclasses import fields
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Literal, Optional, Type, TypeVar
|
from typing import Literal, Optional, Type, TypeVar, Union
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from databases import Database
|
from databases import Database
|
||||||
|
|
@ -156,9 +156,9 @@ async def find_ratings(
|
||||||
ignore_tv_episodes: bool = False,
|
ignore_tv_episodes: bool = False,
|
||||||
include_unrated: bool = False,
|
include_unrated: bool = False,
|
||||||
yearcomp: tuple[Literal["<", "=", ">"], int] = None,
|
yearcomp: tuple[Literal["<", "=", ">"], int] = None,
|
||||||
limit_rows=10,
|
limit_rows: int = 10,
|
||||||
):
|
):
|
||||||
values = {
|
values: dict[str, Union[int, str]] = {
|
||||||
"limit_rows": limit_rows,
|
"limit_rows": limit_rows,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import base64
|
import base64
|
||||||
import binascii
|
import binascii
|
||||||
import logging
|
import logging
|
||||||
from typing import Literal
|
from typing import Literal, Optional
|
||||||
|
|
||||||
from starlette.applications import Starlette
|
from starlette.applications import Starlette
|
||||||
from starlette.authentication import (
|
from starlette.authentication import (
|
||||||
|
|
@ -63,6 +63,23 @@ def yearcomp(s: str):
|
||||||
return comp, int(s)
|
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):
|
async def ratings(request):
|
||||||
params = request.query_params
|
params = request.query_params
|
||||||
rows = await find_ratings(
|
rows = await find_ratings(
|
||||||
|
|
@ -71,6 +88,7 @@ async def ratings(request):
|
||||||
ignore_tv_episodes=truthy(params.get("ignore_tv_episodes")),
|
ignore_tv_episodes=truthy(params.get("ignore_tv_episodes")),
|
||||||
include_unrated=truthy(params.get("include_unrated")),
|
include_unrated=truthy(params.get("include_unrated")),
|
||||||
yearcomp=yearcomp(params["year"]) if "year" in params else None,
|
yearcomp=yearcomp(params["year"]) if "year" in params else None,
|
||||||
|
limit_rows=as_int(params.get("per_page"), max=10, default=5),
|
||||||
)
|
)
|
||||||
|
|
||||||
aggr = {}
|
aggr = {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue