Generate a dataclass field.
(
self,
field: Field,
parent_stack: Optional[List[Message]] = None,
)
| 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.""" |
no test coverage detected