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
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v1
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
@ -920,9 +920,9 @@ class Message(ABC):
|
|||||||
"""
|
"""
|
||||||
output: Dict[str, Any] = {}
|
output: Dict[str, Any] = {}
|
||||||
field_types = self._type_hints()
|
field_types = self._type_hints()
|
||||||
|
defaults = self._betterproto.default_gen
|
||||||
for field_name, meta in self._betterproto.meta_by_field_name.items():
|
for field_name, meta in self._betterproto.meta_by_field_name.items():
|
||||||
field_type = field_types[field_name]
|
field_is_repeated = defaults[field_name] is list
|
||||||
field_is_repeated = type(field_type) is type(typing.List)
|
|
||||||
value = getattr(self, field_name)
|
value = getattr(self, field_name)
|
||||||
cased_name = casing(field_name).rstrip("_") # type: ignore
|
cased_name = casing(field_name).rstrip("_") # type: ignore
|
||||||
if meta.proto_type == TYPE_MESSAGE:
|
if meta.proto_type == TYPE_MESSAGE:
|
||||||
@ -988,7 +988,7 @@ class Message(ABC):
|
|||||||
output[cased_name] = b64encode(value).decode("utf8")
|
output[cased_name] = b64encode(value).decode("utf8")
|
||||||
elif meta.proto_type == TYPE_ENUM:
|
elif meta.proto_type == TYPE_ENUM:
|
||||||
if field_is_repeated:
|
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(
|
if isinstance(value, typing.Iterable) and not isinstance(
|
||||||
value, str
|
value, str
|
||||||
):
|
):
|
||||||
@ -997,7 +997,7 @@ class Message(ABC):
|
|||||||
# transparently upgrade single value to repeated
|
# transparently upgrade single value to repeated
|
||||||
output[cased_name] = [enum_class(value).name]
|
output[cased_name] = [enum_class(value).name]
|
||||||
else:
|
else:
|
||||||
enum_class: Type[Enum] = field_type # noqa
|
enum_class: Type[Enum] = field_types[field_name] # noqa
|
||||||
output[cased_name] = enum_class(value).name
|
output[cased_name] = enum_class(value).name
|
||||||
else:
|
else:
|
||||||
output[cased_name] = value
|
output[cased_name] = value
|
||||||
|
Loading…
x
Reference in New Issue
Block a user