@@ -63,6 +63,11 @@ def strip_version_suffix(activity_type: str) -> str:
6363 return re .sub (r"(_V\d+)$" , "" , activity_type )
6464
6565
66+ def escape_description (desc : str ) -> str :
67+ """Escape a description string for safe inclusion in generated code."""
68+ return desc .replace ("\\ " , "\\ \\ " ).replace ('"' , '\\ "' )
69+
70+
6671def is_valid_identifier (name : str ) -> bool :
6772 """Check if a string is a valid Python identifier."""
6873 return name .isidentifier ()
@@ -100,15 +105,15 @@ def generate_python_type(name: str, definition: Dict[str, Any]) -> str:
100105 field_params .append ("default=None" )
101106 field_params .append (f'alias="{ original_prop } "' )
102107 if desc :
103- field_params .append (f'description="{ desc } "' )
108+ field_params .append (f'description="{ escape_description ( desc ) } "' )
104109 field_def = f"Field({ ', ' .join (field_params )} )"
105110 output += f" { safe_prop } : { prop_type } = { field_def } \n "
106111 elif desc or not is_required :
107112 field_params = []
108113 if not is_required :
109114 field_params .append ("default=None" )
110115 if desc :
111- field_params .append (f'description="{ desc } "' )
116+ field_params .append (f'description="{ escape_description ( desc ) } "' )
112117 field_def = f"Field({ ', ' .join (field_params )} )"
113118 output += f" { safe_prop } : { prop_type } = { field_def } \n "
114119 else :
@@ -163,15 +168,15 @@ def generate_inline_properties(
163168 field_params .append ("default=None" )
164169 field_params .append (f'alias="{ original_prop } "' )
165170 if desc :
166- field_params .append (f'description="{ desc } "' )
171+ field_params .append (f'description="{ escape_description ( desc ) } "' )
167172 field_def = f"Field({ ', ' .join (field_params )} )"
168173 output += f" { safe_prop } : { prop_type } = { field_def } \n "
169174 elif desc or not is_required :
170175 field_params = []
171176 if not is_required :
172177 field_params .append ("default=None" )
173178 if desc :
174- field_params .append (f'description="{ desc } "' )
179+ field_params .append (f'description="{ escape_description ( desc ) } "' )
175180 field_def = f"Field({ ', ' .join (field_params )} )"
176181 output += f" { safe_prop } : { prop_type } = { field_def } \n "
177182 else :
@@ -382,15 +387,19 @@ def generate_api_types(swagger: Dict[str, Any], prefix: str = "") -> str:
382387 field_params .append ("default=None" )
383388 field_params .append (f'alias="{ original_prop } "' )
384389 if desc :
385- field_params .append (f'description="{ desc } "' )
390+ field_params .append (
391+ f'description="{ escape_description (desc )} "'
392+ )
386393 field_def = f"Field({ ', ' .join (field_params )} )"
387394 output += f" { safe_prop } : { prop_type } = { field_def } \n "
388395 elif desc or not is_required :
389396 field_params = []
390397 if not is_required :
391398 field_params .append ("default=None" )
392399 if desc :
393- field_params .append (f'description="{ desc } "' )
400+ field_params .append (
401+ f'description="{ escape_description (desc )} "'
402+ )
394403 field_def = f"Field({ ', ' .join (field_params )} )"
395404 output += f" { safe_prop } : { prop_type } = { field_def } \n "
396405 else :
0 commit comments