googleapis / googleapis/google-cloud-python
Cryptic TypeError in proto-plus during assignment with invalid type
- Langage dominant
- Python
- Étoiles
- 5.4k
- Forks
- 1.8k
- Merge moyen
- 2 j 23 h
- PR mergées (30 j)
- 123
Description
### Determine this is the right repository
- [x] I determined this is the correct repository in which to report this bug.
### Summary of the issue
**Context:**
When setting a field on a protobuf message using proto-plus with an invalid type or structure, the underlying protocol buffer library fails during initialization or merging.
**Expected Behavior:**
proto-plus should catch the TypeError and re-raise it with a more descriptive message that includes the specific message class and field name, aiding in debugging type mismatches.
**Actual Behavior:**
The library raises a cryptic TypeError: bad argument type for built-in operation without any context about which field or message class caused the failure.
### API client name and version
proto-plus
### Reproduction steps: code
from google.cloud import dataproc_v1
def sample_create_batch():
batch = dataproc_v1.Batch()
# Provide a type that is not a string in the args list. args expects a MutableSequence[str]
batch.pyspark_batch.args = [1000]
sample_create_batch()
### Reproduction steps: supporting files
file: mydata.csv
```
alpha,1,3
beta,2,5
```
### Reproduction steps: actual results
Traceback (most recent call last):
File "test.py", line 42, in
sample_create_batch()
File "test.py", line 24, in sample_create_batch
batch.pyspark_batch.args = [1000 ]
File "/env/lib/python3.11/site-packages/proto/message.py", line 944, in __setattr__
self._pb.MergeFrom(self._meta.pb(**{key: pb_value}))
TypeError: bad argument type for built-in operation
### Reproduction steps: expected results
TypeError: Failed to set field 'args' on PysparkBatch with value [1000]. Underlying error: bad argument type for built-in operation.
### OS & version + platform
Linux (Google Cloud Shell) / macOS
### Python environment
Python 3.12
### Python dependencies
_No response_
### Additional context
The cryptic error is thrown directly from the underlying protocol buffers `MergeFrom` execution inside `proto/message.py`. Wrapping the initialization and `MergeFrom` calls in `try-except` blocks to provide contextual wrapper errors would greatly improve the developer experience.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez dans proto/message.py, au niveau de __setattr__, autour de l’appel à MergeFrom signalé, puis suivez les chemins d’initialisation et de MergeFrom mentionnés dans l’issue. Reproduisez l’affectation d’exemple avec batch.pyspark_batch.args = [1000] et vérifiez que le TypeError résultant identifie le message PysparkBatch, le champ args et la valeur invalide.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend-api-design
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Calme
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 72/100