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.
diff --git a/examples/wheel/BUILD.bazel b/examples/wheel/BUILD.bazel
index b11ec69..699bf68 100644
--- a/examples/wheel/BUILD.bazel
+++ b/examples/wheel/BUILD.bazel
@@ -278,6 +278,7 @@
--index-url https://pypi.com
tomli>=2.0.0
+starlark # Example comment
""".splitlines(),
)
@@ -290,7 +291,7 @@
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 a33e435..b683da0 100644
--- a/examples/wheel/wheel_test.py
+++ b/examples/wheel/wheel_test.py
@@ -458,7 +458,8 @@
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 2f9a8cb..2898755 100644
--- a/tools/wheelmaker.py
+++ b/tools/wheelmaker.py
@@ -531,13 +531,23 @@
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:
- reqs.append(
- f"Requires-Dist: {req.name}{req.specifier}; ({req.marker}) and {extra}"
- )
+ 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}; {extra}")
+ reqs.append(
+ f"Requires-Dist: {req.name}{req.specifier}; {extra}".strip(" ;")
+ )
metadata = metadata.replace(meta_line, "\n".join(reqs))