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
|
parsed = val
|
||||||
|
|
||||||
def _normalize(obj):
|
def _normalize(obj):
|
||||||
# Normalize pydantic BaseModel instances (v2:v1)
|
# Normalize pydantic BaseModel instances (v2:v1) and recurse
|
||||||
if hasattr(obj, "model_dump"):
|
if hasattr(obj, "model_dump"):
|
||||||
try:
|
try:
|
||||||
return obj.model_dump()
|
res = obj.model_dump()
|
||||||
|
return _normalize(res)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
if hasattr(obj, "dict") and not isinstance(obj, dict):
|
if hasattr(obj, "dict") and not isinstance(obj, dict):
|
||||||
try:
|
try:
|
||||||
return obj.dict()
|
res = obj.dict()
|
||||||
|
return _normalize(res)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
# Recurse lists/tuples
|
# Recurse lists/tuples/sets
|
||||||
if isinstance(obj, list):
|
if isinstance(obj, list):
|
||||||
return [_normalize(i) for i in obj]
|
return [_normalize(i) for i in obj]
|
||||||
if isinstance(obj, tuple):
|
if isinstance(obj, tuple):
|
||||||
return [_normalize(i) for i in obj]
|
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):
|
if isinstance(obj, dict):
|
||||||
return {k: _normalize(v) for k, v in obj.items()}
|
return {k: _normalize(v) for k, v in obj.items()}
|
||||||
return obj
|
return obj
|
||||||
|
|||||||
Reference in New Issue
Block a user