insta
bluebamus 2025-12-22 18:53:26 +09:00
parent caf7b1ab60
commit c65a1dac74
2 changed files with 26 additions and 7 deletions

View File

@ -32,8 +32,18 @@ from app.utils.suno import SunoService
from config import prj_settings
def _parse_suno_status_response(result: dict) -> PollingSongResponse:
def _parse_suno_status_response(result: dict | None) -> PollingSongResponse:
"""Suno API 상태 응답을 파싱하여 PollingSongResponse로 변환합니다."""
if result is None:
return PollingSongResponse(
success=False,
status="error",
message="Suno API 응답이 비어있습니다.",
clips=None,
raw_response=None,
error_message="Suno API returned None response",
)
code = result.get("code", 0)
data = result.get("data", {})
@ -50,8 +60,9 @@ def _parse_suno_status_response(result: dict) -> PollingSongResponse:
status = data.get("status", "unknown")
# 클립 데이터는 data.response.sunoData에 있음 (camelCase)
response_data = data.get("response", {})
clips_data = response_data.get("sunoData", [])
# data.get()이 None을 반환할 수 있으므로 or {}로 처리
response_data = data.get("response") or {}
clips_data = response_data.get("sunoData") or []
# 상태별 메시지 (Suno API는 다양한 상태값 반환)
status_messages = {
@ -200,13 +211,15 @@ async def get_song_status(
result = await suno_service.get_task_status(task_id)
return _parse_suno_status_response(result)
except Exception as e:
import traceback
return PollingSongResponse(
success=False,
status="error",
message="상태 조회에 실패했습니다.",
clips=None,
raw_response=None,
error_message=str(e),
error_message=f"{type(e).__name__}: {e}\n{traceback.format_exc()}",
)
@ -271,8 +284,9 @@ async def download_song(
)
# 클립 데이터는 data.response.sunoData에 있음 (camelCase)
response_data = data.get("response", {})
clips_data = response_data.get("sunoData", [])
# data.get()이 None을 반환할 수 있으므로 or {}로 처리
response_data = data.get("response") or {}
clips_data = response_data.get("sunoData") or []
if not clips_data:
return DownloadSongResponse(
success=False,

View File

@ -169,4 +169,9 @@ class SunoService:
timeout=30.0,
)
response.raise_for_status()
return response.json()
data = response.json()
if data is None:
raise ValueError("Suno API returned empty response for task status")
return data