Skip to content

Any way to default initialize protobuf message type fields? #85

@mjkmj

Description

@mjkmj

I've tried to figure out a way to default initialize fields that are of protobuf message type.

Example:

syntax = "proto3";
package example;

message MyMessage1
{
    optional string content = 1;
}

message MyMessage2
{
    optional MyMessage1 my_message = 1;
}

Output of protobuf_to_pydantic would be:

from google.protobuf.message import Message  # type: ignore
from pydantic import BaseModel
from pydantic import Field
import typing


class MyMessage1(BaseModel):
    content: typing.Optional[str] = Field(default="")

class MyMessage2(BaseModel):
    my_message: typing.Optional[MyMessage1] = Field(default=None)

Desired output would be:

from google.protobuf.message import Message  # type: ignore
from pydantic import BaseModel
from pydantic import Field
import typing


class MyMessage1(BaseModel):
    content: typing.Optional[str] = Field(default="")

class MyMessage2(BaseModel):
    my_message: typing.Optional[MyMessage1] = Field(default=MyMessage1())

(The key change here is the default value of the my_message field in MyMessage2 class)

Is there a way to achieve this kind of behaviour?
(BTW I think that protobuf handles its protobuf message fields that way, but I'm not sure)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions