Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Implicit optional is not respected

Ouverte
#645 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
devtools

Piste de recherche

Reproduisez le problème avec le Sample proto présenté et la dataclass Python générée, puis retracez la façon dont la déclaration du champ et la sérialisation de bytes(Sample(foo=False)) gèrent les optional fields implicites par rapport aux explicites. Le travail est terminé lorsque les fields implicites sérialisent les valeurs par défaut de manière cohérente avec les optional fields explicites et correspondent au comportement documenté de protobuf.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.
Langage dominant
Python
Étoiles
1.8k
Forks
235
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de danielgtaylor/python-betterproto

Toutes les issues de danielgtaylor/python-betterproto

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.