diff --git a/MANIFEST.in b/MANIFEST.in --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,3 +6,5 @@ recursive-include swh/deposit/templates * recursive-include swh/deposit/tests/*/data * recursive-include swh py.typed +include tox.ini +include pytest.ini diff --git a/requirements-server.txt b/requirements-server.txt --- a/requirements-server.txt +++ b/requirements-server.txt @@ -1,2 +1,2 @@ -Django < 2.0 +Django < 3 djangorestframework 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 @@ -232,7 +232,7 @@ type=METADATA_TYPE, deposit=deposit, metadata=metadata, - raw_metadata=raw_metadata) + raw_metadata=raw_metadata.decode('utf-8')) deposit_request.save() assert deposit_request is not None 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 @@ -111,7 +111,7 @@ response = authenticated_client.post( reverse(COL_IRI, args=[deposit_collection.name]), content_type='application/atom+xml;type=entry', - data=atom_dataset['entry-data0'] % deposit.external_id.encode('utf-8'), + data=atom_dataset['entry-data0'] % deposit.external_id, HTTP_SLUG=deposit.external_id ) @@ -141,7 +141,7 @@ response = authenticated_client.post( reverse(COL_IRI, args=[deposit_collection.name]), content_type='application/atom+xml;type=entry', - data=atom_dataset['entry-data0'] % deposit.external_id.encode('utf-8'), + data=atom_dataset['entry-data0'] % deposit.external_id, HTTP_SLUG=deposit.external_id) assert response.status_code == status.HTTP_201_CREATED @@ -171,7 +171,7 @@ response = authenticated_client.post( reverse(COL_IRI, args=[deposit_collection.name]), content_type='application/atom+xml;type=entry', - data=atom_dataset['entry-data0'] % deposit.external_id.encode('utf-8'), + data=atom_dataset['entry-data0'] % deposit.external_id, HTTP_SLUG=deposit.external_id ) 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 @@ -125,7 +125,7 @@ with pytest.raises(Deposit.DoesNotExist): Deposit.objects.get(external_id=external_id) - atom_entry_data = atom_dataset['entry-data0'] % external_id.encode('utf-8') + atom_entry_data = atom_dataset['entry-data0'] % external_id # when response = authenticated_client.post( @@ -149,7 +149,7 @@ # one associated request to a deposit deposit_request = DepositRequest.objects.get(deposit=deposit) assert deposit_request.metadata is not None - assert deposit_request.raw_metadata == atom_entry_data.decode('utf-8') + assert deposit_request.raw_metadata == atom_entry_data assert bool(deposit_request.archive) is False @@ -164,8 +164,7 @@ with pytest.raises(Deposit.DoesNotExist): Deposit.objects.get(external_id=external_id) - atom_entry_data = atom_dataset['codemeta-sample'] % external_id.encode('utf-8') # noqa - + atom_entry_data = atom_dataset['codemeta-sample'] % external_id # when response = authenticated_client.post( reverse(COL_IRI, args=[deposit_collection.name]), @@ -189,7 +188,7 @@ # one associated request to a deposit deposit_request = DepositRequest.objects.get(deposit=deposit) assert deposit_request.metadata is not None - assert deposit_request.raw_metadata == atom_entry_data.decode('utf-8') + assert deposit_request.raw_metadata == atom_entry_data assert bool(deposit_request.archive) is False @@ -227,7 +226,7 @@ # one associated request to a deposit deposit_request = DepositRequest.objects.get(deposit=deposit) assert deposit_request.metadata is not None - assert deposit_request.raw_metadata == atom_entry_data.decode('utf-8') + assert deposit_request.raw_metadata == atom_entry_data assert bool(deposit_request.archive) is False @@ -298,11 +297,11 @@ expected_meta = [ { 'metadata': parse_xml(atom_entry_data1), - 'raw_metadata': atom_entry_data1.decode('utf-8'), + 'raw_metadata': atom_entry_data1 }, { 'metadata': parse_xml(atom_entry_data), - 'raw_metadata': atom_entry_data.decode('utf-8'), + 'raw_metadata': atom_entry_data } ] 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 @@ -511,7 +511,7 @@ charset=None) atom_entry = InMemoryUploadedFile( - BytesIO(atom_dataset['entry-data-deposit-binary']), + BytesIO(atom_dataset['entry-data-deposit-binary'].encode('utf-8')), field_name='atom0', name='atom0', content_type='application/atom+xml; charset="utf-8"', 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 @@ -32,7 +32,7 @@ data_atom_entry = atom_dataset['entry-data-deposit-binary'] atom_entry = InMemoryUploadedFile( - BytesIO(data_atom_entry), + BytesIO(data_atom_entry.encode('utf-8')), field_name='atom0', name='atom0', content_type='application/atom+xml; charset="utf-8"', @@ -73,7 +73,7 @@ data_atom_entry = atom_dataset['entry-data-deposit-binary'] atom_entry = InMemoryUploadedFile( - BytesIO(data_atom_entry), + BytesIO(data_atom_entry.encode('utf-8')), field_name='atom0', name='atom0', content_type='application/atom+xml; charset="utf-8"', @@ -118,7 +118,7 @@ assert deposit_request.metadata['id'] == \ 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a' assert deposit_request.raw_metadata == \ - data_atom_entry.decode('utf-8') + data_atom_entry def test_post_deposit_multipart_tar( @@ -142,7 +142,7 @@ charset=None) atom_entry = InMemoryUploadedFile( - BytesIO(data_atom_entry), + BytesIO(data_atom_entry.encode('utf-8')), field_name='atom0', name='atom0', content_type='application/atom+xml; charset="utf-8"', @@ -187,7 +187,7 @@ assert deposit_request.metadata['id'] == \ 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a' assert deposit_request.raw_metadata == \ - data_atom_entry.decode('utf-8') + data_atom_entry def test_post_deposit_multipart_put_to_replace_metadata( @@ -211,7 +211,7 @@ charset=None) atom_entry = InMemoryUploadedFile( - BytesIO(data_atom_entry), + BytesIO(data_atom_entry.encode('utf-8')), field_name='atom0', name='atom0', content_type='application/atom+xml; charset="utf-8"', @@ -255,7 +255,7 @@ assert deposit_request.metadata['id'] == \ 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a' assert deposit_request.raw_metadata == \ - data_atom_entry.decode('utf-8') + data_atom_entry replace_metadata_uri = response._headers['location'][1] response = authenticated_client.put( @@ -283,7 +283,7 @@ assert deposit_request.metadata['id'] == \ 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a' assert deposit_request.raw_metadata == \ - atom_dataset['entry-data-deposit-binary'].decode('utf-8') + atom_dataset['entry-data-deposit-binary'] # FAILURE scenarios @@ -295,20 +295,22 @@ url = reverse(COL_IRI, args=[deposit_collection.name]) archive_content = b'some content representing archive' - archive = InMemoryUploadedFile(BytesIO(archive_content), - field_name='archive0', - name='archive0', - content_type='application/x-tar', - size=len(archive_content), - charset=None) + archive = InMemoryUploadedFile( + BytesIO(archive_content), + field_name='archive0', + name='archive0', + content_type='application/x-tar', + size=len(archive_content), + charset=None) other_archive_content = b"some-other-content" - other_archive = InMemoryUploadedFile(BytesIO(other_archive_content), - field_name='atom0', - name='atom0', - content_type='application/x-tar', - size=len(other_archive_content), - charset='utf-8') + other_archive = InMemoryUploadedFile( + BytesIO(other_archive_content), + field_name='atom0', + name='atom0', + content_type='application/x-tar', + size=len(other_archive_content), + charset='utf-8') # when response = authenticated_client.post( @@ -365,7 +367,7 @@ data_atom_entry_ko = atom_dataset['entry-data-ko'] atom_entry = InMemoryUploadedFile( - BytesIO(data_atom_entry_ko), + BytesIO(data_atom_entry_ko.encode('utf-8')), field_name='atom0', name='atom0', content_type='application/atom+xml; charset="utf-8"', diff --git a/swh/deposit/tests/api/test_deposit_private_read_metadata.py b/swh/deposit/tests/api/test_deposit_private_read_metadata.py --- a/swh/deposit/tests/api/test_deposit_private_read_metadata.py +++ b/swh/deposit/tests/api/test_deposit_private_read_metadata.py @@ -233,7 +233,7 @@ authenticated_client, deposit_collection, deposit, atom_dataset) # add metadata to the deposit with datePublished and dateCreated - codemeta_entry_data = atom_dataset['metadata'] % b""" + codemeta_entry_data = atom_dataset['metadata'] % """ 2015-04-06T17:08:47+02:00 2017-05-03T16:08:47+02:00 """ @@ -349,7 +349,7 @@ """ deposit = partial_deposit - codemeta_entry_data = atom_dataset['metadata'] % b'' + codemeta_entry_data = atom_dataset['metadata'] % '' deposit = update_deposit_with_metadata( authenticated_client, deposit_collection, deposit, codemeta_entry_data) @@ -470,7 +470,7 @@ """ deposit = partial_deposit # add metadata to the deposit with multiple datePublished/dateCreated - codemeta_entry_data = atom_dataset['metadata'] % b""" + codemeta_entry_data = atom_dataset['metadata'] % """ 2015-04-06T17:08:47+02:00 2017-05-03T16:08:47+02:00 2016-04-06T17:08:47+02:00 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 @@ -94,7 +94,7 @@ type='metadata') assert len(requests_meta) == 1 request_meta0 = requests_meta[0] - assert request_meta0.raw_metadata == raw_metadata0.decode('utf-8') + assert request_meta0.raw_metadata == raw_metadata0 requests_archive0 = DepositRequest.objects.filter( deposit=deposit, type='archive') @@ -117,7 +117,7 @@ assert len(requests_meta) == 1 request_meta1 = requests_meta[0] raw_metadata1 = request_meta1.raw_metadata - assert raw_metadata1 == atom_dataset['entry-data1'].decode('utf-8') + assert raw_metadata1 == atom_dataset['entry-data1'] assert raw_metadata0 != raw_metadata1 assert request_meta0 != request_meta1 @@ -222,8 +222,8 @@ expected_raw_meta0 = atom_dataset['entry-data0'] % ( deposit.external_id.encode('utf-8')) # a new one was added - assert requests[0].raw_metadata == expected_raw_meta0.decode('utf-8') - assert requests[1].raw_metadata == atom_entry.decode('utf-8') + assert requests[0].raw_metadata == expected_raw_meta0 + assert requests[1].raw_metadata == atom_entry # check we did not touch the other parts requests_archive1 = DepositRequest.objects.filter( diff --git a/swh/deposit/tests/conftest.py b/swh/deposit/tests/conftest.py --- a/swh/deposit/tests/conftest.py +++ b/swh/deposit/tests/conftest.py @@ -216,7 +216,7 @@ @pytest.fixture -def atom_dataset(datadir) -> Mapping[str, bytes]: +def atom_dataset(datadir) -> Mapping[str, str]: """Compute the paths to atom files. Returns: @@ -228,7 +228,7 @@ for filename in os.listdir(atom_path): filepath = os.path.join(atom_path, filename) with open(filepath, 'rb') as f: - raw_content = f.read() + raw_content = f.read().decode('utf-8') # Keep the filename without extension atom_name = filename.split('.')[0] diff --git a/tox.ini b/tox.ini --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist=flake8,mypy,py3 +envlist=flake8,mypy,py3-django{1,2} [testenv] extras = @@ -10,6 +10,8 @@ swh.core[http] >= 0.0.75 dev: ipdb pytest-cov + django1: Django>=1.11,<2 + django2: Django>=2,<3 commands = pytest \ !dev: --cov {envsitepackagesdir}/swh/deposit --cov-branch \