diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py index e4598eb3efde98f835c6672c564de70f76994a53..44daee52915162b633962335652caf79d803182f 100644 --- a/swh/model/identifiers.py +++ b/swh/model/identifiers.py @@ -857,6 +857,17 @@ class CoreSWHID(_BaseSWHID[ObjectType]): ) """the type of object the identifier points to""" + def to_extended(self) -> ExtendedSWHID: + """Converts this CoreSWHID into an ExtendedSWHID. + + As ExtendedSWHID is a superset of CoreSWHID, this is lossless.""" + return ExtendedSWHID( + namespace=self.namespace, + scheme_version=self.scheme_version, + object_type=ExtendedObjectType(self.object_type.value), + object_id=self.object_id, + ) + def _parse_core_swhid(swhid: Union[str, CoreSWHID, None]) -> Optional[CoreSWHID]: if swhid is None or isinstance(swhid, CoreSWHID): diff --git a/swh/model/tests/test_identifiers.py b/swh/model/tests/test_identifiers.py index 5fad92ba121c1f52ce6ee54212f02dc77d55f450..a3a5295f5bca6bdd6c70675cb9b9add40f542ea3 100644 --- a/swh/model/tests/test_identifiers.py +++ b/swh/model/tests/test_identifiers.py @@ -1368,6 +1368,18 @@ def test_parse_unparse_swhids(string, core, qualified, extended): assert string == str(parsed_swhid) +@pytest.mark.parametrize( + "core,extended", + [ + pytest.param(core, extended, id=string) + for (string, core, qualified, extended) in VALID_SWHIDS + if core is not None + ], +) +def test_core_to_extended(core, extended): + assert core.to_extended() == extended + + @pytest.mark.parametrize( "ns,version,type,id,qualifiers", [