danielgtaylor / danielgtaylor/python-betterproto

Unknown value for enum

Ouverte
#672 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
bug investigation needed
Langage dominant
Python
Étoiles
1.8k
Forks
234
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

### Summary

Unknown value for enum error in from_json

### Reproduction Steps

```protobuf
syntax = "proto3";

package hello;

enum Test {
TestUnset = 0;
Test1 = 1;
Test2 = 2;
}

message Greeting {
repeated Test test = 1;
}
```

```python
# Generated by the protocol buffer compiler. DO NOT EDIT!
# sources: test.proto
# plugin: python-betterproto
# This file has been @generated

from dataclasses import dataclass
from typing import (
List,
)

import betterproto

class Test(betterproto.Enum):
TestUnset = 0
Test1 = 1
Test2 = 2

@dataclass(eq=False, repr=False)
class Greeting(betterproto.Message):
test: List["Test"] = betterproto.enum_field(1)
```

```python
import hello
JSON_STR = """
{
"test": [1]
}
"""
greeting = hello.Greeting().from_json(JSON_STR)
```

### Expected Results

Should parse correct

### Actual Results

```
File "/opt/homebrew/Caskroom/miniconda/base/envs/platform/lib/python3.12/site-packages/betterproto/__init__.py", line 1690, in from_json
return self.from_dict(json.loads(value))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/envs/platform/lib/python3.12/site-packages/betterproto/__init__.py", line 1630, in from_dict
for field, value in self._from_dict_init(value).items():
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/envs/platform/lib/python3.12/site-packages/betterproto/__init__.py", line 1581, in _from_dict_init
value = [enum_cls.from_string(e) for e in value]
^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Caskroom/miniconda/base/envs/platform/lib/python3.12/site-packages/betterproto/enum.py", line 202, in from_string
raise ValueError(f"Unknown value {name} for enum {cls.__name__}") from e
ValueError: Unknown value 1 for enum Test
```

### System Information

libprotoc 29.3
Python 3.12.9
Name: betterproto
Version: 2.0.0b7
Summary: A better Protobuf / gRPC generator & library
Home-page: https://github.com/danielgtaylor/python-betterproto
Author: Daniel G. Taylor
Author-email: danielgtaylor@gmail.com
License: MIT
Location: /opt/homebrew/Caskroom/miniconda/base/envs/platform/lib/python3.12/site-packages
Requires: grpclib, python-dateutil, typing-extensions
Required-by: platform-sdk

### Checklist

- [x] I have searched the issues for duplicates.
- [x] I have shown the entire traceback, if possible.
- [x] I have verified this issue occurs on the latest prelease of betterproto which can be installed using `pip install -U --pre betterproto`, if possible.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans betterproto/__init__.py, à _from_dict_init, et suivez son appel vers betterproto/enum.py : from_string, comme indiqué dans le traceback. Reproduisez le cas d’enum répété avec le protobuf et le JSON fournis, puis vérifiez que les valeurs numériques d’enum sont correctement analysées depuis from_json sans perturber la gestion des chaînes.

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

Évaluation

Stack technique
python
Domaine
api
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

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