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

Method generate_field

compiler/fory_compiler/generators/python.py:584–635  ·  view source on GitHub ↗

Generate a dataclass field.

(
        self,
        field: Field,
        parent_stack: Optional[List[Message]] = None,
    )

Source from the content-addressed store, hash-verified

582 return lines
583
584 def generate_field(
585 self,
586 field: Field,
587 parent_stack: Optional[List[Message]] = None,
588 ) -> List[str]:
589 """Generate a dataclass field."""
590 lines = []
591
592 is_any = (
593 isinstance(field.field_type, PrimitiveType)
594 and field.field_type.kind == PrimitiveKind.ANY
595 )
596 nullable = field.optional or is_any
597 python_type = self.generate_type(
598 field.field_type,
599 nullable,
600 field.element_optional,
601 field.element_ref,
602 parent_stack,
603 )
604 field_name = self.safe_name(self.to_snake_case(field.name))
605 default_factory = self.get_default_factory(field)
606 default = self.get_default_value(field.field_type, field.optional)
607 default_expr = default
608 trailing_comment = ""
609 if " # " in default:
610 default_expr, comment = default.split(" # ", 1)
611 trailing_comment = f" # {comment}"
612
613 tag_id = field.tag_id
614 if tag_id is not None or field.ref or nullable:
615 field_args = []
616 if tag_id is not None:
617 field_args.append(f"id={tag_id}")
618 if nullable:
619 field_args.append("nullable=True")
620 if field.ref:
621 field_args.append("ref=True")
622 if default_factory is not None:
623 field_args.append(f"default_factory={default_factory}")
624 else:
625 field_args.append(f"default={default_expr}")
626 field_default = f"pyfory.field({', '.join(field_args)}){trailing_comment}"
627 else:
628 if default_factory is not None:
629 field_default = f"field(default_factory={default_factory})"
630 else:
631 field_default = f"{default_expr}{trailing_comment}"
632
633 lines.append(f"{field_name}: {python_type} = {field_default}")
634
635 return lines
636
637 def uses_numpy_array(self, field_type: ListType, element_optional: bool) -> bool:
638 """Return True if a list should be represented as a numpy array."""

Callers 1

generate_messageMethod · 0.95

Calls 6

generate_typeMethod · 0.95
safe_nameMethod · 0.95
get_default_factoryMethod · 0.95
get_default_valueMethod · 0.95
to_snake_caseMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected