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

pantsbuild / pants / 19250292619

11 Nov 2025 12:09AM UTC coverage: 77.865% (-2.4%) from 80.298%
19250292619

push

github

web-flow
flag non-runnable targets used with `code_quality_tool` (#22875)

2 of 5 new or added lines in 2 files covered. (40.0%)

1487 existing lines in 72 files now uncovered.

71448 of 91759 relevant lines covered (77.86%)

3.22 hits per line

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

0.0
/src/python/pants/backend/python/providers/pyenv/custom_install/rules.py
1
# Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

UNCOV
4
import dataclasses
×
UNCOV
5
from dataclasses import dataclass
×
UNCOV
6
from textwrap import dedent  # noqa: PNT20
×
7

UNCOV
8
from pants.backend.python.providers.pyenv.custom_install.target_types import (
×
9
    PyenvInstallSentinelField,
10
)
UNCOV
11
from pants.backend.python.providers.pyenv.rules import (
×
12
    PyenvInstallInfoRequest,
13
    PyenvPythonProviderSubsystem,
14
    get_pyenv_install_info,
15
)
UNCOV
16
from pants.backend.python.providers.pyenv.rules import rules as pyenv_rules
×
UNCOV
17
from pants.core.goals.run import RunFieldSet, RunInSandboxBehavior, RunRequest
×
UNCOV
18
from pants.core.util_rules.external_tool import download_external_tool
×
UNCOV
19
from pants.core.util_rules.external_tool import rules as external_tools_rules
×
UNCOV
20
from pants.engine.fs import CreateDigest, FileContent
×
UNCOV
21
from pants.engine.internals.native_engine import MergeDigests
×
UNCOV
22
from pants.engine.internals.selectors import concurrently
×
UNCOV
23
from pants.engine.internals.synthetic_targets import SyntheticAddressMaps, SyntheticTargetsRequest
×
UNCOV
24
from pants.engine.internals.target_adaptor import TargetAdaptor
×
UNCOV
25
from pants.engine.intrinsics import create_digest, merge_digests
×
UNCOV
26
from pants.engine.platform import Platform
×
UNCOV
27
from pants.engine.rules import collect_rules, implicitly, rule
×
UNCOV
28
from pants.engine.unions import UnionRule
×
UNCOV
29
from pants.util.frozendict import FrozenDict
×
30

31

UNCOV
32
@dataclass(frozen=True)
×
UNCOV
33
class SyntheticPyenvTargetsRequest(SyntheticTargetsRequest):
×
UNCOV
34
    path: str = SyntheticTargetsRequest.SINGLE_REQUEST_FOR_ALL_TARGETS
×
35

36

UNCOV
37
@rule
×
UNCOV
38
async def make_synthetic_targets(request: SyntheticPyenvTargetsRequest) -> SyntheticAddressMaps:
×
39
    return SyntheticAddressMaps.for_targets_request(
×
40
        request,
41
        [
42
            (
43
                "BUILD.pyenv",
44
                (
45
                    TargetAdaptor(
46
                        "_pyenv_install",
47
                        name="pants-pyenv-install",
48
                        __description_of_origin__="the `pyenv` provider",
49
                    ),
50
                ),
51
            )
52
        ],
53
    )
54

55

UNCOV
56
@dataclass(frozen=True)
×
UNCOV
57
class RunPyenvInstallFieldSet(RunFieldSet):
×
UNCOV
58
    run_in_sandbox_behavior = RunInSandboxBehavior.NOT_SUPPORTED
×
UNCOV
59
    required_fields = (PyenvInstallSentinelField,)
×
60

UNCOV
61
    _sentinel: PyenvInstallSentinelField
×
62

63

UNCOV
64
@rule
×
UNCOV
65
async def run_pyenv_install(
×
66
    _: RunPyenvInstallFieldSet,
67
    platform: Platform,
68
    pyenv_subsystem: PyenvPythonProviderSubsystem,
69
) -> RunRequest:
70
    run_request, pyenv = await concurrently(
×
71
        get_pyenv_install_info(PyenvInstallInfoRequest(), **implicitly()),
72
        download_external_tool(pyenv_subsystem.get_request(platform)),
73
    )
74

75
    wrapper_script_digest = await create_digest(
×
76
        CreateDigest(
77
            [
78
                FileContent(
79
                    "run_install_python_shim.sh",
80
                    dedent(
81
                        f"""\
82
                        #!/usr/bin/env bash
83
                        set -e
84
                        cd "$CHROOT"
85
                        SPECIFIC_VERSION=$("{pyenv.exe}" latest --known $1)
86
                        {" ".join(run_request.args)} $SPECIFIC_VERSION
87
                        """
88
                    ).encode(),
89
                    is_executable=True,
90
                )
91
            ]
92
        )
93
    )
94
    digest = await merge_digests(MergeDigests([run_request.digest, wrapper_script_digest]))
×
95
    return dataclasses.replace(
×
96
        run_request,
97
        args=("{chroot}/run_install_python_shim.sh",),
98
        digest=digest,
99
        extra_env=FrozenDict(
100
            {
101
                "CHROOT": "{chroot}",
102
                **run_request.extra_env,
103
            }
104
        ),
105
    )
106

107

UNCOV
108
def rules():
×
UNCOV
109
    return (
×
110
        *collect_rules(),
111
        *external_tools_rules(),
112
        *pyenv_rules(),
113
        *RunPyenvInstallFieldSet.rules(),
114
        UnionRule(SyntheticTargetsRequest, SyntheticPyenvTargetsRequest),
115
    )
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