bland-father-19717
10/10/2023, 12:57 AMBUILD
protobuf_sources(
name="protos",
python_resolve=parametrize("python-default", "resolve-a")
)
Error
InvalidFieldException: Only fields which will be moved to generated targets may be parametrized, so target generator ... (with type protobuf_sources) cannot parametrize the 'python_resolve' field.
late-advantage-75311
10/10/2023, 10:34 AMpants help protobuf_sources
do you see the python_resolve
field in the output?late-advantage-75311
10/10/2023, 10:43 AMbland-father-19717
10/10/2023, 10:57 AM[GLOBAL]
pants_version = "2.17.0"
pants help protobuf_sources
output
`protobuf_sources` target
-------------------------
Generate a `protobuf_source` target for each file in the `sources` field.
Activated by pants.backend.codegen.protobuf.python
Valid fields:
dependencies
type: Iterable[str] | None
default: None
Addresses to other targets that this target depends on, e.g. `['helloworld/subdir:lib', 'helloworld/main.py:lib', '3rdparty:reqs#django']`.
This augments any dependencies inferred by Pants, such as by analyzing your imports. Use `pants dependencies` or `pants peek` on this
target to get the final result.
See <https://www.pantsbuild.org/v2.17/docs/targets> for more about how addresses are formed, including for generated targets. You can also
run `pants list ::` to find all addresses in your project, or `pants list dir` to find all addresses defined in that directory.
If the target is in the same BUILD file, you can leave off the BUILD file path, e.g. `:tgt` instead of `helloworld/subdir:tgt`. For
generated first-party addresses, use `./` for the file path, e.g. `./main.py:tgt`; for all other generated targets, use
`:tgt#generated_name`.
You may exclude dependencies by prefixing with `!`, e.g. `['!helloworld/subdir:lib', '!./sibling.txt']`. Ignores are intended for false
positives with dependency inference; otherwise, simply leave off the dependency from the BUILD file.
description
type: str | None
default: None
A human-readable description of the target.
Use `pants list --documented ::` to see all targets with descriptions.
grpc
type: bool
default: False
Whether to generate gRPC code or not.
overrides
type: Dict[Union[str, Tuple[str, ...]], Dict[str, Any]] | None
default: None
Override the field values for generated `protobuf_source` targets.
Expects a dictionary of relative file paths and globs to a dictionary for the overrides. You may either use a string for a single path /
glob, or a string tuple for multiple paths / globs. Each override is a dictionary of field names to the overridden value.
For example:
overrides={
"foo.proto": {"grpc": True},
"bar.proto": {"description": "our user model"},
("foo.proto", "bar.proto"): {"tags": ["overridden"]},
}
File paths and globs are relative to the BUILD file's directory. Every overridden file is validated to belong to this target's `sources`
field.
If you'd like to override a field's value for every `protobuf_source` target generated by this target, change the field directly on this
target rather than using the `overrides` field.
You can specify the same file name in multiple keys, so long as you don't override the same field more than one time for the file.
python_interpreter_constraints
type: Iterable[str] | None
default: None
The Python interpreters this code is compatible with.
Each element should be written in pip-style format, e.g. `CPython==2.7.*` or `CPython>=3.6,<4`. You can leave off `CPython` as a shorthand,
e.g. `>=2.7` will be expanded to `CPython>=2.7`.
Specify more than one element to OR the constraints, e.g. `['PyPy==3.7.*', 'CPython==3.7.*']` means either PyPy 3.7 _or_ CPython 3.7.
If the field is not set, it will default to the option `[python].interpreter_constraints`.
See <https://www.pantsbuild.org/v2.17/docs/python-interpreter-compatibility> for how these interpreter constraints are merged with the
constraints of dependencies.
python_resolve
type: str | None
default: None
The resolve from `[python].resolves` to use.
If not defined, will default to `[python].default_resolve`.
All dependencies must share the same value for their `resolve` field.
python_source_root
type: str | None
default: None
The source root to generate Python sources under.
If unspecified, the source root the `protobuf_sources` is under will be used.
sources
type: Iterable[str] | None
default: ('*.proto',)
A list of files and globs that belong to this target.
Paths are relative to the BUILD file's directory. You can ignore files/globs by prefixing them with `!`.
Example: `sources=['example.proto', 'new_*.proto', '!old_ignore*.proto']`
tags
type: Iterable[str] | None
default: None
Arbitrary strings to describe a target.
For example, you may tag some test targets with 'integration_test' so that you could run `pants --tag='integration_test' test ::` to only
run on targets with that tag.
bland-father-19717
10/10/2023, 10:59 AMpython_requirement(
name="protobuf",
# Here, we use the same version of Protobuf in both resolves. You could instead create
# a distinct target per resolve so that they have different versions.
requirements=["protobuf==3.19.4"],
resolve=parametrize("resolve-a", "resolve-b"),
)
protobuf_sources(
name="protos",
python_resolve=parametrize("resolve-a", "resolve-b")
)
late-advantage-75311
10/10/2023, 1:21 PMHowever; parametrizing@gorgeous-winter-99296 did you end up with a successful workaround?here fails with the following error: <same error that you are reporting @bland-father-19717>protobuf_sources.python_resolve
late-advantage-75311
10/10/2023, 1:23 PMprotobuf_source
with parametrized resolve?gorgeous-winter-99296
10/10/2023, 1:23 PMlate-advantage-75311
10/10/2023, 1:25 PMprotobuf_source
(non-generator) also failed with resolve=parametrize
gorgeous-winter-99296
10/10/2023, 1:27 PMprotobuf_sources
so just expanded it manually.late-advantage-75311
11/08/2023, 10:42 AMbland-father-19717
11/11/2023, 2:50 PM