@@ -59,20 +59,27 @@ def filter_dict(obj):
5959
6060def safe_serialize (obj ):
6161 def default (o ):
62- if isinstance (o , UUID ):
63- return str (o )
64- elif hasattr (o , "model_dump_json" ):
65- return o .model_dump_json ()
66- elif hasattr (o , "to_json" ):
67- return o .to_json ()
68- elif hasattr (o , "json" ):
69- return o .json ()
70- elif hasattr (o , "to_dict" ):
71- return o .to_dict ()
72- elif hasattr (o , "dict" ):
73- return o .dict ()
74- else :
75- return f"<<non-serializable: { type (o ).__qualname__ } >>"
62+ try :
63+ if isinstance (o , UUID ):
64+ return str (o )
65+ elif hasattr (o , "model_dump_json" ):
66+ return str (o .model_dump_json ())
67+ elif hasattr (o , "to_json" ):
68+ return str (o .to_json ())
69+ elif hasattr (o , "json" ):
70+ return str (o .json ())
71+ elif hasattr (o , "to_dict" ):
72+ return {k : str (v ) for k , v in o .to_dict ().items () if not callable (v )}
73+ elif hasattr (o , "dict" ):
74+ return {k : str (v ) for k , v in o .dict ().items () if not callable (v )}
75+ elif isinstance (o , dict ):
76+ return {k : str (v ) for k , v in o .items ()}
77+ elif isinstance (o , list ):
78+ return [str (item ) for item in o ]
79+ else :
80+ return f"<<non-serializable: { type (o ).__qualname__ } >>"
81+ except Exception as e :
82+ return f"<<serialization-error: { str (e )} >>"
7683
7784 def remove_unwanted_items (value ):
7885 """Recursively remove self key and None/... values from dictionaries so they aren't serialized"""
0 commit comments