Fix RAM usage

This commit is contained in:
2022-03-03 09:21:08 +03:00
parent 5a1ff6474f
commit 7af762a918
4 changed files with 82 additions and 32 deletions

View File

@@ -1,5 +1,4 @@
from io import BytesIO
from typing import Optional
from typing import Optional, Any
from fastapi import UploadFile
@@ -7,6 +6,21 @@ from app.models import UploadedFile, UploadBackends
from app.services.storages import StoragesContainer, BotStorage, UserStorage
class Wrapper:
def __init__(self, wrapped: Any, filename: str) -> None:
self.wrapped = wrapped
self.filename = filename
def seekable(self):
return True
def __getattr__(self, __name: str) -> Any:
if __name == "name":
return self.filename
return getattr(self.wrapped, __name)
class FileUploader:
_bot_storage_index = 0
_user_storage_index = 0
@@ -38,23 +52,14 @@ class FileUploader:
return await self._upload_via(UploadBackends.user)
async def _upload_via(self, storage_type: UploadBackends) -> bool:
if not self.bot_storages:
return False
data = await self.file.read()
if isinstance(data, str):
data = data.encode()
bytes_io = BytesIO(data)
bytes_io.name = self.file.filename
if storage_type == UploadBackends.bot:
storage = self.get_bot_storage()
else:
storage = self.get_user_storage()
data = await storage.upload(bytes_io, caption=self.caption) # type: ignore
wrapped = Wrapper(self.file.file, self.file.filename)
data = await storage.upload(wrapped, caption=self.caption)
if not data:
return False