diff --git a/swh/loader/package/npm/loader.py b/swh/loader/package/npm/loader.py --- a/swh/loader/package/npm/loader.py +++ b/swh/loader/package/npm/loader.py @@ -187,15 +187,22 @@ """ if type(author_data) is dict: author_str = "" - if "name" in author_data: - author_str += author_data["name"] - if "email" in author_data: - author_str += " <%s>" % author_data["email"] - return author_str + name = author_data.get("name") + if name is not None: + if type(name) is str: + author_str += name + elif type(name) is list: + author_str += name[0] if len(name) > 0 else "" + + email = author_data.get("email") + if email is not None: + author_str += f" <{email}>" + result = author_str elif type(author_data) is list: - return _author_str(author_data[0]) if len(author_data) > 0 else "" + result = _author_str(author_data[0]) if len(author_data) > 0 else "" else: - return author_data + result = author_data + return result def extract_npm_package_author(package_json) -> Person: diff --git a/swh/loader/package/npm/tests/test_npm.py b/swh/loader/package/npm/tests/test_npm.py --- a/swh/loader/package/npm/tests/test_npm.py +++ b/swh/loader/package/npm/tests/test_npm.py @@ -34,6 +34,11 @@ ([], ""), ({"name": "groot", "email": "groot@galaxy.org",}, "groot "), ({}, ""), + ({"name": []}, "",), + ( + {"name": ["Susan McSween", "William H. Bonney", "Doc Scurlock",]}, + "Susan McSween", + ), ]: assert _author_str(author) == expected_author