Update caching

This commit is contained in:
2023-05-25 18:42:31 +02:00
parent 688e673364
commit ed8de9e978
2 changed files with 40 additions and 14 deletions

View File

@@ -1,4 +1,5 @@
import collections import collections
from datetime import date, timedelta
from io import BytesIO from io import BytesIO
from tempfile import SpooledTemporaryFile from tempfile import SpooledTemporaryFile
from typing import Optional, cast from typing import Optional, cast
@@ -14,7 +15,7 @@ from app.models import CachedFile
from app.services.caption_getter import get_caption from app.services.caption_getter import get_caption
from app.services.downloader import download from app.services.downloader import download
from app.services.files_client import upload_file from app.services.files_client import upload_file
from app.services.library_client import Book, get_book, get_books, get_last_book_id from app.services.library_client import Book, get_book, get_books
from core.taskiq_worker import broker from core.taskiq_worker import broker
@@ -31,8 +32,12 @@ class FileTypeNotAllowed(Exception):
@broker.task @broker.task
async def check_books_page(page_number: int) -> bool: async def check_books_page(
page = await get_books(page_number, PAGE_SIZE) page_number: int, uploaded_gte: date, uploaded_lte: date
) -> bool:
page = await get_books(
page_number, PAGE_SIZE, uploaded_gte=uploaded_gte, uploaded_lte=uploaded_lte
)
object_ids = [book.id for book in page.items] object_ids = [book.id for book in page.items]
@@ -55,11 +60,18 @@ async def check_books_page(page_number: int) -> bool:
@broker.task @broker.task
async def check_books(*args, **kwargs) -> bool: # NOSONAR async def check_books(*args, **kwargs) -> bool:
last_book_id = await get_last_book_id() uploaded_lte = date.today() + timedelta(days=1)
uploaded_gte = date.today() - timedelta(days=1)
for page_number in range(0, last_book_id // 100 + 1): books_page = await get_books(
await check_books_page.kiq(page_number) 1, PAGE_SIZE, uploaded_gte=uploaded_gte, uploaded_lte=uploaded_lte
)
for page_number in range(1, books_page.total_pages + 1):
await check_books_page.kiq(
page_number, uploaded_gte=uploaded_gte, uploaded_lte=uploaded_lte
)
return True return True

View File

@@ -1,5 +1,6 @@
from datetime import date from datetime import date
from typing import Generic, Optional, TypeVar from typing import Generic, Optional, TypeVar
from urllib.parse import urlencode
import httpx import httpx
from pydantic import BaseModel from pydantic import BaseModel
@@ -77,16 +78,29 @@ async def get_book(
return await get_book(book_id, retry=retry - 1, last_exp=e) return await get_book(book_id, retry=retry - 1, last_exp=e)
async def get_books(page: int, page_size: int) -> Page[BaseBookInfo]: async def get_books(
id_gte = page * page_size page: int,
id_lte = (page + 1) * page_size - 1 page_size: int,
uploaded_gte: date | None = None,
uploaded_lte: date | None = None,
) -> Page[BaseBookInfo]:
params: dict[str, str] = {
"page": str(page),
"page_size": str(page_size),
"is_deleted": "false",
}
if uploaded_gte:
params["uploaded_gte"] = uploaded_gte.isoformat()
if uploaded_lte:
params["uploaded_lte"] = uploaded_lte.isoformat()
params_string = urlencode(params)
async with httpx.AsyncClient(timeout=5 * 60) as client: async with httpx.AsyncClient(timeout=5 * 60) as client:
response = await client.get( response = await client.get(
( f"{env_config.LIBRARY_URL}/api/v1/books/base/?{params_string}",
f"{env_config.LIBRARY_URL}/api/v1/books/base/"
f"?is_deleted=false&id_gte={id_gte}&id_lte={id_lte}&no_cache=true"
),
headers=AUTH_HEADERS, headers=AUTH_HEADERS,
) )