Fix caching

This commit is contained in:
2023-08-06 15:21:02 +02:00
parent 3d127abfa0
commit da0dceb5f5
2 changed files with 15 additions and 13 deletions

View File

@@ -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

View File

@@ -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(