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