fix(prediction): features JSONB 중첩 구조 sanitize
AnalysisResult.to_db_tuple이 기존에 features dict 값을 모두 float로 변환했는데, dark_suspicion 구조를 넣으면서 dark_patterns(list) 등 비스칼라 타입이 포함되어 upsert 실패 (float argument not a list). _sanitize 재귀 함수로 JSON 호환 타입(str/int/float/bool/list/dict/None)을 그대로 보존하도록 변경.
This commit is contained in:
부모
e5d123e4c5
커밋
dac4a3bda2
@ -70,8 +70,24 @@ class AnalysisResult:
|
||||
"""numpy int → Python int 변환."""
|
||||
return int(v) if v is not None else 0
|
||||
|
||||
# features dict 내부 numpy 값도 변환
|
||||
safe_features = {k: float(v) for k, v in self.features.items()} if self.features else {}
|
||||
# features dict 내부 numpy 값도 변환 (재귀적 처리)
|
||||
# int/float/bool/str/None/list/dict 모두 허용 (JSON 호환 타입만 유지)
|
||||
def _sanitize(v):
|
||||
if v is None or isinstance(v, (str, bool)):
|
||||
return v
|
||||
if isinstance(v, (int, float)):
|
||||
return float(v) if isinstance(v, float) else int(v)
|
||||
if isinstance(v, dict):
|
||||
return {str(k): _sanitize(val) for k, val in v.items()}
|
||||
if isinstance(v, (list, tuple)):
|
||||
return [_sanitize(x) for x in v]
|
||||
# numpy 스칼라 등은 float 변환 시도, 실패 시 str
|
||||
try:
|
||||
return float(v)
|
||||
except (TypeError, ValueError):
|
||||
return str(v)
|
||||
|
||||
safe_features = _sanitize(self.features) if self.features else {}
|
||||
|
||||
return (
|
||||
str(self.mmsi),
|
||||
|
||||
불러오는 중...
Reference in New Issue
Block a user