Deepcopy incorrectly sets the 'active' oneof field to last field in structure (breaking which_one_of)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- backend-api-design
Línea de trabajo
Comienza por la implementación de deepcopy mostrada en el issue e inspecciona cómo oneof_field_by_group representa el campo activo. Reproduce el caso con un proto que contenga dos campos one_of y verifica después que deepcopy conserva el campo seleccionado antes de la copia y que which_one_of devuelve el mismo campo posteriormente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
When calling deepcopy on a proto, the oneOf field state gets overwritten.
Reproduction Steps
- Create a simple proto with two one_of fields.
- set the first field
- Call which_one_of which will return the first field
- Call deepcopy on the proto
- check which_one_of again.
- 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.
- Lenguaje dominante
- Python
- Estrellas
- 1.8k
- Forks
- 235
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de danielgtaylor/python-betterproto
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 15/100
-
bug investigation needed
Dificultad 3/5 1-2 días Aptitud para principiantes 42/100
-
bug investigation needed
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
bug investigation needed
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
danielgtaylor/python-betterproto#676 · 3 comentarios ·
Todos los issues de danielgtaylor/python-betterproto
Issues similares
-
Python Volcengine provider returns failures instead of raising themPosiblemente ocupada @Ricardo-M-L la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
agent-infra/sandbox#248 ·
-
Textractor leaves empty temporary files when remote retrieval failsPosiblemente ocupada @HuaTNA la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
test(bm_generation): pin the learning parameters and CPU sync shortcutPosiblemente ocupada @iloveeyjafjalla la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
qboson/kaiwu-pytorch-plugin#1341 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
elder-plinius/V3R1T4S#625 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
foxglove/mcap#1907 · 1 comentario ·
Los mantenedores suelen responder en 1 día