@@ -1180,8 +1180,8 @@ def from_dict(self: T, value: Dict[str, Any]) -> T:
11801180 if value [key ] is not None :
11811181 if meta .proto_type == TYPE_MESSAGE :
11821182 v = getattr (self , field_name )
1183+ cls = self ._betterproto .cls_by_field [field_name ]
11831184 if isinstance (v , list ):
1184- cls = self ._betterproto .cls_by_field [field_name ]
11851185 if cls == datetime :
11861186 v = [isoparse (item ) for item in value [key ]]
11871187 elif cls == timedelta :
@@ -1191,16 +1191,15 @@ def from_dict(self: T, value: Dict[str, Any]) -> T:
11911191 ]
11921192 else :
11931193 v = [cls ().from_dict (item ) for item in value [key ]]
1194- elif isinstance ( v , datetime ) :
1194+ elif cls == datetime :
11951195 v = isoparse (value [key ])
11961196 setattr (self , field_name , v )
1197- elif isinstance ( v , timedelta ) :
1197+ elif cls == timedelta :
11981198 v = timedelta (seconds = float (value [key ][:- 1 ]))
11991199 setattr (self , field_name , v )
12001200 elif meta .wraps :
12011201 setattr (self , field_name , value [key ])
12021202 elif v is None :
1203- cls = self ._betterproto .cls_by_field [field_name ]
12041203 setattr (self , field_name , cls ().from_dict (value [key ]))
12051204 else :
12061205 # NOTE: `from_dict` mutates the underlying message, so no
0 commit comments