shabbyrobe / grpc-stubs

gRPC typing stubs for Python
MIT License
35 stars 21 forks source link

Trying to resolve errors with aio package #15

Closed shabbyrobe closed 2 years ago

shabbyrobe commented 3 years ago

Hi @ColdrickSotK - I merged PR #13 and added the example you posted as the basis for a test; unfortunately there's now a large number of type errors that happen when I run it:

E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:52: error: Definition of "metadata" in base class "_ClientCallDetails" is incompatible with definition in base class "ClientCallDetails" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:143: error: Definition of "initial_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:143: error: Definition of "trailing_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:164: error: Definition of "initial_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:164: error: Definition of "trailing_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:185: error: Definition of "initial_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:185: error: Definition of "trailing_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:207: error: Definition of "initial_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:207: error: Definition of "trailing_metadata" in base class "InterceptedCall" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:242: error: Return type "Coroutine[Any, Any, Optional[Metadata]]" of "initial_metadata" incompatible with return type "Coroutine[Any, Any, Metadata]" in supertype "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:244: error: Return type "Coroutine[Any, Any, Optional[Metadata]]" of "trailing_metadata" incompatible with return type "Coroutine[Any, Any, Metadata]" in supertype "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:289: error: Definition of "initial_metadata" in base class "_StreamCallResponseIterator" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:289: error: Definition of "trailing_metadata" in base class "_StreamCallResponseIterator" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:294: error: Definition of "initial_metadata" in base class "_StreamCallResponseIterator" is incompatible with definition in base class "Call" (diff)
E     ../../home/bl/code/py/grpc-stubs/grpc-stubs/aio/_interceptori:294: error: Definition of "trailing_metadata" in base class "_StreamCallResponseIterator" is incompatible with definition in base class "Call" (diff)
E     main:16: error: Argument 3 to "ClientCallDetails" has incompatible type "List[Any]"; expected "Optional[Metadata]" (diff)

I think a lot of it stems from the fact that the aio module uses a bit of an unholy mix of the abc module combined with messy multiple inheritance and type overloads just for good measure.

Do you have any suggestions for how some of these issues can be resolved?