allow year relative filtering
This commit is contained in:
parent
d09880438d
commit
a6adfefdd8
3 changed files with 21 additions and 5 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,4 +1,5 @@
|
||||||
*.pyc
|
*.pyc
|
||||||
/.cache
|
/.cache
|
||||||
|
/.pytest_cache
|
||||||
/data/*
|
/data/*
|
||||||
/requirements.txt
|
/requirements.txt
|
||||||
|
|
|
||||||
10
unwind/db.py
10
unwind/db.py
|
|
@ -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 Optional, Type, TypeVar
|
from typing import Literal, Optional, Type, TypeVar
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from databases import Database
|
from databases import Database
|
||||||
|
|
@ -155,7 +155,7 @@ async def find_ratings(
|
||||||
media_type: str = None,
|
media_type: str = None,
|
||||||
ignore_tv_episodes: bool = False,
|
ignore_tv_episodes: bool = False,
|
||||||
include_unrated: bool = False,
|
include_unrated: bool = False,
|
||||||
year: int = None,
|
yearcomp: tuple[Literal["<", "=", ">"], int] = None,
|
||||||
limit_rows=10,
|
limit_rows=10,
|
||||||
):
|
):
|
||||||
values = {
|
values = {
|
||||||
|
|
@ -176,9 +176,11 @@ async def find_ratings(
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
if year:
|
if yearcomp:
|
||||||
|
op, year = yearcomp
|
||||||
|
assert op in "<=>"
|
||||||
values["year"] = year
|
values["year"] = year
|
||||||
conditions.append(f"{Movie._table}.release_year=:year")
|
conditions.append(f"{Movie._table}.release_year{op}:year")
|
||||||
|
|
||||||
if media_type:
|
if media_type:
|
||||||
values["media_type"] = media_type
|
values["media_type"] = media_type
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import base64
|
import base64
|
||||||
import binascii
|
import binascii
|
||||||
import logging
|
import logging
|
||||||
|
from typing import Literal
|
||||||
|
|
||||||
from starlette.applications import Starlette
|
from starlette.applications import Starlette
|
||||||
from starlette.authentication import (
|
from starlette.authentication import (
|
||||||
|
|
@ -50,6 +51,18 @@ def truthy(s: str):
|
||||||
return bool(s) and s.lower() in {"1", "yes", "true"}
|
return bool(s) and s.lower() in {"1", "yes", "true"}
|
||||||
|
|
||||||
|
|
||||||
|
def yearcomp(s: str):
|
||||||
|
if not s:
|
||||||
|
return
|
||||||
|
|
||||||
|
comp: Literal["<", "=", ">"] = "="
|
||||||
|
if (prefix := s[0]) in "<=>":
|
||||||
|
comp = prefix # type: ignore
|
||||||
|
s = s[len(prefix) :]
|
||||||
|
|
||||||
|
return comp, int(s)
|
||||||
|
|
||||||
|
|
||||||
async def ratings(request):
|
async def ratings(request):
|
||||||
params = request.query_params
|
params = request.query_params
|
||||||
rows = await find_ratings(
|
rows = await find_ratings(
|
||||||
|
|
@ -57,7 +70,7 @@ async def ratings(request):
|
||||||
media_type=params.get("media_type"),
|
media_type=params.get("media_type"),
|
||||||
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")),
|
||||||
year=int(params["year"]) if "year" in params else None,
|
yearcomp=yearcomp(params["year"]) if "year" in params else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
aggr = {}
|
aggr = {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue