danielgtaylor / python-betterproto

Clean, modern, Python 3.6+ code generator & library for Protobuf 3 and async gRPC
MIT License
1.44k stars 196 forks source link

`mypy --strict` fails with `Name "betterproto.ServiceStub" is not defined` #577

Open llucax opened 1 month ago

llucax commented 1 month ago

Summary

mypy --strict fails with Name "betterproto.ServiceStub" is not defined

Reproduction Steps

  1. Generate some gRPC files from some proto files
  2. Run mypy on the generated code

Expected Results

mypy passes.

Actual Results

error: Name "betterproto.ServiceStub" is not defined  [name-defined]

Where the stub class is defined in the generated code.

I see the symbol is imported in https://github.com/danielgtaylor/python-betterproto/blob/master/src/betterproto/__init__.py, but it seems like mypy needs imported symbols to be explicitly exported, probably via __all__ or using from x import y as y (see https://peps.python.org/pep-0484/#stub-files).

System Information

$ protoc --version; python --version; pip show betterproto; pip show grpcio-tools
bash: protoc: command not found
Python 3.11.9
Name: betterproto
Version: 2.0.0b6
Location: /home/luca/devel/frequenz-microgrid-betterproto/.direnv/python-3.11.9/lib/python3.11/site-packages
Requires: grpclib, python-dateutil
Required-by: frequenz-microgrid-betterproto
Name: grpcio-tools
Version: 1.63.0
Location: /home/luca/devel/setuptools-betterproto/.direnv/python-3.11/lib/python3.11/site-packages
Requires: grpcio, protobuf, setuptools

(I'm using grpcio-tools to generate the files, not protoc)

Checklist

llucax commented 1 month ago

Not sure if https://github.com/danielgtaylor/python-betterproto/pull/540 might fix this too already.