From a543204b246e8af26e2857c0f9f108d89fea3ad7 Mon Sep 17 00:00:00 2001 From: Jonathon Belotti Date: Thu, 17 Sep 2020 16:59:39 +1000 Subject: [PATCH 1/4] add missing docstrings for rules_python_external ftfm: doc mistake --- experimental/rules_python_external/defs.bzl | 69 +++++++++++++++++++ .../rules_python_external/repositories.bzl | 3 + 2 files changed, 72 insertions(+) diff --git a/experimental/rules_python_external/defs.bzl b/experimental/rules_python_external/defs.bzl index 1e64c3ca4a..b75781b2ee 100644 --- a/experimental/rules_python_external/defs.bzl +++ b/experimental/rules_python_external/defs.bzl @@ -98,9 +98,78 @@ python_interpreter. "wheel_env": attr.string_dict(), }, implementation = _pip_repository_impl, + doc = """A rule for importing `requirements.txt` dependencies into Bazel. + +This rule imports a `requirements.txt` file and generates a new +`requirements.bzl` file. This is used via the `WORKSPACE` pattern: + +```python +pip_repository( + name = "foo", + requirements = ":requirements.txt", +) +``` + +You can then reference imported dependencies from your `BUILD` file with: + +```python +load("@foo//:requirements.bzl", "requirement") +py_library( + name = "bar", + ... + deps = [ + "//my/other:dep", + requirement("requests"), + requirement("numpy"), + ], +) +``` + +Or alternatively: +```python +load("@foo//:requirements.bzl", "all_requirements") +py_binary( + name = "baz", + ... + deps = [ + ":foo", + ] + all_requirements, +) +``` +""", ) def pip_install(requirements, name = DEFAULT_REPOSITORY_NAME, **kwargs): + """Imports a `requirements.txt` file and generates a new `requirements.bzl` file. + + This is used via the `WORKSPACE` pattern: + + ```python + pip_install( + requirements = ":requirements.txt", + ) + ``` + + You can then reference imported dependencies from your `BUILD` file with: + + ```python + load("@pip//:requirements.bzl", "requirement") + py_library( + name = "bar", + ... + deps = [ + "//my/other:dep", + requirement("requests"), + requirement("numpy"), + ], + ) + ``` + + Args: + requirements: A 'requirements.txt' pip requirements file. + name: A unique name for the created external repository (default 'pip'). + **kwargs: Keyword arguments passed directly to the `pip_repository` repository rule. + """ pip_repository( name = name, requirements = requirements, diff --git a/experimental/rules_python_external/repositories.bzl b/experimental/rules_python_external/repositories.bzl index 60c6e5dbbd..b7fd65361a 100644 --- a/experimental/rules_python_external/repositories.bzl +++ b/experimental/rules_python_external/repositories.bzl @@ -48,6 +48,9 @@ def requirement(pkg): return "@pypi__"+ pkg + "//:lib" def rules_python_external_dependencies(): + """ + Fetch dependencies these rules depend on. Workspaces that use the rules_python_external should call this. + """ for (name, url, sha256) in _RULE_DEPS: maybe( http_archive, From 6c989394055acc9146ae620cbe36607e677f88fa Mon Sep 17 00:00:00 2001 From: Jonathon Belotti Date: Thu, 17 Sep 2020 17:43:45 +1000 Subject: [PATCH 2/4] remove unused attr on pip_repository repo rule --- experimental/rules_python_external/defs.bzl | 1 - 1 file changed, 1 deletion(-) diff --git a/experimental/rules_python_external/defs.bzl b/experimental/rules_python_external/defs.bzl index b75781b2ee..2b784cddcb 100644 --- a/experimental/rules_python_external/defs.bzl +++ b/experimental/rules_python_external/defs.bzl @@ -95,7 +95,6 @@ python_interpreter. "requirements": attr.label(allow_single_file = True, mandatory = True), # 600 is documented as default here: https://docs.bazel.build/versions/master/skylark/lib/repository_ctx.html#execute "timeout": attr.int(default = 600), - "wheel_env": attr.string_dict(), }, implementation = _pip_repository_impl, doc = """A rule for importing `requirements.txt` dependencies into Bazel. From 98218a0658589e79c34d7cdc0a399e710de11d7a Mon Sep 17 00:00:00 2001 From: Jonathon Belotti Date: Thu, 17 Sep 2020 17:55:28 +1000 Subject: [PATCH 3/4] Add missing rule attr docs --- experimental/rules_python_external/defs.bzl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/experimental/rules_python_external/defs.bzl b/experimental/rules_python_external/defs.bzl index 2b784cddcb..8c699a223c 100644 --- a/experimental/rules_python_external/defs.bzl +++ b/experimental/rules_python_external/defs.bzl @@ -91,10 +91,20 @@ use this attribute to specify its BUILD target. This allows pip_repository to in pip using the same interpreter as your toolchain. If set, takes precedence over python_interpreter. """), - "quiet": attr.bool(default = True), - "requirements": attr.label(allow_single_file = True, mandatory = True), + "quiet": attr.bool( + default = True, + doc = "If True, suppress printing stdout and stderr output to the terminal.", + ), + "requirements": attr.label( + allow_single_file = True, + mandatory = True, + doc = "A 'requirements.txt' pip requirements file." + ), # 600 is documented as default here: https://docs.bazel.build/versions/master/skylark/lib/repository_ctx.html#execute - "timeout": attr.int(default = 600), + "timeout": attr.int( + default = 600, + doc = "Timeout (in seconds) on the rule's execution duration.", + ), }, implementation = _pip_repository_impl, doc = """A rule for importing `requirements.txt` dependencies into Bazel. From 10cb5923685df4f8da347faffc10cd62ab0b4078 Mon Sep 17 00:00:00 2001 From: Jonathon Belotti Date: Thu, 17 Sep 2020 17:56:16 +1000 Subject: [PATCH 4/4] Run buildifier formatting on rules_python_external .bzl files --- experimental/rules_python_external/defs.bzl | 2 +- experimental/rules_python_external/repositories.bzl | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/experimental/rules_python_external/defs.bzl b/experimental/rules_python_external/defs.bzl index 8c699a223c..0d21b91afe 100644 --- a/experimental/rules_python_external/defs.bzl +++ b/experimental/rules_python_external/defs.bzl @@ -98,7 +98,7 @@ python_interpreter. "requirements": attr.label( allow_single_file = True, mandatory = True, - doc = "A 'requirements.txt' pip requirements file." + doc = "A 'requirements.txt' pip requirements file.", ), # 600 is documented as default here: https://docs.bazel.build/versions/master/skylark/lib/repository_ctx.html#execute "timeout": attr.int( diff --git a/experimental/rules_python_external/repositories.bzl b/experimental/rules_python_external/repositories.bzl index b7fd65361a..00dc9007be 100644 --- a/experimental/rules_python_external/repositories.bzl +++ b/experimental/rules_python_external/repositories.bzl @@ -45,7 +45,7 @@ py_library( all_requirements = [name for (name, _, _) in _RULE_DEPS] def requirement(pkg): - return "@pypi__"+ pkg + "//:lib" + return "@pypi__" + pkg + "//:lib" def rules_python_external_dependencies(): """ @@ -55,8 +55,8 @@ def rules_python_external_dependencies(): maybe( http_archive, name, - url=url, - sha256=sha256, - type="zip", - build_file_content=_GENERIC_WHEEL, + url = url, + sha256 = sha256, + type = "zip", + build_file_content = _GENERIC_WHEEL, )