| # Copyright 2017 Google Inc. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| """Import .whl files into Bazel.""" |
| |
| def _whl_impl(repository_ctx): |
| """Core implementation of whl_library.""" |
| |
| result = repository_ctx.execute([ |
| "python", |
| repository_ctx.path(repository_ctx.attr._script), |
| "--whl", repository_ctx.path(repository_ctx.attr.whl), |
| "--requirements", repository_ctx.attr.requirements, |
| ]) |
| if result.return_code: |
| fail("whl_library failed: %s (%s)" % (result.stdout, result.stderr)) |
| |
| whl_library = repository_rule( |
| attrs = { |
| "whl": attr.label( |
| allow_files = True, |
| mandatory = True, |
| single_file = True, |
| ), |
| "requirements": attr.string(), |
| "_script": attr.label( |
| executable = True, |
| default = Label("//rules_python:whl.py"), |
| cfg = "host", |
| ), |
| }, |
| implementation = _whl_impl, |
| ) |
| |
| """A rule for importing <code>.whl</code> dependencies into Bazel. |
| |
| <b>This rule is currently used to implement <code>pip_import</code>, |
| it is not intended to work standalone, and the interface may change.</b> |
| See <code>pip_import</code> for proper usage. |
| |
| This rule imports a <code>.whl</code> file as a <code>py_library</code>: |
| <pre><code>whl_library( |
| name = "foo", |
| whl = ":my-whl-file", |
| requirements = "name of pip_import rule", |
| ) |
| </code></pre> |
| |
| This rule defines a <code>@foo//:pkg</code> <code>py_library</code> target. |
| |
| Args: |
| whl: The path to the .whl file (the name is expected to follow [this |
| convention](https://www.python.org/dev/peps/pep-0427/#file-name-convention)) |
| |
| requirements: The name of the pip_import repository rule from which to |
| load this .whl's dependencies. |
| """ |