From 341db3c9fdc75448179e8258e9551025ff17e3d2 Mon Sep 17 00:00:00 2001 From: UebelAndre Date: Wed, 24 Jan 2024 09:30:44 -0800 Subject: [PATCH] fix(py_wheel): Fix parsing errors with `requires_file` attribute. (#1719) The `requires_file` and `extra_requires_files` attributes added by https://github.com/bazelbuild/rules_python/pull/1710 break wheels by leaving trailing `;` and currently do not support `requirements.in` files with comments following a constraint on the same line. This PR fixes these issues. --- examples/wheel/BUILD.bazel | 3 ++- examples/wheel/wheel_test.py | 3 ++- tools/wheelmaker.py | 18 ++++++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/examples/wheel/BUILD.bazel b/examples/wheel/BUILD.bazel index b11ec6903..699bf6829 100644 --- a/examples/wheel/BUILD.bazel +++ b/examples/wheel/BUILD.bazel @@ -278,6 +278,7 @@ write_file( --index-url https://pypi.com tomli>=2.0.0 +starlark # Example comment """.splitlines(), ) @@ -290,7 +291,7 @@ write_file( pyyaml>=6.0.0,!=6.0.1 toml; (python_version == "3.11" or python_version == "3.12") and python_version != "3.8" -wheel; python_version == "3.11" or python_version == "3.12" +wheel; python_version == "3.11" or python_version == "3.12" # Example comment """.splitlines(), ) diff --git a/examples/wheel/wheel_test.py b/examples/wheel/wheel_test.py index a33e43580..b683da06a 100644 --- a/examples/wheel/wheel_test.py +++ b/examples/wheel/wheel_test.py @@ -458,7 +458,8 @@ def test_requires_file_and_extra_requires_files(self): print(requires) self.assertEqual( [ - "Requires-Dist: tomli>=2.0.0;", + "Requires-Dist: tomli>=2.0.0", + "Requires-Dist: starlark", "Requires-Dist: pyyaml!=6.0.1,>=6.0.0; extra == 'example'", 'Requires-Dist: toml; ((python_version == "3.11" or python_version == "3.12") and python_version != "3.8") and extra == \'example\'', 'Requires-Dist: wheel; (python_version == "3.11" or python_version == "3.12") and extra == \'example\'', diff --git a/tools/wheelmaker.py b/tools/wheelmaker.py index 2f9a8cb62..289875500 100644 --- a/tools/wheelmaker.py +++ b/tools/wheelmaker.py @@ -531,13 +531,23 @@ def main() -> None: if not reqs_text or reqs_text.startswith(("#", "-")): continue - req = Requirement(reqs_text) + # Strip any comments + reqs_text, _, _ = reqs_text.partition("#") + + req = Requirement(reqs_text.strip()) if req.marker: + if extra: + reqs.append( + f"Requires-Dist: {req.name}{req.specifier}; ({req.marker}) and {extra}" + ) + else: + reqs.append( + f"Requires-Dist: {req.name}{req.specifier}; {req.marker}" + ) + else: reqs.append( - f"Requires-Dist: {req.name}{req.specifier}; ({req.marker}) and {extra}" + f"Requires-Dist: {req.name}{req.specifier}; {extra}".strip(" ;") ) - else: - reqs.append(f"Requires-Dist: {req.name}{req.specifier}; {extra}") metadata = metadata.replace(meta_line, "\n".join(reqs))