file uploader logic
This commit is contained in:
parent
da227262ac
commit
54f2370cf5
21
chain_service/dependencies/file_uploader_service.py
Normal file
21
chain_service/dependencies/file_uploader_service.py
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
from chain_service.services.file_uploader import FileUploaderService
|
||||||
|
|
||||||
|
from .planfix_client import PlanfixClientDependency
|
||||||
|
from .uploaded_file_repository import UploadedFileRepositoryDependency
|
||||||
|
|
||||||
|
from fastapi import Depends
|
||||||
|
from typing import Annotated
|
||||||
|
|
||||||
|
|
||||||
|
def get_file_uploader_service(
|
||||||
|
planfix_client: PlanfixClientDependency,
|
||||||
|
uploaded_file_repository: UploadedFileRepositoryDependency,
|
||||||
|
) -> FileUploaderService:
|
||||||
|
return FileUploaderService(
|
||||||
|
planfix_client=planfix_client, uploaded_file_repository=uploaded_file_repository
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
FileUploaderServiceDependency = Annotated[
|
||||||
|
FileUploaderService, Depends(get_file_uploader_service)
|
||||||
|
]
|
||||||
45
chain_service/services/file_uploader.py
Normal file
45
chain_service/services/file_uploader.py
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
from chain_service.database.models.chain import Chain
|
||||||
|
from chain_service.database.models.uploaded_file import UploadedFile
|
||||||
|
from chain_service.repositories.uploaded_file import UploadedFileRepository
|
||||||
|
|
||||||
|
from loguru import logger
|
||||||
|
from planfix_client import PlanfixClient
|
||||||
|
from planfix_client.exceptions import PlanfixAPIError
|
||||||
|
|
||||||
|
|
||||||
|
class FileUploaderService:
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
planfix_client: PlanfixClient,
|
||||||
|
uploaded_file_repository: UploadedFileRepository,
|
||||||
|
):
|
||||||
|
self.planfix_client = planfix_client
|
||||||
|
self.uploaded_file_repository = uploaded_file_repository
|
||||||
|
|
||||||
|
async def upload_from_chain(self, chain: Chain):
|
||||||
|
files_to_upload = list()
|
||||||
|
|
||||||
|
for action in chain.actions:
|
||||||
|
file_urls_to_upload = [*files_to_upload, *action.file_urls]
|
||||||
|
|
||||||
|
for file_url in file_urls_to_upload:
|
||||||
|
await self.upload_file_by_url(file_url)
|
||||||
|
|
||||||
|
async def upload_file_by_url(self, file_url: str):
|
||||||
|
try:
|
||||||
|
uploaded_file = await self.uploaded_file_repository.get_by_file_url(
|
||||||
|
file_url
|
||||||
|
)
|
||||||
|
|
||||||
|
if uploaded_file:
|
||||||
|
return
|
||||||
|
|
||||||
|
uploaded_file_id = await self.planfix_client.upload_file_from_url(file_url)
|
||||||
|
|
||||||
|
await self.uploaded_file_repository.upsert(
|
||||||
|
UploadedFile(file_id=uploaded_file_id, file_url=file_url)
|
||||||
|
)
|
||||||
|
|
||||||
|
except PlanfixAPIError:
|
||||||
|
logger.exception(f"Error while uploading to planfix {file_url=}")
|
||||||
Loading…
Reference in New Issue
Block a user