MCPcopy Create free account
hub / github.com/apache/fory / generate_message

Method generate_message

compiler/fory_compiler/generators/python.py:354–425  ·  view source on GitHub ↗

Generate a Python dataclass with nested types.

(
        self,
        message: Message,
        indent: int = 0,
        parent_stack: Optional[List[Message]] = None,
    )

Source from the content-addressed store, hash-verified

352 return lines
353
354 def generate_message(
355 self,
356 message: Message,
357 indent: int = 0,
358 parent_stack: Optional[List[Message]] = None,
359 ) -> List[str]:
360 """Generate a Python dataclass with nested types."""
361 lines = []
362 ind = " " * indent
363 lineage = (parent_stack or []) + [message]
364
365 comment = self.format_type_id_comment(message, f"{ind}#")
366 if comment:
367 lines.append(comment)
368 needs_repr = self.message_needs_safe_repr(message)
369 decorator_args: List[str] = []
370 if not self.get_effective_evolving(message):
371 decorator_args.append("evolving=False")
372 if needs_repr:
373 decorator_args.append("repr=False")
374 if decorator_args:
375 lines.append(f"{ind}@pyfory.dataclass({', '.join(decorator_args)})")
376 else:
377 lines.append(f"{ind}@pyfory.dataclass")
378 lines.append(f"{ind}class {message.name}:")
379
380 # Generate nested enums first (they need to be defined before fields reference them)
381 for nested_enum in message.nested_enums:
382 for line in self.generate_enum(nested_enum, indent=indent + 1):
383 lines.append(line)
384 lines.append("")
385
386 # Generate nested unions
387 for nested_union in message.nested_unions:
388 for line in self.generate_union(
389 nested_union, indent=indent + 1, parent_stack=lineage
390 ):
391 lines.append(line)
392 lines.append("")
393
394 # Generate nested messages
395 for nested_msg in message.nested_messages:
396 for line in self.generate_message(
397 nested_msg,
398 indent=indent + 1,
399 parent_stack=lineage,
400 ):
401 lines.append(line)
402 lines.append("")
403
404 # Generate fields
405 for field in message.fields:
406 field_lines = self.generate_field(field, lineage)
407 for line in field_lines:
408 lines.append(f"{ind} {line}")
409
410 if (
411 message.fields

Callers 1

generate_moduleMethod · 0.95

Calls 10

generate_enumMethod · 0.95
generate_unionMethod · 0.95
generate_fieldMethod · 0.95
generate_repr_methodMethod · 0.95
extendMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected