Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#583 0 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
python

Direzione di ricerca

Inizia dall’implementazione di deepcopy mostrata nell’issue e analizza come oneof_field_by_group rappresenta il campo attivo. Riproduci il caso con un proto contenente due campi one_of, quindi verifica che deepcopy conservi il campo selezionato prima della copia e che which_one_of restituisca lo stesso campo in seguito.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.
Lingua principale
Python
Stelle
1.8k
Fork
235
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di danielgtaylor/python-betterproto

Tutte le issue di danielgtaylor/python-betterproto

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.