• 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/plugin_development/pants_requirements.py
1
# Copyright 2021 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from pants.backend.python.target_types import (
×
5
    PythonRequirementFindLinksField,
6
    PythonRequirementModulesField,
7
    PythonRequirementResolveField,
8
    PythonRequirementsField,
9
    PythonRequirementTarget,
10
)
11
from pants.engine.rules import collect_rules, rule
×
12
from pants.engine.target import (
×
13
    COMMON_TARGET_FIELDS,
14
    BoolField,
15
    GeneratedTargets,
16
    GenerateTargetsRequest,
17
    StringField,
18
    TargetGenerator,
19
)
20
from pants.engine.unions import UnionMembership, UnionRule
×
21
from pants.util.strutil import help_text
×
22
from pants.version import PANTS_SEMVER
×
23

24

25
class PantsRequirementsTestutilField(BoolField):
×
26
    alias = "testutil"
×
27
    default = True
×
28
    help = "If true, include `pantsbuild.pants.testutil` to write tests for your plugin."
×
29

30

31
class PantsRequirementsVersionSpecField(StringField):
×
32
    alias = "version_spec"
×
33
    default = f"== {PANTS_SEMVER.public}"
×
34
    help = help_text(
×
35
        """
36
        The PEP 440 version specifier version of Pants to target.
37
        E.g. `== 2.15.*`, or `>= 2.16.0, < 2.17.0`
38
        """
39
    )
40

41

42
class PantsRequirementsTargetGenerator(TargetGenerator):
×
43
    alias = "pants_requirements"
×
44
    help = help_text(
×
45
        """
46
        Generate `python_requirement` targets for Pants itself to use with Pants plugins.
47

48
        This is useful when writing plugins so that you can build and test your
49
        plugin using Pants.
50

51
        The generated targets will have the correct version based on the exact `version` in your
52
        `pants.toml`, and they will work with dependency inference. They're pulled directly from
53
        our GitHub releases, using the relevant platform markers.
54

55
        (If this versioning scheme does not work for you, you can directly create
56
        `python_requirement` targets for `pantsbuild.pants` and `pantsbuild.pants.testutil`. We
57
        also invite you to share your ideas at
58
        https://github.com/pantsbuild/pants/issues/new/choose)
59
        """
60
    )
61
    generated_target_cls = PythonRequirementTarget
×
62
    core_fields = (
×
63
        *COMMON_TARGET_FIELDS,
64
        PantsRequirementsVersionSpecField,
65
        PantsRequirementsTestutilField,
66
        PythonRequirementFindLinksField,
67
    )
68
    copied_fields = COMMON_TARGET_FIELDS
×
69
    moved_fields = (PythonRequirementResolveField,)
×
70

71

72
class GenerateFromPantsRequirementsRequest(GenerateTargetsRequest):
×
73
    generate_from = PantsRequirementsTargetGenerator
×
74

75

76
@rule
×
77
async def generate_from_pants_requirements(
×
78
    request: GenerateFromPantsRequirementsRequest, union_membership: UnionMembership
79
) -> GeneratedTargets:
80
    generator = request.generator
×
81
    version_spec = generator[PantsRequirementsVersionSpecField].value
×
82

83
    def create_tgt(dist: str, module: str) -> PythonRequirementTarget:
×
84
        return PythonRequirementTarget(
×
85
            {
86
                PythonRequirementsField.alias: (f"{dist} {version_spec}",),
87
                PythonRequirementFindLinksField.alias: ("https://wheels.pantsbuild.org/simple",),
88
                PythonRequirementModulesField.alias: (module,),
89
                **request.template,
90
            },
91
            request.template_address.create_generated(dist),
92
            union_membership,
93
        )
94

95
    result = [create_tgt("pantsbuild.pants", "pants")]
×
96
    if generator[PantsRequirementsTestutilField].value:
×
97
        result.append(create_tgt("pantsbuild.pants.testutil", "pants.testutil"))
×
98
    return GeneratedTargets(generator, result)
×
99

100

101
def rules():
×
102
    return (
×
103
        *collect_rules(),
104
        UnionRule(GenerateTargetsRequest, GenerateFromPantsRequirementsRequest),
105
    )
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