richard-su's picture
Upload folder using huggingface_hub
b5df735 verified
raw
history blame
1.91 kB
"""
Download models
"""
from dataclasses import dataclass
from typing import Optional, Dict, Any
from enum import Enum
from .base import BaseRequest, BaseResponse, OperationStatus
class PodcastPlatform(str, Enum):
"""Supported podcast platforms"""
APPLE_PODCAST = "apple_podcast"
XIAOYUZHOU = "xiaoyuzhou"
@dataclass
class DownloadRequest(BaseRequest):
"""Request model for podcast download"""
url: str
platform: PodcastPlatform
output_directory: Optional[str] = None
auto_transcribe: bool = False
enable_speaker_diarization: bool = False
@dataclass
class DownloadResponse(BaseResponse):
"""Response model for podcast download"""
original_url: str = ""
audio_file_path: Optional[str] = None
file_size_mb: Optional[float] = None
duration_seconds: Optional[float] = None
@classmethod
def success(
cls,
original_url: str,
audio_file_path: str,
file_size_mb: Optional[float] = None,
duration_seconds: Optional[float] = None,
message: str = "下载成功"
) -> "DownloadResponse":
"""Create successful response"""
return cls(
status=OperationStatus.SUCCESS,
message=message,
original_url=original_url,
audio_file_path=audio_file_path,
file_size_mb=file_size_mb,
duration_seconds=duration_seconds
)
@classmethod
def failed(
cls,
original_url: str,
error_message: str,
error_code: str = "DOWNLOAD_ERROR",
error_details: Optional[Dict[str, Any]] = None
) -> "DownloadResponse":
"""Create failed response"""
return cls(
status=OperationStatus.FAILED,
message=error_message,
error_code=error_code,
error_details=error_details,
original_url=original_url
)