mirror of
https://github.com/flibusta-apps/telegram_files_cache_server.git
synced 2025-12-06 06:35:38 +01:00
Update caching
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user