From ed8de9e9780dde8b388d218a57c405cec43fcb0a Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Thu, 25 May 2023 18:42:31 +0200 Subject: [PATCH] Update caching --- src/app/services/cache_updater.py | 26 +++++++++++++++++++------- src/app/services/library_client.py | 28 +++++++++++++++++++++------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/app/services/cache_updater.py b/src/app/services/cache_updater.py index 5a7d975..2bf0608 100644 --- a/src/app/services/cache_updater.py +++ b/src/app/services/cache_updater.py @@ -1,4 +1,5 @@ import collections +from datetime import date, timedelta from io import BytesIO from tempfile import SpooledTemporaryFile 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.downloader import download 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 @@ -31,8 +32,12 @@ class FileTypeNotAllowed(Exception): @broker.task -async def check_books_page(page_number: int) -> bool: - page = await get_books(page_number, PAGE_SIZE) +async def check_books_page( + 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] @@ -55,11 +60,18 @@ async def check_books_page(page_number: int) -> bool: @broker.task -async def check_books(*args, **kwargs) -> bool: # NOSONAR - last_book_id = await get_last_book_id() +async def check_books(*args, **kwargs) -> bool: + 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): - await check_books_page.kiq(page_number) + books_page = await get_books( + 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 diff --git a/src/app/services/library_client.py b/src/app/services/library_client.py index f0adf7b..3e6d8ce 100644 --- a/src/app/services/library_client.py +++ b/src/app/services/library_client.py @@ -1,5 +1,6 @@ from datetime import date from typing import Generic, Optional, TypeVar +from urllib.parse import urlencode import httpx from pydantic import BaseModel @@ -77,16 +78,29 @@ async def get_book( return await get_book(book_id, retry=retry - 1, last_exp=e) -async def get_books(page: int, page_size: int) -> Page[BaseBookInfo]: - id_gte = page * page_size - id_lte = (page + 1) * page_size - 1 +async def get_books( + page: int, + 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: response = await client.get( - ( - f"{env_config.LIBRARY_URL}/api/v1/books/base/" - f"?is_deleted=false&id_gte={id_gte}&id_lte={id_lte}&no_cache=true" - ), + f"{env_config.LIBRARY_URL}/api/v1/books/base/?{params_string}", headers=AUTH_HEADERS, )