diff --git a/src/poetry/core/packages/package.py b/src/poetry/core/packages/package.py index aa04880d7..4299457e9 100644 --- a/src/poetry/core/packages/package.py +++ b/src/poetry/core/packages/package.py @@ -32,7 +32,7 @@ T = TypeVar("T", bound="Package") -AUTHOR_REGEX = re.compile(r"(?u)^(?P[- .,\w\d'’\"()&]+)(?: <(?P.+?)>)?$") +AUTHOR_REGEX = re.compile(r"(?u)^(?P[- .,\w\d'’\"():&]+)(?: <(?P.+?)>)?$") class Package(PackageSpecification): diff --git a/tests/packages/test_package.py b/tests/packages/test_package.py index ffaec8316..e46028bc4 100644 --- a/tests/packages/test_package.py +++ b/tests/packages/test_package.py @@ -59,6 +59,58 @@ def test_package_authors_invalid() -> None: ) +@pytest.mark.parametrize( + ("name", "email"), + [ + ("Sébastien Eustace", "sebastien@eustace.io"), + ("John Doe", None), + ("'Jane Doe'", None), + ('"Jane Doe"', None), + ("MyCompany", None), + ("Some Company’s", None), + ("MyCompany's R&D", "rnd@MyCompanyName.MyTLD"), + ("Doe, John", None), + ("(Doe, John)", None), + ("John Doe", "john@john.doe"), + ("Doe, John", "dj@john.doe"), + ("MyCompanyName R&D", "rnd@MyCompanyName.MyTLD"), + ("John-Paul: Doe", None), + ("John-Paul: Doe", "jp@nomail.none"), + ("John Doe the 3rd", "3rd@jd.net"), + ], +) +def test_package_authors_valid(name: str, email: str | None) -> None: + package = Package("foo", "0.1.0") + + if email is None: + author = name + else: + author = f"{name} <{email}>" + package.authors.insert(0, author) + assert package.author_name == name + assert package.author_email == email + + +@pytest.mark.parametrize( + ("name",), + [ + ("",), + ("john@john.doe",), + (" None: + package = Package("foo", "0.1.0") + + package.authors.insert(0, name) + with pytest.raises(ValueError): + package.author_name + + @pytest.mark.parametrize("groups", [["main"], ["dev"]]) def test_package_add_dependency_vcs_groups(groups: list[str], f: Factory) -> None: package = Package("foo", "0.1.0")