mirror of
https://github.com/flibusta-apps/book_library_server.git
synced 2025-12-06 15:15:36 +01:00
Update page
This commit is contained in:
@@ -6,6 +6,7 @@ from random import choice
|
||||
from typing import Generic, Optional, TypedDict, TypeVar, Union
|
||||
|
||||
from databases import Database
|
||||
from fastapi_pagination import Page
|
||||
from fastapi_pagination.api import resolve_params
|
||||
from fastapi_pagination.bases import AbstractParams, RawParams
|
||||
import meilisearch
|
||||
@@ -15,7 +16,6 @@ from redis import asyncio as aioredis
|
||||
from sqlalchemy import Table
|
||||
|
||||
from app.utils.orjson_default import default as orjson_default
|
||||
from app.utils.pagination import Page
|
||||
from core.config import env_config
|
||||
|
||||
|
||||
@@ -117,6 +117,9 @@ class BaseSearchService(Generic[MODEL, QUERY], BaseService[MODEL, QUERY]):
|
||||
if not await redis.exists(active_key):
|
||||
return None
|
||||
|
||||
assert params.offset
|
||||
assert params.limit
|
||||
|
||||
objects_count, objects = await asyncio.gather(
|
||||
redis.llen(key),
|
||||
redis.lrange(key, params.offset, params.offset + params.limit),
|
||||
@@ -138,6 +141,9 @@ class BaseSearchService(Generic[MODEL, QUERY], BaseService[MODEL, QUERY]):
|
||||
):
|
||||
return cached_object_ids
|
||||
|
||||
assert params.limit
|
||||
assert params.offset
|
||||
|
||||
object_ids = await cls._get_object_ids(query)
|
||||
limited_object_ids = object_ids[params.offset : params.offset + params.limit]
|
||||
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
from math import ceil
|
||||
from typing import (
|
||||
Any,
|
||||
Generic,
|
||||
Protocol,
|
||||
Sequence,
|
||||
TypeVar,
|
||||
runtime_checkable,
|
||||
)
|
||||
|
||||
from fastapi_pagination import Params
|
||||
from fastapi_pagination.bases import AbstractParams, BasePage
|
||||
from fastapi_pagination.types import GreaterEqualOne, GreaterEqualZero
|
||||
import orjson
|
||||
|
||||
from app.utils.orjson_default import orjson_dumps
|
||||
|
||||
|
||||
@runtime_checkable
|
||||
class ToDict(Protocol):
|
||||
def dict(self) -> dict:
|
||||
...
|
||||
|
||||
|
||||
T = TypeVar("T", ToDict, Any)
|
||||
|
||||
|
||||
class Page(BasePage[T], Generic[T]):
|
||||
page: GreaterEqualOne
|
||||
size: GreaterEqualOne
|
||||
total_pages: GreaterEqualZero
|
||||
|
||||
__params_type__ = Params
|
||||
|
||||
class Config:
|
||||
json_loads = orjson.loads
|
||||
json_dumps = orjson_dumps
|
||||
|
||||
@classmethod
|
||||
def create(
|
||||
cls,
|
||||
items: Sequence[T],
|
||||
params: AbstractParams,
|
||||
*,
|
||||
total: int,
|
||||
**kwargs: Any,
|
||||
) -> "Page[T]":
|
||||
if not isinstance(params, Params):
|
||||
raise ValueError("Page should be used with Params")
|
||||
|
||||
pages = ceil(total / params.size)
|
||||
|
||||
return cls(
|
||||
total=total,
|
||||
items=[item.dict() for item in items],
|
||||
page=params.page,
|
||||
size=params.size,
|
||||
total_pages=pages,
|
||||
**kwargs,
|
||||
)
|
||||
@@ -2,7 +2,7 @@ from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
|
||||
from fastapi_pagination import Params
|
||||
from fastapi_pagination import Page, Params
|
||||
from fastapi_pagination.ext.ormar import paginate
|
||||
|
||||
from app.depends import check_token, get_allowed_langs
|
||||
@@ -13,7 +13,6 @@ from app.serializers.author import Author, AuthorBook, TranslatedBook
|
||||
from app.serializers.author_annotation import AuthorAnnotation
|
||||
from app.services.author import AuthorMeiliSearchService, GetRandomAuthorService
|
||||
from app.services.translator import TranslatorMeiliSearchService
|
||||
from app.utils.pagination import Page
|
||||
|
||||
|
||||
author_router = APIRouter(
|
||||
|
||||
@@ -2,7 +2,7 @@ from typing import Annotated, Optional
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
|
||||
from fastapi_pagination import Params
|
||||
from fastapi_pagination import Page, Params
|
||||
|
||||
from app.depends import check_token, get_allowed_langs
|
||||
from app.filters.book import get_book_filter
|
||||
@@ -16,7 +16,6 @@ from app.services.book import (
|
||||
BookMeiliSearchService,
|
||||
GetRandomBookService,
|
||||
)
|
||||
from app.utils.pagination import Page
|
||||
|
||||
|
||||
book_router = APIRouter(
|
||||
|
||||
@@ -2,7 +2,7 @@ from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
|
||||
from fastapi_pagination import Params
|
||||
from fastapi_pagination import Page, Params
|
||||
from fastapi_pagination.ext.ormar import paginate
|
||||
|
||||
from app.depends import check_token, get_allowed_langs
|
||||
@@ -10,7 +10,6 @@ from app.filters.genre import get_genre_filter
|
||||
from app.models import Genre as GenreDB
|
||||
from app.serializers.genre import Genre
|
||||
from app.services.genre import GenreMeiliSearchService
|
||||
from app.utils.pagination import Page
|
||||
|
||||
|
||||
genre_router = APIRouter(
|
||||
|
||||
@@ -2,7 +2,7 @@ from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
|
||||
from fastapi_pagination import Params
|
||||
from fastapi_pagination import Page, Params
|
||||
from fastapi_pagination.ext.ormar import paginate
|
||||
|
||||
from app.depends import check_token, get_allowed_langs
|
||||
@@ -11,7 +11,6 @@ from app.models import Sequence as SequenceDB
|
||||
from app.serializers.sequence import Book as SequenceBook
|
||||
from app.serializers.sequence import Sequence
|
||||
from app.services.sequence import GetRandomSequenceService, SequenceMeiliSearchService
|
||||
from app.utils.pagination import Page
|
||||
|
||||
|
||||
sequence_router = APIRouter(
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from fastapi_pagination import Params
|
||||
from fastapi_pagination import Page, Params
|
||||
from fastapi_pagination.ext.ormar import paginate
|
||||
|
||||
from app.depends import check_token
|
||||
from app.models import Translation as TranslationDB
|
||||
from app.serializers.translation import Translation
|
||||
from app.utils.pagination import Page
|
||||
|
||||
|
||||
translation_router = APIRouter(
|
||||
|
||||
Reference in New Issue
Block a user