danielgtaylor / danielgtaylor/python-betterproto

Generated code has non-existent relative import

Open
#554 2 comments 7 reactions 0 assignees View on GitHub
bug investigation needed
Dominant language
Python
Stars
1.8k
Forks
234
PR merge metrics
No merged PRs in 30d

Description

### Summary

from .google import protobuf which doesn't exist

### Reproduction Steps

I’m facing an issue with the imported packages, my protofile has some import like this:
```
syntax = "proto3";

package mypackage;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/field_mask.proto";
import "google/api/resource.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
//import "validate/validate.proto";
import "protoc-gen-openapiv2/options/annotations.proto";
```
I’m running the code generation with buf:

```
version: v1
managed:
enabled: true
plugins:
# Python
- plugin: buf.build/community/danielgtaylor-betterproto:v1.2.5
out: _gen/pythonbproto2
```
and the command to run it is: `buf generate --template buf.gen.additional.yaml --include-imports`
The generated files are like this:

tree mypackage/api/proto/_gen/pythonbproto2
```
├── __init__.py
├── google
│ ├── __init__.py
│ └── api.py
├── grpc
│ ├── __init__.py
│ └── gateway
│ ├── __init__.py
│ └── protoc_gen_openapiv2
│ ├── __init__.py
│ └── options.py
└── mypackage
```
However the generated file mypackage.py is expecting a relative dir called google.protobuf which couldn’t be found, it has only the api.py not protobuf.
`from .google import protobuf`

### Expected Results

The imported packages are properly handled. In the normal protoc way of generation, google.protobuf is a package and is imported directly like this: `from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2`

### Actual Results

A relative import which doesn't exist: `from .google import protobuf`

### System Information

protoc --version
libprotoc 24.3

buf --version
1.21.0

```
version: v1
managed:
enabled: true
plugins:
# Python
- plugin: buf.build/community/danielgtaylor-betterproto:v1.2.5
out: _gen/pythonbproto2
```

I'm not able to use normal command line to generate this:

```
protoc -I . --python_betterproto_out=lib mypackage.proto
google/api/annotations.proto: File not found.
google/api/client.proto: File not found.
google/api/field_behavior.proto: File not found.
google/api/resource.proto: File not found.
protoc-gen-openapiv2/options/annotations.proto: File not found.
mypackage.proto:5:1: Import "google/api/annotations.proto" was not found or had errors.
mypackage.proto:6:1: Import "google/api/client.proto" was not found or had errors.
mypackage.proto:7:1: Import "google/api/field_behavior.proto" was not found or had errors.
mypackage.proto:9:1: Import "google/api/resource.proto" was not found or had errors.
mypackage.proto:13:1: Import "protoc-gen-openapiv2/options/annotations.proto" was not found or had errors.
```

### Checklist

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

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.