danielgtaylor / danielgtaylor/python-betterproto
betterproto-2.0.0b5 fails to generate message classes when proto package name contains upper case letters
- Langage dominant
- Python
- Étoiles
- 1.8k
- Forks
- 234
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
## Steps to reproduce
### Install `betterproto-2.0.0b5` + tooling:
```bash
pip install --pre betterproto[compiler]
pip install grpcio-tools
```
other versions:
> grpcio==1.50.0
grpcio-tools==1.50.0
grpclib==0.4.3
### Create an `example.proto`
```proto
syntax = "proto3";
package mypackage; // this is the only change to the MWE from README.md
message EchoRequest {
string value = 1;
// Number of extra times to echo
uint32 extra_times = 2;
}
message EchoResponse {
repeated string values = 1;
}
message EchoStreamResponse {
string value = 1;
}
service Echo {
rpc Echo(EchoRequest) returns (EchoResponse);
rpc EchoStream(EchoRequest) returns (stream EchoStreamResponse);
}
```
### Create the directory
```bash
mkdir lib
```
### Generate Python Code:
```bash
python -m grpc_tools.protoc -I . --python_betterproto_out=lib example.proto
```
Check that `lib/mypackage/__init__.py` contains _no_ unresolvable imports. ✔
Up to here, this is just the MWE from `README.md` with a different but all-lower package name.
### Introduce Upper Case Letters in the Package Name
Now modify the above `example.proto` and change the all-lower case `package mypackage` in line 3 to an UpperCamel `package MyPackage`.
Repeat the next steps up to the code generation (don't forget to clean up `lib` before re-generating).
The newly generate `lib/MyPackage/__init__.py` now contains unresolvable imports:
```python
from .. import (
MyPackageEchoResponse as _MyPackageEchoResponse__,
MyPackageEchoStreamResponse as _MyPackageEchoStreamResponse__,
)
```
The `lib/__init__.py` does not contain anything to import.
No classes `MyPackageEchoResponse` or `MyPackageEchoStreamResponse` have been generated ❌
## Expected Behaviour
The code generation shall work for mixed casing package names.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par la reproduction de example.proto et exécutez la commande grpc_tools.protoc documentée après avoir changé le package en MyPackage. Inspectez lib/MyPackage/__init__.py et lib/__init__.py ; c’est terminé lorsque les imports générés sont résolus et que les classes MyPackageEchoResponse et MyPackageEchoStreamResponse sont présentes.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- grpc, python
- Domaine
- compilers, tooling
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 35/100