Fix random handlers

This commit is contained in:
2023-05-06 18:47:26 +02:00
parent 1f4422a9cd
commit 183351ed68
5 changed files with 15 additions and 2 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,6 @@
.vscode .vscode
.idea .idea
.ruff_cache
__pycache__ __pycache__

View File

@@ -315,7 +315,7 @@ class GetRandomService(Generic[MODEL, QUERY], BaseService[MODEL, QUERY]):
cls, cls,
query: QUERY, query: QUERY,
redis: aioredis.Redis, redis: aioredis.Redis,
) -> int: ) -> int | None:
cached_object_id = await cls._get_random_object_from_cache(query, redis) cached_object_id = await cls._get_random_object_from_cache(query, redis)
if cached_object_id is not None: if cached_object_id is not None:
@@ -325,6 +325,9 @@ class GetRandomService(Generic[MODEL, QUERY], BaseService[MODEL, QUERY]):
await cls.cache_object_ids(query, object_ids, redis) await cls.cache_object_ids(query, object_ids, redis)
if len(object_ids):
return None
return choice(object_ids) return choice(object_ids)

View File

@@ -43,6 +43,9 @@ async def get_random_author(
{"allowed_langs": allowed_langs}, request.app.state.redis {"allowed_langs": allowed_langs}, request.app.state.redis
) )
if author_id is None:
raise HTTPException(status.HTTP_204_NO_CONTENT)
return ( return (
await AuthorDB.objects.select_related(SELECT_RELATED_FIELDS) await AuthorDB.objects.select_related(SELECT_RELATED_FIELDS)
.prefetch_related(PREFETCH_RELATED_FIELDS) .prefetch_related(PREFETCH_RELATED_FIELDS)

View File

@@ -64,6 +64,9 @@ async def get_random_book(
{"allowed_langs": allowed_langs, "genre": genre}, request.app.state.redis {"allowed_langs": allowed_langs, "genre": genre}, request.app.state.redis
) )
if book_id is None:
raise HTTPException(status.HTTP_204_NO_CONTENT)
book = ( book = (
await BookDB.objects.select_related( await BookDB.objects.select_related(
SELECT_RELATED_FIELDS + DETAIL_SELECT_RELATED_FIELDS SELECT_RELATED_FIELDS + DETAIL_SELECT_RELATED_FIELDS

View File

@@ -1,4 +1,4 @@
from fastapi import APIRouter, Depends, Request from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi_pagination import Params from fastapi_pagination import Params
from fastapi_pagination.ext.ormar import paginate from fastapi_pagination.ext.ormar import paginate
@@ -34,6 +34,9 @@ async def get_random_sequence(
request.app.state.redis, request.app.state.redis,
) )
if sequence_id is None:
raise HTTPException(status.HTTP_204_NO_CONTENT)
return await SequenceDB.objects.get(id=sequence_id) return await SequenceDB.objects.get(id=sequence_id)