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