convert mp3 to ogg

This commit is contained in:
Robert 2024-03-19 00:24:54 +07:00
parent f41b8aabd9
commit 888da4b299
No known key found for this signature in database
GPG Key ID: F631C7FD957D5F22
2 changed files with 27 additions and 2 deletions

View File

@ -2,6 +2,7 @@ from chain_service.services.file_uploader import FileUploaderService
from .planfix_client import PlanfixClientDependency from .planfix_client import PlanfixClientDependency
from .uploaded_file_repository import UploadedFileRepositoryDependency from .uploaded_file_repository import UploadedFileRepositoryDependency
from .audio_converter_service import AudioConverterServiceDependency
from fastapi import Depends from fastapi import Depends
from typing import Annotated from typing import Annotated
@ -10,9 +11,12 @@ from typing import Annotated
def get_file_uploader_service( def get_file_uploader_service(
planfix_client: PlanfixClientDependency, planfix_client: PlanfixClientDependency,
uploaded_file_repository: UploadedFileRepositoryDependency, uploaded_file_repository: UploadedFileRepositoryDependency,
audio_converter_service: AudioConverterServiceDependency,
) -> FileUploaderService: ) -> FileUploaderService:
return FileUploaderService( return FileUploaderService(
planfix_client=planfix_client, uploaded_file_repository=uploaded_file_repository planfix_client=planfix_client,
uploaded_file_repository=uploaded_file_repository,
audio_converter_service=audio_converter_service,
) )

View File

@ -1,8 +1,11 @@
from chain_service.database.models.chain import Chain from chain_service.database.models.chain import Chain
from chain_service.database.models.uploaded_file import UploadedFile from chain_service.database.models.uploaded_file import UploadedFile
from chain_service.repositories.uploaded_file import UploadedFileRepository from chain_service.repositories.uploaded_file import UploadedFileRepository
from chain_service.services.audio_converter import AudioConverterService
from io import BytesIO
from loguru import logger from loguru import logger
from httpx import AsyncClient
from planfix_client import PlanfixClient from planfix_client import PlanfixClient
from planfix_client.exceptions import PlanfixAPIError from planfix_client.exceptions import PlanfixAPIError
@ -13,9 +16,12 @@ class FileUploaderService:
self, self,
planfix_client: PlanfixClient, planfix_client: PlanfixClient,
uploaded_file_repository: UploadedFileRepository, uploaded_file_repository: UploadedFileRepository,
audio_converter_service: AudioConverterService,
): ):
self.client = AsyncClient()
self.planfix_client = planfix_client self.planfix_client = planfix_client
self.uploaded_file_repository = uploaded_file_repository self.uploaded_file_repository = uploaded_file_repository
self.audio_converter_service = audio_converter_service
async def upload_from_chain(self, chain: Chain): async def upload_from_chain(self, chain: Chain):
file_urls_to_upload = list() file_urls_to_upload = list()
@ -35,7 +41,22 @@ class FileUploaderService:
if uploaded_file: if uploaded_file:
return return
uploaded_file_id = await self.planfix_client.upload_file_from_url(file_url) if file_url.endswith(".mp3"):
converted_content = await self.audio_converter_service.mp3_to_ogg(
mp3=BytesIO((await self.client.get(file_url)).read())
)
uploaded_file_id = await self.planfix_client.upload_file(
file_content=converted_content
)
logger.info("Finished upload")
else:
uploaded_file_id = await self.planfix_client.upload_file_from_url(
file_url
)
await self.uploaded_file_repository.upsert( await self.uploaded_file_repository.upsert(
UploadedFile(file_id=uploaded_file_id, file_url=file_url) UploadedFile(file_id=uploaded_file_id, file_url=file_url)