@@ -1215,7 +1215,6 @@ def from_dict(self: T, value: Dict[str, Any]) -> T:
1215
1215
meta = self ._betterproto .meta_by_field_name [field_name ]
1216
1216
except KeyError :
1217
1217
continue
1218
-
1219
1218
if value_ is None :
1220
1219
continue
1221
1220
@@ -1268,7 +1267,7 @@ def from_dict(self: T, value: Dict[str, Any]) -> T:
1268
1267
v = enum_cls .from_string (value_ )
1269
1268
else :
1270
1269
v = value_
1271
- elif meta .proto_type in ( TYPE_FLOAT , TYPE_DOUBLE ) :
1270
+ elif meta .proto_type in { TYPE_FLOAT , TYPE_DOUBLE } :
1272
1271
v = (
1273
1272
[_parse_float (n ) for n in value_ ]
1274
1273
if isinstance (value_ , list )
@@ -1417,39 +1416,37 @@ def from_pydict(self: T, value: Dict[str, Any]) -> T:
1417
1416
The initialized message.
1418
1417
"""
1419
1418
self ._serialized_on_wire = True
1420
- for key in value :
1419
+ for key , value_ in value . items () :
1421
1420
field_name = safe_snake_case (key )
1422
- meta = self ._betterproto .meta_by_field_name .get (field_name )
1423
- if not meta :
1421
+ try :
1422
+ meta = self ._betterproto .meta_by_field_name .get (field_name )
1423
+ except KeyError :
1424
+ continue
1425
10000
td>+ if value_ is None :
1424
1426
continue
1425
1427
1426
- if value [key ] is not None :
1427
- if meta .proto_type == TYPE_MESSAGE :
1428
- v = getattr (self , field_name )
1429
- if isinstance (v , list ):
1430
- cls = self ._betterproto .cls_by_field [field_name ]
1431
- for item in value [key ]:
1432
- v .append (cls ().from_pydict (item ))
1433
- elif isinstance (v , datetime ):
1434
- v = value [key ]
1435
- elif isinstance (v , timedelta ):
1436
- v = value [key ]
1437
- elif meta .wraps :
1438
- v = value [key ]
1439
- else :
1440
- # NOTE: `from_pydict` mutates the underlying message, so no
1441
- # assignment here is necessary.
1442
- v .from_pydict (value [key ])
1443
- elif meta .map_types and meta .map_types [1 ] == TYPE_MESSAGE :
1444
- v = getattr (self , field_name )
1445
- cls = self ._betterproto .cls_by_field [f"{ field_name } .value" ]
1446
- for k in value [key ]:
1447
- v [k ] = cls ().from_pydict (value [key ][k ])
1428
+ if meta .proto_type == TYPE_MESSAGE :
1429
+ v = getattr (self , field_name )
1430
+ if isinstance (v , list ):
1431
+ cls = self ._betterproto .cls_by_field [field_name ]
1432
+ for item in value_ :
1433
+ v .append (cls ().from_pydict (item ))
1434
+ elif isinstance (v , datetime ) or isinstance (v , timedelta ) or meta .wraps :
1435
+ v = value_
1448
1436
else :
1449
- v = value [key ]
1437
+ # NOTE: `from_pydict` mutates the underlying message, so no
1438
+ # assignment here is necessary.
1439
+ v .from_pydict (value_ )
1440
+ elif meta .map_types and meta .map_types [1 ] == TYPE_MESSAGE :
1441
+ v = getattr (self , field_name )
1442
+ cls = self ._betterproto .cls_by_field [f"{ field_name } .value" ]
1443
+ for k in value_ :
1444
+ v [k ] = cls ().from_pydict (value_ [k ])
1445
+ else :
1446
+ v = value_
1450
1447
1451
- if v is not None :
1452
- setattr (self , field_name , v )
1448
+ if v is not None :
1449
+ setattr (self , field_name , v )
1453
1450
return self
1454
1451
1455
1452
def is_set (self , name : str ) -> bool :
0 commit comments