From 2034fed56f88cc8c5db5639da9f10dec83629f58 Mon Sep 17 00:00:00 2001 From: "Antoine R. Dumont (@ardumont)" <antoine.romain.dumont@gmail.com> Date: Fri, 20 Jul 2018 14:57:17 +0200 Subject: [PATCH] swh.model.identifiers: Open metadata in persistent_identifier method Related T1152 --- swh/model/identifiers.py | 20 +++++++++------ swh/model/tests/test_identifiers.py | 39 +++++++++++++++++++---------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py index f775426d..e7608e97 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 01c1153c..66586085 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) -- GitLab