add more filtering options
This commit is contained in:
parent
7dd10f8bc3
commit
d09880438d
5 changed files with 113 additions and 41 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import base64
|
||||
import binascii
|
||||
import logging
|
||||
|
||||
from starlette.applications import Starlette
|
||||
from starlette.authentication import (
|
||||
|
|
@ -19,6 +20,8 @@ from . import config, db
|
|||
from .db import close_connection_pool, find_ratings, open_connection_pool
|
||||
from .models import Movie, asplain
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BasicAuthBackend(AuthenticationBackend):
|
||||
async def authenticate(self, request):
|
||||
|
|
@ -48,11 +51,13 @@ def truthy(s: str):
|
|||
|
||||
|
||||
async def ratings(request):
|
||||
title = request.query_params.get("title")
|
||||
media_type = request.query_params.get("media_type")
|
||||
ignore_tv_episodes = truthy(request.query_params.get("ignore_tv_episodes"))
|
||||
params = request.query_params
|
||||
rows = await find_ratings(
|
||||
title=title, media_type=media_type, ignore_tv_episodes=ignore_tv_episodes
|
||||
title=params.get("title"),
|
||||
media_type=params.get("media_type"),
|
||||
ignore_tv_episodes=truthy(params.get("ignore_tv_episodes")),
|
||||
include_unrated=truthy(params.get("include_unrated")),
|
||||
year=int(params["year"]) if "year" in params else None,
|
||||
)
|
||||
|
||||
aggr = {}
|
||||
|
|
@ -69,7 +74,8 @@ async def ratings(request):
|
|||
"media_type": r["media_type"],
|
||||
},
|
||||
)
|
||||
mov["user_scores"].append(r["user_score"])
|
||||
if r["user_score"] is not None:
|
||||
mov["user_scores"].append(r["user_score"])
|
||||
|
||||
resp = tuple(aggr.values())
|
||||
|
||||
|
|
@ -121,24 +127,37 @@ async def get_ratings_for_group(request):
|
|||
request.path_params["group_id"]
|
||||
|
||||
|
||||
app = Starlette(
|
||||
on_startup=[open_connection_pool],
|
||||
on_shutdown=[close_connection_pool],
|
||||
routes=[
|
||||
Mount(
|
||||
"/api/v1",
|
||||
routes=[
|
||||
Route("/ratings", ratings), # XXX legacy, remove.
|
||||
Route("/movies", get_movies),
|
||||
Route("/movies", add_movie, methods=["POST"]),
|
||||
Route("/users", add_user, methods=["POST"]),
|
||||
Route("/users/{user_id}/ratings", ratings_for_user),
|
||||
Route("/users/{user_id}/ratings", set_rating_for_user, methods=["PUT"]),
|
||||
Route("/groups", add_group, methods=["POST"]),
|
||||
Route("/groups/{group_id}/users", add_user_to_group, methods=["POST"]),
|
||||
Route("/groups/{group_id}/ratings", get_ratings_for_group),
|
||||
],
|
||||
),
|
||||
],
|
||||
middleware=[Middleware(AuthenticationMiddleware, backend=BasicAuthBackend())],
|
||||
)
|
||||
def create_app():
|
||||
if config.loglevel == "DEBUG":
|
||||
logging.basicConfig(
|
||||
format="%(asctime)s.%(msecs)03d [%(name)s:%(process)d] %(levelname)s: %(message)s",
|
||||
datefmt="%H:%M:%S",
|
||||
level=config.loglevel,
|
||||
)
|
||||
log.debug(f"Log level: {config.loglevel}")
|
||||
|
||||
return Starlette(
|
||||
on_startup=[open_connection_pool],
|
||||
on_shutdown=[close_connection_pool],
|
||||
routes=[
|
||||
Mount(
|
||||
"/api/v1",
|
||||
routes=[
|
||||
Route("/ratings", ratings), # XXX legacy, remove.
|
||||
Route("/movies", get_movies),
|
||||
Route("/movies", add_movie, methods=["POST"]),
|
||||
Route("/users", add_user, methods=["POST"]),
|
||||
Route("/users/{user_id}/ratings", ratings_for_user),
|
||||
Route(
|
||||
"/users/{user_id}/ratings", set_rating_for_user, methods=["PUT"]
|
||||
),
|
||||
Route("/groups", add_group, methods=["POST"]),
|
||||
Route(
|
||||
"/groups/{group_id}/users", add_user_to_group, methods=["POST"]
|
||||
),
|
||||
Route("/groups/{group_id}/ratings", get_ratings_for_group),
|
||||
],
|
||||
),
|
||||
],
|
||||
middleware=[Middleware(AuthenticationMiddleware, backend=BasicAuthBackend())],
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue