danielgtaylor / danielgtaylor/python-betterproto

to_dict() fails to write boolean fields without default when value is False

Ouverte
#95 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement medium medium priority
Langage dominant
Python
Étoiles
1.8k
Forks
234
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

When you have a message with a boolean value as follows:
```
message Patient {
bool isRnaAvailable = 1;
}
```
then an object like
```
patient = Patient()
patient.is_rna_available = np.random.choice([True, False], 1)[0]
```
fails to write the `is_rna_available` field when it is False when calling `patient.to_dict()`, this does not happen when the value is True.

The issue seems to be in line 824 of file `betterproto/__init__py` where it runs the following comparison `elif v != self._get_field_default(field, meta) or include_default_values:`. It should be something like 'elif v != None or include_default_values', otherwise when you set a field to the same value as the default value and do not set `include_default values` then it is not written. This may be also the case for other types.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans betterproto/__init__.py, au niveau de la logique de to_dict() autour de la ligne 824, et reproduisez l’exemple Patient avec is_rna_available défini sur False. Vérifiez comment sont traités les champs égaux à leurs valeurs par défaut, y compris les autres types de champs, et vérifiez que le dictionnaire obtenu conserve les valeurs False affectées explicitement sans nécessiter include_default_values.

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

Évaluation

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

Recevez les nouvelles issues par e-mail

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