diff --git a/swh/deposit/client/__init__.py b/swh/deposit/client/__init__.py --- a/swh/deposit/client/__init__.py +++ b/swh/deposit/client/__init__.py @@ -168,7 +168,7 @@ raise ValueError(msg) def status_update(self, update_status_url, status, - revision_id=None, directory_id=None): + revision_id=None, directory_id=None, origin_url=None): """Update the deposit's status. Args: @@ -176,6 +176,7 @@ status (str): The status to update the deposit with revision_id (str/None): the revision's identifier to update to directory_id (str/None): the directory's identifier to update to + origin_url (str/None): deposit's associated origin url """ payload = {'status': status} @@ -183,6 +184,8 @@ payload['revision_id'] = revision_id if directory_id: payload['directory_id'] = directory_id + if origin_url: + payload['origin_url'] = origin_url self.do('put', update_status_url, json=payload) diff --git a/swh/deposit/loader/loader.py b/swh/deposit/loader/loader.py --- a/swh/deposit/loader/loader.py +++ b/swh/deposit/loader/loader.py @@ -116,16 +116,19 @@ rev = revisions[rev_id] if rev_id: rev_id = hashutil.hash_to_hex(rev_id) + dir_id = rev['directory'] if dir_id: dir_id = hashutil.hash_to_hex(dir_id) # update the deposit's status to success with its # revision-id and directory-id - self.client.status_update(self.deposit_update_url, - status='done', - revision_id=rev_id, - directory_id=dir_id) + self.client.status_update( + self.deposit_update_url, + status='done', + revision_id=rev_id, + directory_id=dir_id, + origin_url=self.origin['url']) except Exception: self.log.exception( 'Problem when trying to update the deposit\'s status') diff --git a/swh/deposit/tests/loader/common.py b/swh/deposit/tests/loader/common.py --- a/swh/deposit/tests/loader/common.py +++ b/swh/deposit/tests/loader/common.py @@ -36,12 +36,14 @@ return json.loads(r.content.decode('utf-8')) def status_update(self, update_status_url, status, - revision_id=None, directory_id=None): + revision_id=None, directory_id=None, origin_url=None): payload = {'status': status} if revision_id: payload['revision_id'] = revision_id if directory_id: payload['directory_id'] = directory_id + if origin_url: + payload['origin_url'] = origin_url self.client.put(update_status_url, content_type='application/json', data=json.dumps(payload)) diff --git a/swh/deposit/tests/loader/test_loader.py b/swh/deposit/tests/loader/test_loader.py --- a/swh/deposit/tests/loader/test_loader.py +++ b/swh/deposit/tests/loader/test_loader.py @@ -12,16 +12,19 @@ from rest_framework.test import APITestCase from swh.model import hashutil +from swh.deposit.models import Deposit from swh.deposit.loader import loader -from swh.deposit.config import PRIVATE_GET_RAW_CONTENT -from swh.deposit.config import PRIVATE_GET_DEPOSIT_METADATA -from swh.deposit.config import PRIVATE_PUT_DEPOSIT +from swh.deposit.config import ( + PRIVATE_GET_RAW_CONTENT, PRIVATE_GET_DEPOSIT_METADATA, PRIVATE_PUT_DEPOSIT +) from django.core.urlresolvers import reverse + from .common import SWHDepositTestClient, CLIENT_TEST_CONFIG from .. import TEST_LOADER_CONFIG -from ..common import BasicTestCase, WithAuthTestCase, CommonCreationRoutine -from ..common import FileSystemCreationRoutine +from ..common import (BasicTestCase, WithAuthTestCase, + CommonCreationRoutine, + FileSystemCreationRoutine) TOOL_ID = 99 @@ -255,6 +258,7 @@ self.assertEquals(len(self.loader.state['provider']), 1) codemeta = 'codemeta:' + origin_url = 'https://hal-test.archives-ouvertes.fr/hal-01243065' expected_origin_metadata = { '@xmlns': 'http://www.w3.org/2005/Atom', '@xmlns:codemeta': 'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0', @@ -262,8 +266,7 @@ 'email': 'hal@ccsd.cnrs.fr', 'name': 'HAL' }, - codemeta + 'url': - 'https://hal-test.archives-ouvertes.fr/hal-01243065', + codemeta + 'url': origin_url, codemeta + 'runtimePlatform': 'phpstorm', codemeta + 'license': [ { @@ -292,3 +295,14 @@ self.assertEquals(result['metadata'], expected_origin_metadata) self.assertEquals(result['tool_id'], TOOL_ID) self.assertEquals(result['provider_id'], PROVIDER_ID) + + deposit = Deposit.objects.get(pk=self.deposit_id) + + self.assertRegex(deposit.swh_id, r'^swh:1:dir:.*') + self.assertEquals(deposit.swh_id_context, '%s;origin=%s' % ( + deposit.swh_id, origin_url + )) + self.assertRegex(deposit.swh_anchor_id, r'^swh:1:rev:.*') + self.assertEquals(deposit.swh_anchor_id_context, '%s;origin=%s' % ( + deposit.swh_anchor_id, origin_url + ))