Enhance normalization function to handle sets and improve recursion for Pydantic models
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user