danielgtaylor / danielgtaylor/python-betterproto

betterproto-2.0.0b5 fails to generate message classes when proto package name contains upper case letters

Ouverte
#437 2 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
compiler-bug
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

Recevez les nouvelles issues par e-mail

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