bug fix
parent
caf7b1ab60
commit
c65a1dac74
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue