Fixes for Python 3.9 (#140)
Fix issue in logic for evaluating field types affecting python 3.9
This commit is contained in:
parent
8f7af272cc
commit
a5e0ef910f
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v1
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
|
@ -920,9 +920,9 @@ class Message(ABC):
|
||||
"""
|
||||
output: Dict[str, Any] = {}
|
||||
field_types = self._type_hints()
|
||||
defaults = self._betterproto.default_gen
|
||||
for field_name, meta in self._betterproto.meta_by_field_name.items():
|
||||
field_type = field_types[field_name]
|
||||
field_is_repeated = type(field_type) is type(typing.List)
|
||||
field_is_repeated = defaults[field_name] is list
|
||||
value = getattr(self, field_name)
|
||||
cased_name = casing(field_name).rstrip("_") # type: ignore
|
||||
if meta.proto_type == TYPE_MESSAGE:
|
||||
@ -988,7 +988,7 @@ class Message(ABC):
|
||||
output[cased_name] = b64encode(value).decode("utf8")
|
||||
elif meta.proto_type == TYPE_ENUM:
|
||||
if field_is_repeated:
|
||||
enum_class: Type[Enum] = field_type.__args__[0]
|
||||
enum_class: Type[Enum] = field_types[field_name].__args__[0]
|
||||
if isinstance(value, typing.Iterable) and not isinstance(
|
||||
value, str
|
||||
):
|
||||
@ -997,7 +997,7 @@ class Message(ABC):
|
||||
# transparently upgrade single value to repeated
|
||||
output[cased_name] = [enum_class(value).name]
|
||||
else:
|
||||
enum_class: Type[Enum] = field_type # noqa
|
||||
enum_class: Type[Enum] = field_types[field_name] # noqa
|
||||
output[cased_name] = enum_class(value).name
|
||||
else:
|
||||
output[cased_name] = value
|
||||
|
Loading…
x
Reference in New Issue
Block a user