diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py index f775426d7216706b0e561e799f1c00d8cfbc2af2..e7608e978af8a002ea2afc0d106a4c69da9c1189 100644 --- a/swh/model/identifiers.py +++ b/swh/model/identifiers.py @@ -689,29 +689,33 @@ class PersistentId(namedtuple('PersistentId', PERSISTENT_IDENTIFIER_KEYS)): return pid -def persistent_identifier(object_type, object_id, scheme_version=1): +def persistent_identifier(object_type, object_id, scheme_version=1, + metadata={}): """Compute persistent identifier (stable over time) as per documentation. Documentation: - https://docs.softwareheritage.org/devel/swh-model/persistent-identifiers.html + https://docs.softwareheritage.org/devel/swh-model/persistent-identifiers.html # noqa Args: - object_type (str): object's type, either 'content', 'directory', 'release', - 'revision' or 'snapshot' + object_type (str): object's type, either 'content', 'directory', + 'release', 'revision' or 'snapshot' object_id (dict/bytes/str): object's dict representation or object identifier - scheme_version (int): persistent identifier scheme version, defaults to 1 + scheme_version (int): persistent identifier scheme version, + defaults to 1 + metadata (dict): metadata related to the pointed object Raises: - swh.model.exceptions.ValidationError: In case of invalid object type or id + swh.model.exceptions.ValidationError: In case of invalid object type + or id Returns: str: the persistent identifier - """ # noqa + """ pid = PersistentId(scheme_version=scheme_version, object_type=object_type, - object_id=object_id) + object_id=object_id, metadata=metadata) return str(pid) diff --git a/swh/model/tests/test_identifiers.py b/swh/model/tests/test_identifiers.py index 01c1153c6ac40e689a71aa2432af13e5267e6c1d..66586085535fcaaf3788b1ce5ffce99760eaf46d 100644 --- a/swh/model/tests/test_identifiers.py +++ b/swh/model/tests/test_identifiers.py @@ -787,34 +787,47 @@ class SnapshotIdentifier(unittest.TestCase): _directory = {'id': _directory_id} _content = {'sha1_git': _content_id} - for full_type, _hash, expected_persistent_id, version in [ + for full_type, _hash, expected_persistent_id, version, _meta in [ (SNAPSHOT, _snapshot_id, - 'swh:1:snp:c7c108084bc0bf3d81436bf980b46e98bd338453', None), + 'swh:1:snp:c7c108084bc0bf3d81436bf980b46e98bd338453', + None, {}), (RELEASE, _release_id, - 'swh:2:rel:22ece559cc7cc2364edc5e5593d63ae8bd229f9f', 2), + 'swh:2:rel:22ece559cc7cc2364edc5e5593d63ae8bd229f9f', + 2, {}), (REVISION, _revision_id, - 'swh:1:rev:309cf2674ee7a0749978cf8265ab91a60aea0f7d', None), + 'swh:1:rev:309cf2674ee7a0749978cf8265ab91a60aea0f7d', + None, {}), (DIRECTORY, _directory_id, - 'swh:1:dir:d198bc9d7a6bcf6db04f476d29314f157507d505', None), + 'swh:1:dir:d198bc9d7a6bcf6db04f476d29314f157507d505', + None, {}), (CONTENT, _content_id, - 'swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2', 1), + 'swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2', + 1, {}), (SNAPSHOT, _snapshot, - 'swh:1:snp:c7c108084bc0bf3d81436bf980b46e98bd338453', None), + 'swh:1:snp:c7c108084bc0bf3d81436bf980b46e98bd338453', + None, {}), (RELEASE, _release, - 'swh:2:rel:22ece559cc7cc2364edc5e5593d63ae8bd229f9f', 2), + 'swh:2:rel:22ece559cc7cc2364edc5e5593d63ae8bd229f9f', + 2, {}), (REVISION, _revision, - 'swh:1:rev:309cf2674ee7a0749978cf8265ab91a60aea0f7d', None), + 'swh:1:rev:309cf2674ee7a0749978cf8265ab91a60aea0f7d', + None, {}), (DIRECTORY, _directory, - 'swh:1:dir:d198bc9d7a6bcf6db04f476d29314f157507d505', None), + 'swh:1:dir:d198bc9d7a6bcf6db04f476d29314f157507d505', + None, {}), (CONTENT, _content, - 'swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2', 1), + 'swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2', + 1, {}), + (CONTENT, _content, + 'swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2;origin=1', + 1, {'origin': '1'}), ]: if version: actual_value = identifiers.persistent_identifier( - full_type, _hash, version) + full_type, _hash, version, metadata=_meta) else: actual_value = identifiers.persistent_identifier( - full_type, _hash) + full_type, _hash, metadata=_meta) self.assertEquals(actual_value, expected_persistent_id)