Fixes for Python 3.9 (#140)

Fix issue in logic for evaluating field types affecting python 3.9
This commit is contained in:
James 2020-11-01 14:23:02 +00:00 committed by GitHub
parent 8f7af272cc
commit a5e0ef910f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 5 deletions

View File

@ -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 }}

View File

@ -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