Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Implicit optional is not respected

Aberta
#645 3 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
python
Domínio
devtools

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

bug investigation needed
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

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de danielgtaylor/python-betterproto

Todas as issues de danielgtaylor/python-betterproto

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.