diff --git a/src/app/services/cache_updater.py b/src/app/services/cache_updater.py index 9699b4b..f07aa87 100644 --- a/src/app/services/cache_updater.py +++ b/src/app/services/cache_updater.py @@ -1,8 +1,7 @@ import collections from datetime import date, timedelta from io import BytesIO -from tempfile import SpooledTemporaryFile -from typing import Optional, cast +from typing import Optional from fastapi import UploadFile @@ -81,6 +80,7 @@ async def cache_file(book: Book, file_type: str) -> Optional[CachedFile]: object_id=book.id, object_type=file_type ).exists(): return + try: data = await download(book.source.id, book.remote_id, file_type) except httpx.HTTPError: @@ -95,14 +95,14 @@ async def cache_file(book: Book, file_type: str) -> Optional[CachedFile]: temp_file = UploadFile(BytesIO(), filename=filename) async for chunk in response.aiter_bytes(2048): await temp_file.write(chunk) + + file_size = temp_file.file.tell() await temp_file.seek(0) await response.aclose() await client.aclose() - upload_data = await upload_file( - cast(SpooledTemporaryFile, temp_file.file), filename, caption - ) + upload_data = await upload_file(temp_file.file, file_size, filename, caption) if upload_data is None: return None diff --git a/src/app/services/files_client.py b/src/app/services/files_client.py index 61ef702..33dcefd 100644 --- a/src/app/services/files_client.py +++ b/src/app/services/files_client.py @@ -1,27 +1,29 @@ -from datetime import datetime -from tempfile import SpooledTemporaryFile -from typing import Optional +from typing import BinaryIO, Optional import httpx from pydantic import BaseModel +from typing_extensions import TypedDict from core.config import env_config +class Data(TypedDict): + chat_id: str | int + message_id: int + + class UploadedFile(BaseModel): - id: int backend: str - data: dict - upload_time: datetime + data: Data async def upload_file( - content: SpooledTemporaryFile, filename: str, caption: str + content: BinaryIO, content_size: int, filename: str, caption: str ) -> Optional[UploadedFile]: headers = {"Authorization": env_config.FILES_SERVER_API_KEY} async with httpx.AsyncClient() as client: - form = {"caption": caption} + form = {"caption": caption, "file_size": content_size} files = {"file": (filename, content)} response = await client.post(