@@ -60,23 +60,28 @@ def _parse_custom_events(record, include_extra_attributes):
60
60
def _remove_circular_dependencies (obj , memo = None ):
61
61
if memo is None :
62
62
memo = set ()
63
+
63
64
# Skip immutable types, which can't contain circular dependencies
64
- if isinstance (obj , (str , int , float , bool )):
65
+ if isinstance (obj , (str , int , float , bool , type ( None ) )):
65
66
return obj
66
- if id (obj ) in memo :
67
+
68
+ # For mutable objects, check for circular references
69
+ obj_id = id (obj )
70
+ if obj_id in memo :
67
71
return "<omitted circular reference>"
68
- memo .add (id (obj ))
72
+ memo .add (obj_id )
73
+
69
74
if isinstance (obj , dict ):
70
75
new_dict = {}
71
76
for key , value in obj .items ():
72
- new_dict [key ] = _remove_circular_dependencies (value , memo )
77
+ new_dict [key ] = _remove_circular_dependencies (value , memo . copy () )
73
78
return new_dict
74
79
elif isinstance (obj , list ):
75
- return [_remove_circular_dependencies (item , memo ) for item in obj ]
80
+ return [_remove_circular_dependencies (item , memo . copy () ) for item in obj ]
76
81
elif isinstance (obj , tuple ):
77
- return tuple (_remove_circular_dependencies (item , memo ) for item in obj )
82
+ return tuple (_remove_circular_dependencies (item , memo . copy () ) for item in obj )
78
83
elif isinstance (obj , set ):
79
- return {_remove_circular_dependencies (item , memo ) for item in obj }
84
+ return {_remove_circular_dependencies (item , memo . copy () ) for item in obj }
80
85
else :
81
86
return obj
82
87
0 commit comments