in aws_xray_sdk/core/utils/conversion.py [0:0]
def metadata_to_dict(obj):
"""
Convert object to dict with all serializable properties like:
dict, list, set, tuple, str, bool, int, float, type, object, etc.
"""
try:
if isinstance(obj, dict):
metadata = {}
for key, value in obj.items():
metadata[key] = metadata_to_dict(value)
return metadata
elif isinstance(obj, type):
return str(obj)
elif hasattr(obj, "_ast"):
return metadata_to_dict(obj._ast())
elif hasattr(obj, "__iter__") and not isinstance(obj, str):
metadata = []
for item in obj:
metadata.append(metadata_to_dict(item))
return metadata
elif hasattr(obj, "__dict__"):
metadata = {}
for key, value in vars(obj).items():
if not callable(value) and not key.startswith('_'):
metadata[key] = metadata_to_dict(value)
return metadata
else:
return obj
except Exception:
log.exception("Failed to convert metadata to dict")
return {}