|  | # Copyright 2019 The Bazel Authors. 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. | 
|  |  | 
|  | """Utilities for the @bazel_tools//tools/python package. | 
|  |  | 
|  | This file does not access any Python-rules-specific logic, and is therefore | 
|  | less likely to be broken by Python-related changes. That in turn means this | 
|  | file is less likely to cause bootstrapping issues. | 
|  | """ | 
|  |  | 
|  | def _expand_pyversion_template_impl(ctx): | 
|  | for output, version, strict in [ | 
|  | (ctx.outputs.out2, "2", "1"), | 
|  | (ctx.outputs.out3, "3", "1"), | 
|  | (ctx.outputs.out2_nonstrict, "2", "0"), | 
|  | (ctx.outputs.out3_nonstrict, "3", "0"), | 
|  | ]: | 
|  | if output: | 
|  | ctx.actions.expand_template( | 
|  | template = ctx.file.template, | 
|  | output = output, | 
|  | substitutions = { | 
|  | "%VERSION%": version, | 
|  | "%STRICT%": strict, | 
|  | }, | 
|  | is_executable = True, | 
|  | ) | 
|  |  | 
|  | expand_pyversion_template = rule( | 
|  | implementation = _expand_pyversion_template_impl, | 
|  | attrs = { | 
|  | "template": attr.label( | 
|  | allow_single_file = True, | 
|  | doc = "The input template file.", | 
|  | ), | 
|  | "out2": attr.output(doc = "The Python 2 strict wrapper."), | 
|  | "out3": attr.output(doc = "The Python 3 strict wrapper."), | 
|  | "out2_nonstrict": attr.output( | 
|  | doc = "The Python 2 non-strict wrapper.", | 
|  | ), | 
|  | "out3_nonstrict": attr.output( | 
|  | doc = "The Python 3 non-strict wrapper.", | 
|  | ), | 
|  | }, | 
|  | doc = """\ | 
|  | Given the pywrapper template file, generates expansions for both versions of | 
|  | Python and both levels of strictness.""", | 
|  | ) |