Enhance normalization function to handle sets and improve recursion for Pydantic models

This commit is contained in:
Ross
2025-12-17 15:58:47 +00:00
parent a2d22c34fd
commit b6f5288eed
+9 -4
View File
@@ -181,22 +181,27 @@ class WorkerForm(forms.ModelForm):
parsed = val
def _normalize(obj):
# Normalize pydantic BaseModel instances (v2:v1)
# Normalize pydantic BaseModel instances (v2:v1) and recurse
if hasattr(obj, "model_dump"):
try:
return obj.model_dump()
res = obj.model_dump()
return _normalize(res)
except Exception:
pass
if hasattr(obj, "dict") and not isinstance(obj, dict):
try:
return obj.dict()
res = obj.dict()
return _normalize(res)
except Exception:
pass
# Recurse lists/tuples
# Recurse lists/tuples/sets
if isinstance(obj, list):
return [_normalize(i) for i in obj]
if isinstance(obj, tuple):
return [_normalize(i) for i in obj]
if isinstance(obj, set):
# JSON can't represent sets; convert to list
return [_normalize(i) for i in obj]
if isinstance(obj, dict):
return {k: _normalize(v) for k, v in obj.items()}
return obj