""" Validadores comunes para los endpoints de audio. """ import os from fastapi import UploadFile, HTTPException from app.schemas.audio_standard import AudioRequestFile # Configuración de validaciones ALLOWED_AUDIO_FORMATS = ["audio/mpeg", "audio/wav", "audio/x-wav", "audio/mp4", "audio/x-m4a"] ALLOWED_EXTENSIONS = [".mp3", ".wav", ".m4a"] MAX_AUDIO_SIZE_MB = 25 # Tamaño máximo en MB MAX_AUDIO_SIZE_BYTES = MAX_AUDIO_SIZE_MB * 1024 * 1024 def validate_audio_file(audio_file: UploadFile) -> None: """ Valida el formato y tamaño del archivo de audio. Args: audio_file: Archivo de audio a validar Raises: HTTPException: Si el archivo no cumple con los requisitos """ # Validar formato (content-type) if audio_file.content_type not in ALLOWED_AUDIO_FORMATS: raise HTTPException( status_code=400, detail=f"Formato de audio no válido. Solo se permiten: MP3, WAV, M4A" ) # Validar extensión del archivo file_extension = os.path.splitext(audio_file.filename)[1].lower() if file_extension not in ALLOWED_EXTENSIONS: raise HTTPException( status_code=400, detail=f"Extensión de archivo no válida. Solo se permiten: .mp3, .wav, .m4a" ) def validate_audio_size(audio_content: bytes) -> None: """ Valida el tamaño del contenido del audio. Args: audio_content: Contenido del archivo de audio en bytes Raises: HTTPException: Si el archivo excede el tamaño máximo """ if len(audio_content) > MAX_AUDIO_SIZE_BYTES: raise HTTPException( status_code=400, detail=f"El archivo excede el tamaño máximo permitido de {MAX_AUDIO_SIZE_MB}MB" ) def validate_audio_request(audio_request: AudioRequestFile, audio_content: bytes): # Validar el archivo de audio validate_audio_file(audio_request.file) # Validar tamaño del archivo validate_audio_size(audio_content)