mirror of
https://github.com/flibusta-apps/telegram_files_server.git
synced 2025-12-06 12:35:39 +01:00
Refactor
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from app.models import UploadBackends
|
||||
from app.serializers import UploadBackend
|
||||
from app.services.storages import BotStorage, StoragesContainer, UserStorage
|
||||
|
||||
|
||||
@@ -39,8 +39,8 @@ class FileDownloader:
|
||||
return user_storages[cls._user_storage_index]
|
||||
|
||||
@classmethod
|
||||
async def _download_via(cls, message_id: int, storage_type: UploadBackends):
|
||||
if storage_type == UploadBackends.bot:
|
||||
async def _download_via(cls, message_id: int, storage_type: UploadBackend):
|
||||
if storage_type == UploadBackend.bot:
|
||||
storage = cls.get_bot_storage()
|
||||
else:
|
||||
storage = cls.get_user_storage()
|
||||
@@ -52,9 +52,7 @@ class FileDownloader:
|
||||
if not cls.bot_storages and not cls.user_storages:
|
||||
raise ValueError("Files storage not exist!")
|
||||
|
||||
if (
|
||||
data := await cls._download_via(message_id, UploadBackends.bot)
|
||||
) is not None:
|
||||
if (data := await cls._download_via(message_id, UploadBackend.bot)) is not None:
|
||||
return data
|
||||
|
||||
return await cls._download_via(message_id, UploadBackends.user)
|
||||
return await cls._download_via(message_id, UploadBackend.user)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
from typing import Any, Optional
|
||||
from typing import Any, BinaryIO, Optional
|
||||
|
||||
from fastapi import UploadFile
|
||||
|
||||
from app.models import UploadBackends, UploadedFile
|
||||
from app.serializers import Data, UploadBackend, UploadedFile
|
||||
from app.services.storages import BotStorage, StoragesContainer, UserStorage
|
||||
|
||||
|
||||
class Wrapper:
|
||||
class Wrapper(BinaryIO):
|
||||
def __init__(self, wrapped: Any, filename: str) -> None:
|
||||
self.wrapped = wrapped
|
||||
self.filename = filename
|
||||
@@ -39,24 +39,26 @@ class FileUploader:
|
||||
self.file = file
|
||||
self.caption = caption
|
||||
|
||||
self.upload_data: Optional[dict] = None
|
||||
self.upload_backend: Optional[UploadBackends] = None
|
||||
self.upload_data: Optional[Data] = None
|
||||
self.upload_backend: Optional[UploadBackend] = None
|
||||
|
||||
async def _upload(self) -> bool:
|
||||
if not self.bot_storages and not self.user_storages:
|
||||
raise ValueError("Files storage not exist!")
|
||||
|
||||
if await self._upload_via(UploadBackends.bot):
|
||||
if await self._upload_via(UploadBackend.bot):
|
||||
return True
|
||||
|
||||
return await self._upload_via(UploadBackends.user)
|
||||
return await self._upload_via(UploadBackend.user)
|
||||
|
||||
async def _upload_via(self, storage_type: UploadBackends) -> bool:
|
||||
if storage_type == UploadBackends.bot:
|
||||
async def _upload_via(self, storage_type: UploadBackend) -> bool:
|
||||
if storage_type == UploadBackend.bot:
|
||||
storage = self.get_bot_storage()
|
||||
else:
|
||||
storage = self.get_user_storage()
|
||||
|
||||
assert self.file.filename
|
||||
|
||||
wrapped = Wrapper(self.file.file, self.file.filename)
|
||||
|
||||
data = await storage.upload(wrapped, caption=self.caption)
|
||||
@@ -69,11 +71,11 @@ class FileUploader:
|
||||
|
||||
return True
|
||||
|
||||
async def _save_to_db(self) -> UploadedFile:
|
||||
return await UploadedFile.objects.create(
|
||||
backend=self.upload_backend,
|
||||
data=self.upload_data,
|
||||
)
|
||||
def get_result(self) -> UploadedFile:
|
||||
assert self.upload_backend is not None
|
||||
assert self.upload_data is not None
|
||||
|
||||
return UploadedFile(backend=self.upload_backend, data=self.upload_data)
|
||||
|
||||
@classmethod
|
||||
def get_bot_storage(cls) -> BotStorage:
|
||||
@@ -107,4 +109,4 @@ class FileUploader:
|
||||
if not upload_result:
|
||||
return None
|
||||
|
||||
return await uploader._save_to_db()
|
||||
return uploader.get_result()
|
||||
|
||||
@@ -25,9 +25,12 @@ class BaseStorage:
|
||||
self, file: telethon.hints.FileLike, caption: Optional[str] = None
|
||||
) -> Optional[tuple[Union[str, int], int]]:
|
||||
try:
|
||||
message = await self.client.send_file(
|
||||
entity=self.channel_id, file=file, caption=caption
|
||||
)
|
||||
if caption:
|
||||
message = await self.client.send_file(
|
||||
entity=self.channel_id, file=file, caption=caption
|
||||
)
|
||||
else:
|
||||
message = await self.client.send_file(entity=self.channel_id, file=file)
|
||||
except telethon.errors.FilePartInvalidError:
|
||||
return None
|
||||
except telethon.errors.PhotoInvalidError:
|
||||
|
||||
Reference in New Issue
Block a user