|
|
|
@ -4,7 +4,7 @@ load("@rules_python//python:py_info.bzl", "PyInfo") |
|
|
|
|
load("//bazel/common:proto_common.bzl", "proto_common") |
|
|
|
|
load("//bazel/common:proto_info.bzl", "ProtoInfo") |
|
|
|
|
|
|
|
|
|
ProtoLangToolchainInfo = proto_common.ProtoLangToolchainInfo |
|
|
|
|
PY_PROTO_TOOLCHAIN = "@rules_python//python/proto:toolchain_type" |
|
|
|
|
|
|
|
|
|
_PyProtoInfo = provider( |
|
|
|
|
doc = "Encapsulates information needed by the Python proto rules.", |
|
|
|
@ -22,6 +22,9 @@ _PyProtoInfo = provider( |
|
|
|
|
def _filter_provider(provider, *attrs): |
|
|
|
|
return [dep[provider] for attr in attrs for dep in attr if provider in dep] |
|
|
|
|
|
|
|
|
|
def _incompatible_toolchains_enabled(): |
|
|
|
|
return getattr(proto_common, "INCOMPATIBLE_ENABLE_PROTO_TOOLCHAIN_RESOLUTION", False) |
|
|
|
|
|
|
|
|
|
def _py_proto_aspect_impl(target, ctx): |
|
|
|
|
"""Generates and compiles Python code for a proto_library. |
|
|
|
|
|
|
|
|
@ -48,7 +51,14 @@ def _py_proto_aspect_impl(target, ctx): |
|
|
|
|
proto.path, |
|
|
|
|
)) |
|
|
|
|
|
|
|
|
|
proto_lang_toolchain_info = ctx.attr._aspect_proto_toolchain[ProtoLangToolchainInfo] |
|
|
|
|
if _incompatible_toolchains_enabled(): |
|
|
|
|
toolchain = ctx.toolchains[PY_PROTO_TOOLCHAIN] |
|
|
|
|
if not toolchain: |
|
|
|
|
fail("No toolchains registered for '%s'." % PY_PROTO_TOOLCHAIN) |
|
|
|
|
proto_lang_toolchain_info = toolchain.proto |
|
|
|
|
else: |
|
|
|
|
proto_lang_toolchain_info = getattr(ctx.attr, "_aspect_proto_toolchain")[proto_common.ProtoLangToolchainInfo] |
|
|
|
|
|
|
|
|
|
api_deps = [proto_lang_toolchain_info.runtime] |
|
|
|
|
|
|
|
|
|
generated_sources = [] |
|
|
|
@ -110,7 +120,7 @@ def _py_proto_aspect_impl(target, ctx): |
|
|
|
|
|
|
|
|
|
_py_proto_aspect = aspect( |
|
|
|
|
implementation = _py_proto_aspect_impl, |
|
|
|
|
attrs = { |
|
|
|
|
attrs = {} if _incompatible_toolchains_enabled() else { |
|
|
|
|
"_aspect_proto_toolchain": attr.label( |
|
|
|
|
default = "//python:python_toolchain", |
|
|
|
|
), |
|
|
|
@ -118,6 +128,7 @@ _py_proto_aspect = aspect( |
|
|
|
|
attr_aspects = ["deps"], |
|
|
|
|
required_providers = [ProtoInfo], |
|
|
|
|
provides = [_PyProtoInfo], |
|
|
|
|
toolchains = [PY_PROTO_TOOLCHAIN] if _incompatible_toolchains_enabled() else [], |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def _py_proto_library_rule(ctx): |
|
|
|
|