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

Deepcopy incorrectly sets the 'active' oneof field to last field in structure (breaking which_one_of)

Ouverte
#583 0 commentaires 2 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
45/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
python

Piste de recherche

Commencez par l’implémentation de deepcopy présentée dans l’issue et examinez comment oneof_field_by_group représente le champ actif. Reproduisez le cas avec un proto contenant deux champs one_of, puis vérifiez que deepcopy préserve le champ sélectionné avant la copie et que which_one_of renvoie ensuite le même champ.

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

Description

bug
Summary

When calling deepcopy on a proto, the oneOf field state gets overwritten.

Reproduction Steps
  1. Create a simple proto with two one_of fields.
  2. set the first field
  3. Call which_one_of which will return the first field
  4. Call deepcopy on the proto
  5. check which_one_of again.
  6. The second field is returned.

The implementation of deepcopy does this:

        for name in self._betterproto.sorted_field_names:
            value = self.__raw_get(name)
            if value is not PLACEHOLDER:
                kwargs[name] = deepcopy(value)

And of course, setattr sets the current group by field, which overwrites this.

one option is to simply make deepcopy one_of aware, using oneof_field_by_group, default initializing the nonset fields and adding them to a set, and then only iterating over the names that aren't in the set using the overall loop above.

Expected Results

We preserve the correct one_of field

Actual Results

The second one_of field is set.

System Information

libprotoc 3.21.12
Python 3.11.9
Name: betterproto
Version: 2.0.0b6
Summary: A better Protobuf / gRPC generator & library
Home-page: https://github.com/danielgtaylor/python-betterproto
Author: Daniel G. Taylor
Author-email: [email protected]
License: MIT
Location: /usr/local/lib/python3.11/site-packages
Requires: grpclib, python-dateutil
Required-by:

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.