diff --git a/docs/index.rst b/docs/index.rst --- a/docs/index.rst +++ b/docs/index.rst @@ -9,6 +9,7 @@ getting-started.md spec-api.md + metadata.md spec-injection.md dev-info.md sys-info.md diff --git a/swh/deposit/api/private/deposit_read.py b/swh/deposit/api/private/deposit_read.py --- a/swh/deposit/api/private/deposit_read.py +++ b/swh/deposit/api/private/deposit_read.py @@ -150,8 +150,8 @@ # Read information metadata data['origin'] = { - 'type': deposit.collection.name, - 'url': deposit.external_id, + 'type': 'deposit', + 'url': deposit.client.url + deposit.external_id, } # revision @@ -189,6 +189,28 @@ 'branch': 'master' } + provider = { + 'provider_name': deposit.client.last_name, + 'provider_type': 'deposit_client', + 'provider_url': deposit.client.url, + 'metadata': {} + } + + tool = { + 'tool_name': 'swh-deposit', + 'tool_version': '0.0.1', + 'tool_configuration': { + 'sword_version': '2' + } + } + + data['origin_metadata'] = { + 'provider': provider, + 'tool': tool, + 'metadata': metadata + } + + print(data) return data def process_get(self, req, collection_name, deposit_id): diff --git a/swh/deposit/injection/loader.py b/swh/deposit/injection/loader.py --- a/swh/deposit/injection/loader.py +++ b/swh/deposit/injection/loader.py @@ -136,13 +136,36 @@ revision = metadata['revision'] occurrence = metadata['occurrence'] + self.client.update_deposit_status(deposit_update_url, 'injecting') + super().prepare(tar_path=archive, origin=origin, visit_date=visit_date, revision=revision, occurrences=[occurrence]) + def store_metadata(self): + """Storing the origin_metadata during the load processus. + + Fetching tool and metadata_provider from storage and adding the + metadata associated to the current origin. + + """ + try: + tool_id = self.storage.indexer_configuration_get( + self.origin_metadata['tool']) + provider_id = self.storage.metadata_provider_get_by( + self.origin_metadata['provider']) + + self.storage.origin_metadata_add(self.origin_id, + self.visit_date, + provider_id, + tool_id, + self.origin_metadata['metadata']) + except: + self.log.exception('Problem when storing origin_metadata') + def post_load(self, success=True): """Updating the deposit's status according to its loading status. diff --git a/swh/deposit/migrations/0006_depositclient_url.py b/swh/deposit/migrations/0006_depositclient_url.py new file mode 100644 --- /dev/null +++ b/swh/deposit/migrations/0006_depositclient_url.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-11-07 13:12 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('deposit', '0005_auto_20171019_1436'), + ] + + operations = [ + migrations.AddField( + model_name='depositclient', + name='url', + field=models.TextField(default='https://hal.archives-ouvertes.fr/'), + preserve_default=False, + ), + ] diff --git a/swh/deposit/models.py b/swh/deposit/models.py --- a/swh/deposit/models.py +++ b/swh/deposit/models.py @@ -72,6 +72,7 @@ """ collections = ArrayField(models.IntegerField(), null=True) objects = UserManager() + url = models.TextField(null=False) class Meta: db_table = 'deposit_client' diff --git a/swh/deposit/tests/api/test_deposit_read_metadata.py b/swh/deposit/tests/api/test_deposit_read_metadata.py --- a/swh/deposit/tests/api/test_deposit_read_metadata.py +++ b/swh/deposit/tests/api/test_deposit_read_metadata.py @@ -37,8 +37,24 @@ expected_meta = { 'origin': { - 'url': 'some-external-id', - 'type': 'hal' + 'url': 'https://hal.archives-ouvertes.fr/some-external-id', + 'type': 'deposit' + }, + 'origin_metadata': { + 'metadata': {}, + 'provider': { + 'provider_name': '', + 'provider_type': 'deposit_client', + 'provider_url': 'https://hal.archives-ouvertes.fr/', + 'metadata': {} + }, + 'tool': { + 'tool_name': 'swh-deposit', + 'tool_version': '0.0.1', + 'tool_configuration': { + 'sword_version': '2' + } + } }, 'revision': { 'synthetic': True, diff --git a/swh/deposit/tests/common.py b/swh/deposit/tests/common.py --- a/swh/deposit/tests/common.py +++ b/swh/deposit/tests/common.py @@ -160,12 +160,14 @@ deposit_request_types[deposit_request_type] = drt _name = 'hal' + _url = 'https://hal.archives-ouvertes.fr/' # set collection up _collection = DepositCollection(name=_name) _collection.save() # set user/client up _client = DepositClient.objects.create_user(username=_name, - password=_name) + password=_name, + url=_url) _client.collections = [_collection.id] _client.save()