diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -18,9 +18,9 @@
python3-click,
python3-vcversioner,
python3-djangorestframework,
- python3-djangorestframework-xml,
python3-requests,
python3-lxml,
+ python3-xmltodict,
patool
Standards-Version: 3.9.6
Homepage: https://forge.softwareheritage.org/source/swh-deposit/
diff --git a/requirements.txt b/requirements.txt
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,5 +2,5 @@
click
Django
djangorestframework
-djangorestframework-xml
lxml
+xmltodict
diff --git a/swh/deposit/api/common.py b/swh/deposit/api/common.py
--- a/swh/deposit/api/common.py
+++ b/swh/deposit/api/common.py
@@ -553,9 +553,7 @@
'Atom entry deposit is supposed to send for metadata. '
'If the body is empty, there is no metadata.')
- external_id = req.data.get(
- '{http://www.w3.org/2005/Atom}external_identifier',
- headers['slug'])
+ external_id = req.data.get('external_identifier', headers['slug'])
deposit = self._deposit_put(deposit_id=deposit_id,
in_progress=headers['in-progress'],
diff --git a/swh/deposit/parsers.py b/swh/deposit/parsers.py
--- a/swh/deposit/parsers.py
+++ b/swh/deposit/parsers.py
@@ -8,10 +8,12 @@
"""
-from decimal import Decimal
+import xmltodict
+
+from django.conf import settings
+from rest_framework.parsers import BaseParser
from rest_framework.parsers import FileUploadParser
from rest_framework.parsers import MultiPartParser
-from rest_framework_xml.parsers import XMLParser
class SWHFileUploadZipParser(FileUploadParser):
@@ -22,23 +24,29 @@
class SWHFileUploadTarParser(FileUploadParser):
- """File upload parser limited to zip archive.
+ """File upload parser limited to tarball (tar, tar.gz, tar.*) archives.
"""
media_type = 'application/x-tar'
-class SWHXMLParser(XMLParser):
- def _type_convert(self, value):
- """Override the default type converter to avoid having decimal in the
- resulting output.
+class SWHXMLParser(BaseParser):
+ """
+ XML parser.
+ """
+ media_type = 'application/xml'
+ def parse(self, stream, media_type=None, parser_context=None):
"""
- value = super()._type_convert(value)
- if isinstance(value, Decimal):
- value = str(value)
-
- return value
+ Parses the incoming bytestream as XML and returns the resulting data.
+ """
+ parser_context = parser_context or {}
+ encoding = parser_context.get('encoding', settings.DEFAULT_CHARSET)
+ data = xmltodict.parse(stream, encoding=encoding,
+ process_namespaces=False)
+ if 'entry' in data:
+ data = data['entry']
+ return data
class SWHAtomEntryParser(SWHXMLParser):
diff --git a/swh/deposit/tests/api/test_deposit.py b/swh/deposit/tests/api/test_deposit.py
--- a/swh/deposit/tests/api/test_deposit.py
+++ b/swh/deposit/tests/api/test_deposit.py
@@ -102,8 +102,7 @@
self.assertEquals(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- actual_state = response_content[
- '{http://www.w3.org/2005/Atom}deposit_status']
+ actual_state = response_content['deposit_status']
self.assertEquals(actual_state, DEPOSIT_STATUS_REJECTED)
@istest
diff --git a/swh/deposit/tests/api/test_deposit_atom.py b/swh/deposit/tests/api/test_deposit_atom.py
--- a/swh/deposit/tests/api/test_deposit_atom.py
+++ b/swh/deposit/tests/api/test_deposit_atom.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017 The Software Heritage developers
+# Copyright (C) 2017-2018 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -269,15 +269,13 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
dr = DepositRequest.objects.get(deposit=deposit)
self.assertIsNotNone(dr.metadata)
- sw_version = dr.metadata.get(
- '{https://doi.org/10.5063/SCHEMA/CODEMETA-2.0}softwareVersion')
+ sw_version = dr.metadata.get('codemeta:softwareVersion')
self.assertEquals(sw_version, '10.4')
@istest
@@ -358,8 +356,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.collection, self.collection)
@@ -399,8 +396,7 @@
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.collection, self.collection)
@@ -438,8 +434,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.collection, self.collection)
@@ -475,8 +470,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = int(response_content['deposit_id'])
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.collection, self.collection)
@@ -503,8 +497,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = int(response_content['deposit_id'])
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.collection, self.collection)
diff --git a/swh/deposit/tests/api/test_deposit_binary.py b/swh/deposit/tests/api/test_deposit_binary.py
--- a/swh/deposit/tests/api/test_deposit_binary.py
+++ b/swh/deposit/tests/api/test_deposit_binary.py
@@ -174,8 +174,7 @@
# then
response_content = parse_xml(BytesIO(response.content))
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, DEPOSIT_STATUS_DEPOSITED)
@@ -189,15 +188,12 @@
self.assertRegex(deposit_request.archive.name, self.archive['name'])
response_content = parse_xml(BytesIO(response.content))
- self.assertEqual(
- response_content['{http://www.w3.org/2005/Atom}deposit_archive'],
- self.archive['name'])
- self.assertEqual(
- response_content['{http://www.w3.org/2005/Atom}deposit_id'],
- deposit.id)
- self.assertEqual(
- response_content['{http://www.w3.org/2005/Atom}deposit_status'],
- deposit.status)
+ self.assertEqual(response_content['deposit_archive'],
+ self.archive['name'])
+ self.assertEqual(int(response_content['deposit_id']),
+ deposit.id)
+ self.assertEqual(response_content['deposit_status'],
+ deposit.status)
edit_se_iri = reverse('edit_se_iri',
args=[self.collection.name, deposit.id])
@@ -384,8 +380,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
@@ -409,8 +404,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id2 = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id2 = response_content['deposit_id']
deposit2 = Deposit.objects.get(pk=deposit_id2)
@@ -448,8 +442,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, 'partial')
@@ -538,8 +531,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, DEPOSIT_STATUS_DEPOSITED)
diff --git a/swh/deposit/tests/api/test_deposit_delete.py b/swh/deposit/tests/api/test_deposit_delete.py
--- a/swh/deposit/tests/api/test_deposit_delete.py
+++ b/swh/deposit/tests/api/test_deposit_delete.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017 The Software Heritage developers
+# Copyright (C) 2017-2018 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
diff --git a/swh/deposit/tests/api/test_deposit_multipart.py b/swh/deposit/tests/api/test_deposit_multipart.py
--- a/swh/deposit/tests/api/test_deposit_multipart.py
+++ b/swh/deposit/tests/api/test_deposit_multipart.py
@@ -147,8 +147,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, DEPOSIT_STATUS_DEPOSITED)
@@ -166,8 +165,7 @@
self.archive['name'])
else:
self.assertEquals(
- deposit_request.metadata[
- '{http://www.w3.org/2005/Atom}id'],
+ deposit_request.metadata['id'],
'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a')
@istest
@@ -215,8 +213,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, DEPOSIT_STATUS_DEPOSITED)
@@ -234,8 +231,7 @@
self.archive['name'])
else:
self.assertEquals(
- deposit_request.metadata[
- '{http://www.w3.org/2005/Atom}id'],
+ deposit_request.metadata['id'],
'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a')
@istest
@@ -283,8 +279,7 @@
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = response_content['deposit_id']
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, 'partial')
@@ -303,8 +298,7 @@
self.archive['name'])
else:
self.assertEquals(
- deposit_request.metadata[
- '{http://www.w3.org/2005/Atom}id'],
+ deposit_request.metadata['id'],
'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a')
replace_metadata_uri = response._headers['location'][1]
@@ -333,8 +327,7 @@
self.archive['name'])
else:
self.assertEquals(
- deposit_request.metadata[
- '{http://www.w3.org/2005/Atom}id'],
+ deposit_request.metadata['id'],
'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa7b')
# FAILURE scenarios
@@ -377,7 +370,7 @@
self.assertEqual(response.status_code,
status.HTTP_415_UNSUPPORTED_MEDIA_TYPE)
self.assertTrue(
- 'Only 1 application/zip (or application/x-tar) archive' in \
+ 'Only 1 application/zip (or application/x-tar) archive' in
response.content.decode('utf-8'))
# when
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
@@ -51,11 +51,10 @@
},
'origin_metadata': {
'metadata': {
- '{http://www.w3.org/2005/Atom}external_identifier':
- 'some-external-id',
- '{http://www.w3.org/2005/Atom}url':
- 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ '@xmlns': 'http://www.w3.org/2005/Atom',
+ 'external_identifier':'some-external-id',
+ 'url': 'https://hal-test.archives-ouvertes.fr/' +
+ 'some-external-id'
},
'provider': {
'provider_name': 'hal',
@@ -79,11 +78,10 @@
'committer': SWH_PERSON,
'date': None,
'metadata': {
- '{http://www.w3.org/2005/Atom}external_identifier':
- 'some-external-id',
- '{http://www.w3.org/2005/Atom}url':
- 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ '@xmlns': 'http://www.w3.org/2005/Atom',
+ 'external_identifier': 'some-external-id',
+ 'url': 'https://hal-test.archives-ouvertes.fr/' +
+ 'some-external-id'
},
'type': 'tar'
},
@@ -137,11 +135,10 @@
},
'origin_metadata': {
'metadata': {
- '{http://www.w3.org/2005/Atom}external_identifier':
- 'some-external-id',
- '{http://www.w3.org/2005/Atom}url':
- 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ '@xmlns': 'http://www.w3.org/2005/Atom',
+ 'external_identifier': 'some-external-id',
+ 'url': 'https://hal-test.archives-ouvertes.fr/' +
+ 'some-external-id'
},
'provider': {
'provider_name': 'hal',
@@ -166,11 +163,10 @@
'type': 'tar',
'message': 'hal: Deposit %s in collection hal' % deposit_id,
'metadata': {
- '{http://www.w3.org/2005/Atom}external_identifier':
- 'some-external-id',
- '{http://www.w3.org/2005/Atom}url':
- 'https://hal-test.archives-ouvertes.fr/' +
- 'some-external-id'
+ '@xmlns': 'http://www.w3.org/2005/Atom',
+ 'external_identifier': 'some-external-id',
+ 'url': 'https://hal-test.archives-ouvertes.fr/' +
+ 'some-external-id'
},
'parents': [swh_id]
},
diff --git a/swh/deposit/tests/api/test_deposit_status.py b/swh/deposit/tests/api/test_deposit_status.py
--- a/swh/deposit/tests/api/test_deposit_status.py
+++ b/swh/deposit/tests/api/test_deposit_status.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017 The Software Heritage developers
+# Copyright (C) 2017-2018 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -61,13 +61,10 @@
self.assertEqual(status_response.status_code, status.HTTP_200_OK)
r = parse_xml(BytesIO(status_response.content))
- self.assertEqual(r['{http://www.w3.org/2005/Atom}deposit_id'],
- deposit.id)
- self.assertEqual(r['{http://www.w3.org/2005/Atom}deposit_status'],
- DEPOSIT_STATUS_DEPOSITED)
- self.assertEqual(
- r['{http://www.w3.org/2005/Atom}deposit_status_detail'],
- DEPOSIT_STATUS_DETAIL[DEPOSIT_STATUS_DEPOSITED])
+ self.assertEqual(int(r['deposit_id']), deposit.id)
+ self.assertEqual(r['deposit_status'], DEPOSIT_STATUS_DEPOSITED)
+ self.assertEqual(r['deposit_status_detail'],
+ DEPOSIT_STATUS_DETAIL[DEPOSIT_STATUS_DEPOSITED])
@istest
def status_with_swh_id(self):
@@ -87,15 +84,11 @@
# then
self.assertEqual(status_response.status_code, status.HTTP_200_OK)
r = parse_xml(BytesIO(status_response.content))
- self.assertEqual(r['{http://www.w3.org/2005/Atom}deposit_id'],
- deposit_id)
- self.assertEqual(r['{http://www.w3.org/2005/Atom}deposit_status'],
- _status)
- self.assertEqual(
- r['{http://www.w3.org/2005/Atom}deposit_status_detail'],
- DEPOSIT_STATUS_DETAIL[DEPOSIT_STATUS_LOAD_SUCCESS])
- self.assertEqual(r['{http://www.w3.org/2005/Atom}deposit_swh_id'],
- _swh_id)
+ self.assertEqual(int(r['deposit_id']), deposit_id)
+ self.assertEqual(r['deposit_status'], _status)
+ self.assertEqual(r['deposit_status_detail'],
+ DEPOSIT_STATUS_DETAIL[DEPOSIT_STATUS_LOAD_SUCCESS])
+ self.assertEqual(r['deposit_swh_id'], _swh_id)
@istest
def status_on_unknown_deposit(self):
diff --git a/swh/deposit/tests/api/test_deposit_update.py b/swh/deposit/tests/api/test_deposit_update.py
--- a/swh/deposit/tests/api/test_deposit_update.py
+++ b/swh/deposit/tests/api/test_deposit_update.py
@@ -130,8 +130,7 @@
self.assertEquals(len(list(requests)), 1)
metadata = requests[0].metadata
- self.assertEquals(metadata["{http://www.w3.org/2005/Atom}foobar"],
- 'bar')
+ self.assertEquals(metadata['foobar'], 'bar')
# check we did not touch the other parts
requests = list(DepositRequest.objects.filter(
@@ -227,8 +226,7 @@
self.assertEquals(len(list(requests)), 3)
# a new one was added
- self.assertEquals(requests[1].metadata[
- "{http://www.w3.org/2005/Atom}foobar"], 'bar')
+ self.assertEquals(requests[1].metadata['foobar'], 'bar')
# check we did not touch the other parts
requests = list(DepositRequest.objects.filter(
diff --git a/swh/deposit/tests/api/test_parser.py b/swh/deposit/tests/api/test_parser.py
new file mode 100644
--- /dev/null
+++ b/swh/deposit/tests/api/test_parser.py
@@ -0,0 +1,104 @@
+# Copyright (C) 2018 The Software Heritage developers
+# See the AUTHORS file at the top-level directory of this distribution
+# License: GNU General Public License version 3, or any later version
+# See top-level LICENSE file for more information
+
+import io
+
+from collections import OrderedDict
+from nose.tools import istest
+from rest_framework.test import APITestCase
+
+from swh.deposit.parsers import SWHXMLParser
+
+
+class ParsingTest(APITestCase):
+ """Access to main entry point is ok without authentication
+
+ """
+ @istest
+ def parsing_without_duplicates(self):
+ xml_no_duplicate = io.BytesIO(b'''
+
+ Awesome Compiler
+
+ GPL3.0
+ https://opensource.org/licenses/GPL-3.0
+
+ Python3
+
+ author1
+ Inria
+
+ ocaml
+ http://issuetracker.com
+ ''')
+
+ actual_result = SWHXMLParser().parse(xml_no_duplicate)
+ expected_dict = OrderedDict(
+ [('@xmlns', 'http://www.w3.org/2005/Atom'),
+ ('@xmlns:codemeta',
+ 'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0'),
+ ('title', 'Awesome Compiler'),
+ ('codemeta:license',
+ OrderedDict([('codemeta:name', 'GPL3.0'),
+ ('codemeta:url',
+ 'https://opensource.org/licenses/GPL-3.0')])),
+ ('codemeta:runtimePlatform', 'Python3'),
+ ('codemeta:author',
+ OrderedDict([('codemeta:name', 'author1'),
+ ('codemeta:affiliation', 'Inria')])),
+ ('codemeta:programmingLanguage', 'ocaml'),
+ ('codemeta:issueTracker', 'http://issuetracker.com')])
+ self.assertEqual(expected_dict, actual_result)
+
+ @istest
+ def parsing_with_duplicates(self):
+ xml_with_duplicates = io.BytesIO(b'''
+
+ Another Compiler
+ GNU/Linux
+
+ GPL3.0
+ https://opensource.org/licenses/GPL-3.0
+
+ Un*x
+
+ author1
+ Inria
+
+
+ author2
+ Inria
+
+ ocaml
+ haskell
+
+ spdx
+ http://spdx.org
+
+ python3
+ ''')
+
+ actual_result = SWHXMLParser().parse(xml_with_duplicates)
+
+ expected_dict = OrderedDict([
+ ('@xmlns', 'http://www.w3.org/2005/Atom'),
+ ('@xmlns:codemeta', 'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0'),
+ ('title', 'Another Compiler'),
+ ('codemeta:runtimePlatform', ['GNU/Linux', 'Un*x']),
+ ('codemeta:license',
+ [OrderedDict([('codemeta:name', 'GPL3.0'),
+ ('codemeta:url',
+ 'https://opensource.org/licenses/GPL-3.0')]),
+ OrderedDict([('codemeta:name', 'spdx'),
+ ('codemeta:url', 'http://spdx.org')])]),
+ ('codemeta:author',
+ [OrderedDict([('codemeta:name', 'author1'),
+ ('codemeta:affiliation', 'Inria')]),
+ OrderedDict([('codemeta:name', 'author2'),
+ ('codemeta:affiliation', 'Inria')])]),
+ ('codemeta:programmingLanguage', ['ocaml', 'haskell', 'python3'])])
+ self.assertEqual(expected_dict, actual_result)
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
@@ -123,8 +123,7 @@
# then
assert response.status_code == status.HTTP_201_CREATED
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = int(response_content['deposit_id'])
return deposit_id
def create_complex_binary_deposit(self, status_partial=False):
@@ -146,8 +145,7 @@
# then
assert response.status_code == status.HTTP_201_CREATED
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = int(response_content['deposit_id'])
return deposit_id
def update_binary_deposit(self, deposit_id, status_partial=False):
@@ -162,8 +160,7 @@
# then
# assert response.status_code == status.HTTP_201_CREATED
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = int(response_content['deposit_id'])
return deposit_id
@@ -336,9 +333,7 @@
HTTP_CONTENT_DISPOSITION='attachment; filename=filename0')
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
-
+ deposit_id = int(response_content['deposit_id'])
return deposit_id
def create_deposit_with_status(
@@ -375,8 +370,7 @@
assert response.status_code == status.HTTP_201_CREATED
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = int(response_content['deposit_id'])
return deposit_id
def create_deposit_partial_with_data_in_args(self, data):
@@ -399,8 +393,7 @@
assert response.status_code == status.HTTP_201_CREATED
response_content = parse_xml(BytesIO(response.content))
- deposit_id = response_content[
- '{http://www.w3.org/2005/Atom}deposit_id']
+ deposit_id = int(response_content['deposit_id'])
return deposit_id
def _update_deposit_with_status(self, deposit_id, status_partial=False):
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
@@ -1,4 +1,4 @@
-# Copyright (C) 2017 The Software Heritage developers
+# Copyright (C) 2017-2018 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -232,7 +232,7 @@
"""
self.deposit_metadata_id = self.add_metadata_to_deposit(
- self.deposit_id)
+ self.deposit_id)
args = [self.collection.name, self.deposit_metadata_id]
archive_url = reverse(PRIVATE_GET_RAW_CONTENT, args=args)
@@ -254,32 +254,37 @@
self.assertEquals(len(self.loader.state['tool']), 1)
self.assertEquals(len(self.loader.state['provider']), 1)
- atom = '{http://www.w3.org/2005/Atom}'
- codemeta = '{https://doi.org/10.5063/SCHEMA/CODEMETA-2.0}'
+ codemeta = 'codemeta:'
expected_origin_metadata = {
- atom + 'author': {
- atom + 'email': 'hal@ccsd.cnrs.fr',
- atom + 'name': 'HAL'
+ '@xmlns': 'http://www.w3.org/2005/Atom',
+ '@xmlns:codemeta': 'https://doi.org/10.5063/SCHEMA/CODEMETA-2.0',
+ 'author': {
+ 'email': 'hal@ccsd.cnrs.fr',
+ 'name': 'HAL'
},
codemeta + 'url':
- 'https://hal-test.archives-ouvertes.fr/hal-01243065',
+ 'https://hal-test.archives-ouvertes.fr/hal-01243065',
codemeta + 'runtimePlatform': 'phpstorm',
- codemeta + 'license': {
- codemeta + 'name':
- 'CeCILL Free Software License Agreement v1.1'
- },
+ codemeta + 'license': [
+ {
+ codemeta + 'name': 'GNU General Public License v3.0 only'
+ },
+ {
+ codemeta + 'name': 'CeCILL Free Software License Agreement v1.1' # noqa
+ }
+ ],
codemeta + 'author': {
codemeta + 'name': 'Morane Gruenpeter'
},
- codemeta + 'programmingLanguage': 'C',
+ codemeta + 'programmingLanguage': ['php', 'python', 'C'],
codemeta + 'applicationCategory': 'test',
codemeta + 'dateCreated': '2017-05-03T16:08:47+02:00',
- codemeta + 'version': 1,
- atom + 'external_identifier': 'hal-01243065',
- atom + 'title': 'Composing a Web of Audio Applications',
+ codemeta + 'version': '1',
+ 'external_identifier': 'hal-01243065',
+ 'title': 'Composing a Web of Audio Applications',
codemeta + 'description': 'this is the description',
- atom + 'id': 'hal-01243065',
- atom + 'client': 'hal',
+ 'id': 'hal-01243065',
+ 'client': 'hal',
codemeta + 'keywords': 'DSP programming,Web',
codemeta + 'developmentStatus': 'stable'
}