diff --git a/swh/indexer/metadata_dictionary.py b/swh/indexer/metadata_dictionary.py --- a/swh/indexer/metadata_dictionary.py +++ b/swh/indexer/metadata_dictionary.py @@ -395,10 +395,11 @@ ... ''') >>> MavenMapping().parse_repositories(d) """ - if 'repositories' not in d: + repositories = d.get('repositories') + if not repositories: results = [self.parse_repository(d, self._default_repository)] else: - repositories = d.get('repositories', {}).get('repository', []) + repositories = repositories.get('repository') or [] if not isinstance(repositories, list): repositories = [repositories] results = [self.parse_repository(d, repo) diff --git a/swh/indexer/tests/test_metadata.py b/swh/indexer/tests/test_metadata.py --- a/swh/indexer/tests/test_metadata.py +++ b/swh/indexer/tests/test_metadata.py @@ -649,6 +649,64 @@ 'https://repo.maven.apache.org/maven2/com/mycompany/app/my-app', }) + def test_compute_metadata_maven_empty_nodes(self): + raw_content = b""" + + Maven Default Project + 4.0.0 + com.mycompany.app + my-app + 1.2.3 + + + """ + result = self.maven_mapping.translate(raw_content) + self.assertEqual(result, { + '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', + 'type': 'SoftwareSourceCode', + 'name': 'Maven Default Project', + 'identifier': 'com.mycompany.app', + 'version': '1.2.3', + 'codeRepository': + 'https://repo.maven.apache.org/maven2/com/mycompany/app/my-app', + }) + + raw_content = b""" + + Maven Default Project + 4.0.0 + com.mycompany.app + my-app + + """ + result = self.maven_mapping.translate(raw_content) + self.assertEqual(result, { + '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', + 'type': 'SoftwareSourceCode', + 'name': 'Maven Default Project', + 'identifier': 'com.mycompany.app', + 'codeRepository': + 'https://repo.maven.apache.org/maven2/com/mycompany/app/my-app', + }) + + raw_content = b""" + + + 4.0.0 + com.mycompany.app + my-app + 1.2.3 + """ + result = self.maven_mapping.translate(raw_content) + self.assertEqual(result, { + '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', + 'type': 'SoftwareSourceCode', + 'identifier': 'com.mycompany.app', + 'version': '1.2.3', + 'codeRepository': + 'https://repo.maven.apache.org/maven2/com/mycompany/app/my-app', + }) + def test_compute_metadata_maven_multiple(self): '''Tests when there are multiple code repos and licenses.''' raw_content = b"""