Most of the grpcio package's public classes are abstract base classes. There are over 20 ABCs in grpc/__init__.py alone.
However, the type hints for these classes don't specify a base class of abc.ABC or a metaclass of abc.ABCMeta, so the ABC-specific register class method for registering "virtual subclasses" exists at runtime but not when type checking.
Minimum Reproducible Example
main.py
```py
from __future__ import annotations
import grpc
import typing
@grpc.Call.register
class CallProxy:
def __init__(self, target: grpc.Call) -> None:
self._target = target
def __getattr__(self, name: str) -> typing.Any:
return getattr(self._target, name)
print("main.py: No errors at runtime")
```
run.sh
```sh
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
python -m venv venv
source ./venv/bin/activate
pip install grpcio grpc-stubs mypy
python main.py
mypy main.py
```
Full output
```
Requirement already satisfied: grpcio in ./venv/lib/python3.9/site-packages (1.57.0)
Requirement already satisfied: grpc-stubs in ./venv/lib/python3.9/site-packages (1.53.0.2)
Requirement already satisfied: mypy in ./venv/lib/python3.9/site-packages (1.5.0)
Requirement already satisfied: mypy-extensions>=1.0.0 in ./venv/lib/python3.9/site-packages (from mypy) (1.0.0)
Requirement already satisfied: typing-extensions>=4.1.0 in ./venv/lib/python3.9/site-packages (from mypy) (4.7.1)
Requirement already satisfied: tomli>=1.1.0 in ./venv/lib/python3.9/site-packages (from mypy) (2.0.1)
WARNING: You are using pip version 22.0.4; however, version 23.2.1 is available.
You should consider upgrading via the '/tmp/grpc_abc/venv/bin/python -m pip install --upgrade pip' command.
main.py: No errors at runtime
main.py:5: error: "type[Call]" has no attribute "register" [attr-defined]
Found 1 error in 1 file (checked 1 source file)
```
Description of issue
Most of the
grpcio
package's public classes are abstract base classes. There are over 20 ABCs ingrpc/__init__.py
alone.However, the type hints for these classes don't specify a base class of
abc.ABC
or a metaclass ofabc.ABCMeta
, so the ABC-specificregister
class method for registering "virtual subclasses" exists at runtime but not when type checking.Minimum Reproducible Example
main.py
```py from __future__ import annotations import grpc import typing @grpc.Call.register class CallProxy: def __init__(self, target: grpc.Call) -> None: self._target = target def __getattr__(self, name: str) -> typing.Any: return getattr(self._target, name) print("main.py: No errors at runtime") ```run.sh
```sh #!/usr/bin/env bash set -o errexit -o nounset -o pipefail python -m venv venv source ./venv/bin/activate pip install grpcio grpc-stubs mypy python main.py mypy main.py ```Full output
``` Requirement already satisfied: grpcio in ./venv/lib/python3.9/site-packages (1.57.0) Requirement already satisfied: grpc-stubs in ./venv/lib/python3.9/site-packages (1.53.0.2) Requirement already satisfied: mypy in ./venv/lib/python3.9/site-packages (1.5.0) Requirement already satisfied: mypy-extensions>=1.0.0 in ./venv/lib/python3.9/site-packages (from mypy) (1.0.0) Requirement already satisfied: typing-extensions>=4.1.0 in ./venv/lib/python3.9/site-packages (from mypy) (4.7.1) Requirement already satisfied: tomli>=1.1.0 in ./venv/lib/python3.9/site-packages (from mypy) (2.0.1) WARNING: You are using pip version 22.0.4; however, version 23.2.1 is available. You should consider upgrading via the '/tmp/grpc_abc/venv/bin/python -m pip install --upgrade pip' command. main.py: No errors at runtime main.py:5: error: "type[Call]" has no attribute "register" [attr-defined] Found 1 error in 1 file (checked 1 source file) ```