sparse-lifeguard-95737
06/30/2022, 9:36 PMmsgfmt
on .po
files (trying to replicate Django’s compilemessages
management command), but I’m having trouble getting my rule
to be recognized by export-codegen
. Details in 🧵sparse-lifeguard-95737
06/30/2022, 9:37 PMsparse-lifeguard-95737
06/30/2022, 9:37 PM# target_types.py
from pants.engine.target import (
COMMON_TARGET_FIELDS,
MultipleSourcesField,
SingleSourceField,
Target,
TargetFilesGenerator,
)
class MessageSourceField(SingleSourceField):
expected_file_extensions = (".po",)
class MessageSourcesField(MultipleSourcesField):
expected_file_extensions = (".po",)
default = ("*.po",)
class MessageSourceTarget(Target):
alias = "message_source"
core_fields = (*COMMON_TARGET_FIELDS, MessageSourceField)
class MessageSourcesGeneratorTarget(TargetFilesGenerator):
alias = "message_sources"
core_fields = (*COMMON_TARGET_FIELDS, MessageSourcesField)
copied_fields = COMMON_TARGET_FIELDS
moved_fields = ()
generated_target_cls = MessageSourceTarget
copied_fields = COMMON_TARGET_FIELDS
sparse-lifeguard-95737
06/30/2022, 9:37 PM# rules.py
from pants.core.target_types import ResourceSourceField
from pants.engine.internals.native_engine import EMPTY_SNAPSHOT
from pants.engine.rules import rule
from pants.engine.target import GeneratedSources, GenerateSourcesRequest
from pants.engine.unions import UnionRule
from pants.util.logging import LogLevel
from plugins.django.messages.target_types import MessageSourceField
class CompileMessageRequest(GenerateSourcesRequest):
input = MessageSourceField
output = ResourceSourceField
@rule(level=LogLevel.DEBUG, desc="Compile messages")
async def compile_messages(_: CompileMessageRequest) -> GeneratedSources:
return GeneratedSources(EMPTY_SNAPSHOT)
def rules():
return [compile_messages, UnionRule(GenerateSourcesRequest, CompileMessageRequest)]
sparse-lifeguard-95737
06/30/2022, 9:37 PM# register.py
from plugins.django.messages.rules import rules as messages_rules
from plugins.django.messages.target_types import (
MessageSourcesGeneratorTarget,
MessageSourceTarget,
)
def target_types():
return [MessageSourceTarget, MessageSourcesGeneratorTarget]
def ruiles():
return [
*messages_rules(),
]
sparse-lifeguard-95737
06/30/2022, 9:38 PMmessage_sources
target generator in the repo, and I can confirm it’s working with:
./pants --filter-target-type=message_source list ::
sparse-lifeguard-95737
06/30/2022, 9:38 PM./pants export-codegen ::
I get the warning:
No codegen files/targets matched. All codegen target types: docker_image, experimental_shell_command, protobuf_source
sparse-lifeguard-95737
06/30/2022, 9:39 PMUnionRule(GenerateSourcesRequest, CompileMessageRequest)
to be the thing that hooked my rule into export-codegen
- am I missing anything else?sparse-lifeguard-95737
07/01/2022, 1:13 PMdef ruiles():
instead of
def rules():