Add `all_whl_requirements` to match `all_requirements` (#377)
diff --git a/python/pip_install/README.md b/python/pip_install/README.md index 4db1852..cfa3b4f 100644 --- a/python/pip_install/README.md +++ b/python/pip_install/README.md
@@ -64,7 +64,12 @@ #### Example `BUILD` file. ```python -load("@py_deps//:requirements.bzl", "requirement", "whl_requirement") +load( + "@py_deps//:requirements.bzl", + "requirement", + "whl_requirement", + "all_whl_requirements", +) py_binary( name = "main", @@ -82,6 +87,13 @@ whl_requirement("boto3"), ] ) + +# If you need all of the wheels, say to upload them to your own +# private wheelhouse, you can use all_whl_requirements. +filegroup( + name = "all_whls", + data = all_whl_requirements, +) ``` Note that above you do not need to add transitively required packages to `deps = [ ... ]` or `data = [ ... ]`
diff --git a/python/pip_install/extract_wheels/lib/BUILD b/python/pip_install/extract_wheels/lib/BUILD index 4493bd1..de67b29 100644 --- a/python/pip_install/extract_wheels/lib/BUILD +++ b/python/pip_install/extract_wheels/lib/BUILD
@@ -54,6 +54,17 @@ data = ["//experimental/examples/wheel:minimal_with_py_package"] ) +py_test( + name = "requirements_bzl_test", + size = "small", + srcs = [ + "requirements_bzl_test.py", + ], + deps = [ + ":lib", + ], +) + filegroup( name = "distribution", srcs = glob(
diff --git a/python/pip_install/extract_wheels/lib/bazel.py b/python/pip_install/extract_wheels/lib/bazel.py index 964d4f9..ef0d6e8 100644 --- a/python/pip_install/extract_wheels/lib/bazel.py +++ b/python/pip_install/extract_wheels/lib/bazel.py
@@ -74,10 +74,17 @@ A complete requirements.bzl file as a string """ + sorted_targets = sorted(targets) + requirement_labels = ",".join(sorted_targets) + whl_requirement_labels = ",".join( + '"{}:whl"'.format(target.strip('"')) for target in sorted_targets + ) return textwrap.dedent( """\ all_requirements = [{requirement_labels}] + all_whl_requirements = [{whl_requirement_labels}] + def requirement(name): name_key = name.replace("-", "_").replace(".", "_").lower() return "{repo}//pypi__" + name_key @@ -85,7 +92,9 @@ def whl_requirement(name): return requirement(name) + ":whl" """.format( - repo=repo_name, requirement_labels=",".join(sorted(targets)) + repo=repo_name, + requirement_labels=requirement_labels, + whl_requirement_labels=whl_requirement_labels, ) )
diff --git a/python/pip_install/extract_wheels/lib/requirements_bzl_test.py b/python/pip_install/extract_wheels/lib/requirements_bzl_test.py new file mode 100644 index 0000000..3424f3e --- /dev/null +++ b/python/pip_install/extract_wheels/lib/requirements_bzl_test.py
@@ -0,0 +1,17 @@ +import unittest + +from python.pip_install.extract_wheels.lib import bazel + + +class TestGenerateRequirementsFileContents(unittest.TestCase): + def test_all_wheel_requirements(self) -> None: + contents = bazel.generate_requirements_file_contents( + repo_name='test', + targets=['"@test//pypi__pkg1"', '"@test//pypi__pkg2"'], + ) + expected = 'all_whl_requirements = ["@test//pypi__pkg1:whl","@test//pypi__pkg2:whl"]' + self.assertIn(expected, contents) + + +if __name__ == "__main__": + unittest.main()