Fix from_dict() in the presence of optional datetime fields. (#329)

This commit is contained in:
Eitan Mosenkis
2022-02-03 11:00:56 +02:00
committed by GitHub
parent eeddc844a5
commit 8c727d904f
4 changed files with 9 additions and 5 deletions

View File

@@ -1180,8 +1180,8 @@ class Message(ABC):
if value[key] is not None:
if meta.proto_type == TYPE_MESSAGE:
v = getattr(self, field_name)
cls = self._betterproto.cls_by_field[field_name]
if isinstance(v, list):
cls = self._betterproto.cls_by_field[field_name]
if cls == datetime:
v = [isoparse(item) for item in value[key]]
elif cls == timedelta:
@@ -1191,16 +1191,15 @@ class Message(ABC):
]
else:
v = [cls().from_dict(item) for item in value[key]]
elif isinstance(v, datetime):
elif cls == datetime:
v = isoparse(value[key])
setattr(self, field_name, v)
elif isinstance(v, timedelta):
elif cls == timedelta:
v = timedelta(seconds=float(value[key][:-1]))
setattr(self, field_name, v)
elif meta.wraps:
setattr(self, field_name, value[key])
elif v is None:
cls = self._betterproto.cls_by_field[field_name]
setattr(self, field_name, cls().from_dict(value[key]))
else:
# NOTE: `from_dict` mutates the underlying message, so no