diff --git a/swh/loader/pypi/converters.py b/swh/loader/pypi/converters.py index 69411f9887ff6db1db44534dc09c0dec6b687431..8f7a4c70f8723b6aa694b0c7bccb4ca379f034a2 100644 --- a/swh/loader/pypi/converters.py +++ b/swh/loader/pypi/converters.py @@ -4,6 +4,9 @@ # See top-level LICENSE file for more information +EMPTY_AUTHOR = {'fullname': b'', 'name': None, 'email': None} + + def info(data): """Given a dict of a PyPI project information, returns a project subset. @@ -48,15 +51,16 @@ def author(data): swh-model dict representing a person. """ - name = data['author'] - email = data['author_email'] + name = data.get('author') + email = data.get('author_email') + if email: fullname = '%s <%s>' % (name, email) else: fullname = name if not fullname: - return {'fullname': b'', 'name': None, 'email': None} + return EMPTY_AUTHOR if fullname: fullname = fullname.encode('utf-8') diff --git a/swh/loader/pypi/tests/test_converters.py b/swh/loader/pypi/tests/test_converters.py index cfced07f8209a6d62644d1a5b3a531fe44d08724..0e2f80406eafffab71698a309452fae3f4c46190 100644 --- a/swh/loader/pypi/tests/test_converters.py +++ b/swh/loader/pypi/tests/test_converters.py @@ -6,7 +6,7 @@ from unittest import TestCase from nose.tools import istest -from swh.loader.pypi.converters import author, info +from swh.loader.pypi.converters import author, EMPTY_AUTHOR from .common import WithProjectTest @@ -43,6 +43,23 @@ class Test(WithProjectTest): self.assertEqual(expected_author, actual_author) + @istest + def no_author(self): + actual_author = author({}) + + self.assertEqual(EMPTY_AUTHOR, actual_author) + + @istest + def partial_author(self): + actual_author = author({'author': 'someone'}) + expected_author = { + 'name': b'someone', + 'fullname': b'someone', + 'email': None, + } + + self.assertEqual(expected_author, actual_author) + class ParseAuthorTest(TestCase): @istest