Implicit optional is not respected
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 35/100
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
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
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de danielgtaylor/python-betterproto
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 15/100
-
bug investigation needed
Difficulté 3/5 1-2 jours Accessibilité débutants 42/100
-
bug investigation needed
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
-
bug investigation needed
Difficulté 4/5 3-5 jours Accessibilité débutants 38/100
danielgtaylor/python-betterproto#676 · 3 commentaires ·
Toutes les issues de danielgtaylor/python-betterproto
Issues similaires
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
sergey-miryanov/gcmon#230 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Azure-Samples/azure-search-openai-demo#3249 ·
Les mainteneurs répondent en général sous 1 jour
-
[BUG] Failed archive extraction deletes the dataset cachePeut-être pris @dajiaohuang l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
alibaba/GraphScope#4674 ·