@@ -920,9 +920,9 @@ def to_dict(
920
920
"""
921
921
output : Dict [str , Any ] = {}
922
922
field_types = self ._type_hints ()
923
+ defaults = self ._betterproto .default_gen
923
924
for field_name , meta in self ._betterproto .meta_by_field_name .items ():
924
- field_type = field_types [field_name ]
925
- field_is_repeated = type (field_type ) is type (typing .List )
925
+ field_is_repeated = defaults [field_name ] is list
926
926
value = getattr (self , field_name )
927
927
cased_name = casing (field_name ).rstrip ("_" ) # type: ignore
928
928
if meta .proto_type == TYPE_MESSAGE :
@@ -988,7 +988,7 @@ def to_dict(
988
988
output [cased_name ] = b64encode (value ).decode ("utf8" )
989
989
elif meta .proto_type == TYPE_ENUM :
990
990
if field_is_repeated :
991
- enum_class : Type [Enum ] = field_type .__args__ [0 ]
991
+ enum_class : Type [Enum ] = field_types [ field_name ] .__args__ [0 ]
992
992
if isinstance (value , typing .Iterable ) and not isinstance (
993
993
value , str
994
994
):
@@ -997,7 +997,7 @@ def to_dict(
997
997
# transparently upgrade single value to repeated
998
998
output [cased_name ] = [enum_class (value ).name ]
999
999
else :
1000
- enum_class : Type [Enum ] = field_type # noqa
1000
+ enum_class : Type [Enum ] = field_types [ field_name ] # noqa
1001
1001
output [cased_name ] = enum_class (value ).name
1002
1002
else :
1003
1003
output [cased_name ] = value
0 commit comments