Implicit optional is not respected
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Reproduza o problema com o Sample proto mostrado e a dataclass Python gerada; em seguida, rastreie como a declaração do campo e a serialização de bytes(Sample(foo=False)) lidam com optional fields implícitos em comparação com os explícitos. O trabalho estará concluído quando os fields implícitos serializarem os valores padrão de forma consistente com os optional fields explícitos e corresponderem ao comportamento documentado de protobuf.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
When you don't add an explicit optional, fields are not serialized properly if they happen to be set to the default value.
Reproduction Steps
message Sample {
bool foo = 1
}
generates
[
{
"name": "foo",
"type": "BOOLEAN",
"mode": "NULLABLE",
}
]
but the python code generated is
@dataclass(eq=False, repr=False)
class Sample(betterproto.Message):
foo: bool = betterproto.string_field(1)
which implies that the boolean is non-nullable.
Then, if we do
bytes(Sample(foo=False))
it will be serialized to
b''
and actually treated as null.
If we change the proto to
message Sample {
optional bool foo = 1
}
then the correct code is generated and the message is serialized as expected.
Actual Results
The protobuf documentation suggests that not setting optional should be treated in the same way as setting it.
System Information
libprotoc 28.3
Python 3.10.11
betterproto 2.0.0b7
Checklist
- I have searched the issues for duplicates.
- I have shown the entire traceback, if possible.
- I have verified this issue occurs on the latest prelease of betterproto which can be installed using
pip install -U --pre betterproto, if possible.
- Linguagem predominante
- Python
- Estrelas
- 1.8k
- Forks
- 235
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de danielgtaylor/python-betterproto
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 15/100
-
bug investigation needed
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 42/100
-
bug investigation needed
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 45/100
-
bug investigation needed
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
danielgtaylor/python-betterproto#676 · 3 comentários ·
Todas as issues de danielgtaylor/python-betterproto
Issues semelhantes
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
fossasia/visdom-dev#77 ·
Mantenedores costumam responder em até 4 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
aws-cloudformation/cfn-lint#4890 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
volcengine/OpenViking#6521 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
AstrBotDevs/AstrBot#10720 ·
Mantenedores costumam responder em até 1 dia