Я пытаюсь использовать protobuf enum как тип для значений в словаре, но по какой-то причине он не работает.
Мое определение перечисления в proto:
enum Device {
UNSPECIFIED = 0;
ON = 1;
OFF = 2;
}
После При успешной компиляции и импорте следующий код приводит к ошибке.
from devices_pb2 import Device
def foo(device: Device) -> Dict[str, Device]:
pass
Сообщение об ошибке:
def foo(device: Device) -> Dict[str, Device]:
File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 254, in inner
return func(*args, **kwds)
File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 629, in __getitem__
params = tuple(_type_check(p, msg) for p in params)
File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 629, in <genexpr>
params = tuple(_type_check(p, msg) for p in params)
File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 142, in _type_check
raise TypeError(f"{msg} Got {arg!r:.100}.")
TypeError: Parameters to generic types must be types. Got <google.protobuf.internal.enum_type_wrapper.EnumTypeWrapper object at 0x7f4df6d81850>.
Однако, если я не использую словарь, тогда он работает просто отлично:
def foo(device: Device) -> Device:
pass
Интересно, есть ли решение этой проблемы?