62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
"""
|
|
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) |