bug fix
parent
caf7b1ab60
commit
c65a1dac74
|
|
@ -32,8 +32,18 @@ from app.utils.suno import SunoService
|
||||||
from config import prj_settings
|
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로 변환합니다."""
|
"""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)
|
code = result.get("code", 0)
|
||||||
data = result.get("data", {})
|
data = result.get("data", {})
|
||||||
|
|
||||||
|
|
@ -50,8 +60,9 @@ def _parse_suno_status_response(result: dict) -> PollingSongResponse:
|
||||||
status = data.get("status", "unknown")
|
status = data.get("status", "unknown")
|
||||||
|
|
||||||
# 클립 데이터는 data.response.sunoData에 있음 (camelCase)
|
# 클립 데이터는 data.response.sunoData에 있음 (camelCase)
|
||||||
response_data = data.get("response", {})
|
# data.get()이 None을 반환할 수 있으므로 or {}로 처리
|
||||||
clips_data = response_data.get("sunoData", [])
|
response_data = data.get("response") or {}
|
||||||
|
clips_data = response_data.get("sunoData") or []
|
||||||
|
|
||||||
# 상태별 메시지 (Suno API는 다양한 상태값 반환)
|
# 상태별 메시지 (Suno API는 다양한 상태값 반환)
|
||||||
status_messages = {
|
status_messages = {
|
||||||
|
|
@ -200,13 +211,15 @@ async def get_song_status(
|
||||||
result = await suno_service.get_task_status(task_id)
|
result = await suno_service.get_task_status(task_id)
|
||||||
return _parse_suno_status_response(result)
|
return _parse_suno_status_response(result)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
import traceback
|
||||||
|
|
||||||
return PollingSongResponse(
|
return PollingSongResponse(
|
||||||
success=False,
|
success=False,
|
||||||
status="error",
|
status="error",
|
||||||
message="상태 조회에 실패했습니다.",
|
message="상태 조회에 실패했습니다.",
|
||||||
clips=None,
|
clips=None,
|
||||||
raw_response=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)
|
# 클립 데이터는 data.response.sunoData에 있음 (camelCase)
|
||||||
response_data = data.get("response", {})
|
# data.get()이 None을 반환할 수 있으므로 or {}로 처리
|
||||||
clips_data = response_data.get("sunoData", [])
|
response_data = data.get("response") or {}
|
||||||
|
clips_data = response_data.get("sunoData") or []
|
||||||
if not clips_data:
|
if not clips_data:
|
||||||
return DownloadSongResponse(
|
return DownloadSongResponse(
|
||||||
success=False,
|
success=False,
|
||||||
|
|
|
||||||
|
|
@ -169,4 +169,9 @@ class SunoService:
|
||||||
timeout=30.0,
|
timeout=30.0,
|
||||||
)
|
)
|
||||||
response.raise_for_status()
|
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