in o2a/utils/python_serializer.py [0:0]
def serialize(serializable_obj: Any) -> str:
"""
Serialize to Python code
"""
def serialize_recursively(target: Any, markers: Set[int]) -> str:
marker_id = id(target)
if marker_id in markers:
raise ValueError("Circular reference detected")
markers.add(marker_id)
if isinstance(target, str):
buf = f"{escape_string_with_python_escapes(target)}"
elif isinstance(target, dict):
buf = "{"
buf += ", ".join(
f"{serialize_recursively(key, markers)}: {serialize_recursively(value, markers)}"
for key, value in target.items()
)
buf += "}"
elif isinstance(target, list):
buf = "["
buf += ", ".join(serialize_recursively(item, markers) for item in target)
buf += "]"
elif isinstance(target, set):
if target:
buf = "{"
buf += ", ".join(serialize_recursively(item, markers) for item in target)
buf += "}"
else:
buf = "set()"
elif isinstance(target, tuple):
buf = "("
buf += ", ".join(serialize_recursively(item, markers) for item in target)
buf += ")"
elif target is True:
buf = "True"
elif target is False:
buf = "False"
elif target is None:
buf = "None"
else:
raise ValueError(f"Type '{type(target)}' is not serializable")
markers.remove(marker_id)
return buf
return serialize_recursively(serializable_obj, set())