• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 18252174847

05 Oct 2025 01:36AM UTC coverage: 43.382% (-36.9%) from 80.261%
18252174847

push

github

web-flow
run tests on mac arm (#22717)

Just doing the minimal to pull forward the x86_64 pattern.

ref #20993

25776 of 59416 relevant lines covered (43.38%)

1.3 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/python/pants/backend/codegen/thrift/scrooge/java/rules.py
1
# Copyright 2021 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3
from __future__ import annotations
×
4

5
from dataclasses import dataclass
×
6

7
from pants.backend.codegen.thrift.scrooge.java import symbol_mapper
×
8
from pants.backend.codegen.thrift.scrooge.rules import (
×
9
    GenerateScroogeThriftSourcesRequest,
10
    generate_scrooge_thrift_sources,
11
)
12
from pants.backend.codegen.thrift.target_types import (
×
13
    ThriftDependenciesField,
14
    ThriftSourceField,
15
    ThriftSourcesGeneratorTarget,
16
    ThriftSourceTarget,
17
)
18
from pants.backend.java.target_types import JavaSourceField
×
19
from pants.backend.scala.subsystems.scala import ScalaSubsystem
×
20
from pants.build_graph.address import Address
×
21
from pants.engine.fs import AddPrefix
×
22
from pants.engine.intrinsics import digest_to_snapshot
×
23
from pants.engine.rules import collect_rules, implicitly, rule
×
24
from pants.engine.target import (
×
25
    FieldSet,
26
    GeneratedSources,
27
    GenerateSourcesRequest,
28
    InferDependenciesRequest,
29
    InferredDependencies,
30
)
31
from pants.engine.unions import UnionRule
×
32
from pants.jvm.dependency_inference import artifact_mapper
×
33
from pants.jvm.dependency_inference.artifact_mapper import (
×
34
    AllJvmArtifactTargets,
35
    UnversionedCoordinate,
36
    find_jvm_artifacts_or_raise,
37
)
38
from pants.jvm.subsystems import JvmSubsystem
×
39
from pants.jvm.target_types import JvmResolveField, PrefixedJvmJdkField, PrefixedJvmResolveField
×
40
from pants.source.source_root import SourceRootRequest, get_source_root
×
41
from pants.util.logging import LogLevel
×
42

43

44
class GenerateJavaFromThriftRequest(GenerateSourcesRequest):
×
45
    input = ThriftSourceField
×
46
    output = JavaSourceField
×
47

48

49
@dataclass(frozen=True)
×
50
class ScroogeThriftJavaDependenciesInferenceFieldSet(FieldSet):
×
51
    required_fields = (
×
52
        ThriftDependenciesField,
53
        JvmResolveField,
54
    )
55

56
    dependencies: ThriftDependenciesField
×
57
    resolve: JvmResolveField
×
58

59

60
class InferScroogeThriftJavaDependencies(InferDependenciesRequest):
×
61
    infer_from = ScroogeThriftJavaDependenciesInferenceFieldSet
×
62

63

64
@rule(desc="Generate Java from Thrift with Scrooge", level=LogLevel.DEBUG)
×
65
async def generate_java_from_thrift_with_scrooge(
×
66
    request: GenerateJavaFromThriftRequest,
67
) -> GeneratedSources:
68
    result = await generate_scrooge_thrift_sources(
×
69
        GenerateScroogeThriftSourcesRequest(
70
            thrift_source_field=request.protocol_target[ThriftSourceField],
71
            lang_id="java",
72
            lang_name="Java",
73
        ),
74
        **implicitly(),
75
    )
76

77
    source_root = await get_source_root(SourceRootRequest.for_target(request.protocol_target))
×
78

79
    source_root_restored = (
×
80
        await digest_to_snapshot(**implicitly(AddPrefix(result.snapshot.digest, source_root.path)))
81
        if source_root.path != "."
82
        else await digest_to_snapshot(result.snapshot.digest)
83
    )
84
    return GeneratedSources(source_root_restored)
×
85

86

87
@dataclass(frozen=True)
×
88
class ScroogeThriftJavaRuntimeForResolveRequest:
×
89
    resolve_name: str
×
90

91

92
@dataclass(frozen=True)
×
93
class ScroogeThriftJavaRuntimeForResolve:
×
94
    addresses: frozenset[Address]
×
95

96

97
@rule
×
98
async def resolve_scrooge_thrift_java_runtime_for_resolve(
×
99
    request: ScroogeThriftJavaRuntimeForResolveRequest,
100
    jvm_artifact_targets: AllJvmArtifactTargets,
101
    jvm: JvmSubsystem,
102
    scala_subsystem: ScalaSubsystem,
103
) -> ScroogeThriftJavaRuntimeForResolve:
104
    scala_version = scala_subsystem.version_for_resolve(request.resolve_name)
×
105
    scala_binary_version = scala_version.binary
×
106
    addresses = find_jvm_artifacts_or_raise(
×
107
        required_coordinates=[
108
            UnversionedCoordinate(
109
                group="org.apache.thrift",
110
                artifact="libthrift",
111
            ),
112
            UnversionedCoordinate(
113
                group="com.twitter",
114
                artifact=f"scrooge-core_{scala_binary_version}",
115
            ),
116
        ],
117
        resolve=request.resolve_name,
118
        jvm_artifact_targets=jvm_artifact_targets,
119
        jvm=jvm,
120
        subsystem="the Scrooge Java Thrift runtime",
121
        target_type="thrift_sources",
122
    )
123
    return ScroogeThriftJavaRuntimeForResolve(addresses)
×
124

125

126
@rule
×
127
async def inject_scrooge_thrift_java_dependencies(
×
128
    request: InferScroogeThriftJavaDependencies, jvm: JvmSubsystem
129
) -> InferredDependencies:
130
    resolve = request.field_set.resolve.normalized_value(jvm)
×
131
    dependencies_info = await resolve_scrooge_thrift_java_runtime_for_resolve(
×
132
        ScroogeThriftJavaRuntimeForResolveRequest(resolve), **implicitly()
133
    )
134
    return InferredDependencies(dependencies_info.addresses)
×
135

136

137
def rules():
×
138
    return (
×
139
        *collect_rules(),
140
        *symbol_mapper.rules(),
141
        UnionRule(GenerateSourcesRequest, GenerateJavaFromThriftRequest),
142
        UnionRule(InferDependenciesRequest, InferScroogeThriftJavaDependencies),
143
        ThriftSourceTarget.register_plugin_field(PrefixedJvmJdkField),
144
        ThriftSourcesGeneratorTarget.register_plugin_field(PrefixedJvmJdkField),
145
        ThriftSourceTarget.register_plugin_field(PrefixedJvmResolveField),
146
        ThriftSourcesGeneratorTarget.register_plugin_field(PrefixedJvmResolveField),
147
        # Rules to avoid rule graph errors.
148
        *artifact_mapper.rules(),
149
    )
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc