diff --git a/swh/model/model.py b/swh/model/model.py index 6df310a0f35ce769ccf21305814691c514b662f9..1c46f2a0b0ff4f3cc2b79a6807b350e123d603f1 100644 --- a/swh/model/model.py +++ b/swh/model/model.py @@ -848,7 +848,10 @@ class MetadataAuthority(BaseModel): @classmethod def from_dict(cls, d): - d["type"] = MetadataAuthorityType(d["type"]) + d = { + **d, + "type": MetadataAuthorityType(d["type"]), + } return super().from_dict(d) def unique_key(self) -> KeyType: diff --git a/swh/model/tests/test_model.py b/swh/model/tests/test_model.py index 2c84d714e882fc76e024d78fdf1e5443a33f190c..bf9725c628c337b8d701ad73ee7b39dba25d060e 100644 --- a/swh/model/tests/test_model.py +++ b/swh/model/tests/test_model.py @@ -45,6 +45,7 @@ from swh.model.model import ( Timestamp, TimestampWithTimezone, ) +from swh.model.tests.swh_model_data import TEST_OBJECTS from swh.model.tests.test_identifiers import ( content_example, directory_example, @@ -78,6 +79,17 @@ def test_todict_inverse_fromdict(objtype_and_obj): assert obj_as_dict == type(obj).from_dict(obj_as_dict).to_dict() +@pytest.mark.parametrize("object_type, objects", TEST_OBJECTS.items()) +def test_swh_model_todict_fromdict(object_type, objects): + """checks model objects in swh_model_data are in correct shape""" + assert objects + for obj in objects: + # Check the composition of from_dict and to_dict is the identity + obj_as_dict = obj.to_dict() + assert obj == type(obj).from_dict(obj_as_dict) + assert obj_as_dict == type(obj).from_dict(obj_as_dict).to_dict() + + def test_unique_key(): url = "http://example.org/" date = datetime.datetime.now(tz=datetime.timezone.utc)