danielgtaylor / danielgtaylor/python-betterproto

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

Open
#437 2 comments 1 reaction 0 assignees View on GitHub
compiler-bug
Dominant language
Python
Stars
1.8k
Forks
234
PR merge metrics
No merged PRs in 30d

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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.