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

pantsbuild / pants / 18225878979

03 Oct 2025 02:59PM UTC coverage: 80.269% (-0.006%) from 80.275%
18225878979

Pull #22717

github

web-flow
Merge b17e03226 into f7b1ba442
Pull Request #22717: wip: run tests on mac arm

77232 of 96217 relevant lines covered (80.27%)

3.63 hits per line

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

100.0
/src/python/pants/backend/awslambda/python/rules.py
1
# Copyright 2019 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from __future__ import annotations
1✔
5

6
import logging
1✔
7
from dataclasses import dataclass
1✔
8

9
from pants.backend.awslambda.python.target_types import (
1✔
10
    AWSLambdaArchitectureField,
11
    PythonAWSLambda,
12
    PythonAwsLambdaHandlerField,
13
    PythonAwsLambdaIncludeRequirements,
14
    PythonAwsLambdaIncludeSources,
15
    PythonAWSLambdaLayer,
16
    PythonAwsLambdaLayerDependenciesField,
17
    PythonAwsLambdaRuntime,
18
)
19
from pants.backend.python.util_rules.faas import (
1✔
20
    BuildPythonFaaSRequest,
21
    FaaSArchitecture,
22
    PythonFaaSCompletePlatforms,
23
    PythonFaaSLayoutField,
24
    PythonFaaSPex3VenvCreateExtraArgsField,
25
    PythonFaaSPexBuildExtraArgs,
26
    build_python_faas,
27
)
28
from pants.backend.python.util_rules.faas import rules as faas_rules
1✔
29
from pants.core.environments.target_types import EnvironmentField
1✔
30
from pants.core.goals.package import BuiltPackage, OutputPathField, PackageFieldSet
1✔
31
from pants.engine.rules import collect_rules, rule
1✔
32
from pants.engine.unions import UnionRule
1✔
33
from pants.util.logging import LogLevel
1✔
34

35
logger = logging.getLogger(__name__)
1✔
36

37

38
@dataclass(frozen=True)
1✔
39
class _BaseFieldSet(PackageFieldSet):
1✔
40
    include_requirements: PythonAwsLambdaIncludeRequirements
1✔
41
    runtime: PythonAwsLambdaRuntime
1✔
42
    architecture: AWSLambdaArchitectureField
1✔
43
    complete_platforms: PythonFaaSCompletePlatforms
1✔
44
    pex3_venv_create_extra_args: PythonFaaSPex3VenvCreateExtraArgsField
1✔
45
    pex_build_extra_args: PythonFaaSPexBuildExtraArgs
1✔
46
    layout: PythonFaaSLayoutField
1✔
47
    output_path: OutputPathField
1✔
48
    environment: EnvironmentField
1✔
49

50

51
@dataclass(frozen=True)
1✔
52
class PythonAwsLambdaFieldSet(_BaseFieldSet):
1✔
53
    required_fields = (PythonAwsLambdaHandlerField,)
1✔
54

55
    handler: PythonAwsLambdaHandlerField
1✔
56

57

58
@dataclass(frozen=True)
1✔
59
class PythonAwsLambdaLayerFieldSet(_BaseFieldSet):
1✔
60
    required_fields = (PythonAwsLambdaLayerDependenciesField,)
1✔
61

62
    dependencies: PythonAwsLambdaLayerDependenciesField
1✔
63
    include_sources: PythonAwsLambdaIncludeSources
1✔
64

65

66
@rule(desc="Create Python AWS Lambda Function", level=LogLevel.DEBUG)
1✔
67
async def package_python_aws_lambda_function(
1✔
68
    field_set: PythonAwsLambdaFieldSet,
69
) -> BuiltPackage:
70
    return await build_python_faas(
1✔
71
        BuildPythonFaaSRequest(
72
            address=field_set.address,
73
            target_name=PythonAWSLambda.alias,
74
            complete_platforms=field_set.complete_platforms,
75
            runtime=field_set.runtime,
76
            architecture=FaaSArchitecture(field_set.architecture.value),
77
            handler=field_set.handler,
78
            output_path=field_set.output_path,
79
            include_requirements=field_set.include_requirements.value,
80
            include_sources=True,
81
            pex3_venv_create_extra_args=field_set.pex3_venv_create_extra_args,
82
            pex_build_extra_args=field_set.pex_build_extra_args,
83
            layout=field_set.layout,
84
            reexported_handler_module=PythonAwsLambdaHandlerField.reexported_handler_module,
85
        )
86
    )
87

88

89
@rule(desc="Create Python AWS Lambda Layer", level=LogLevel.DEBUG)
1✔
90
async def package_python_aws_lambda_layer(
1✔
91
    field_set: PythonAwsLambdaLayerFieldSet,
92
) -> BuiltPackage:
93
    return await build_python_faas(
1✔
94
        BuildPythonFaaSRequest(
95
            address=field_set.address,
96
            target_name=PythonAWSLambdaLayer.alias,
97
            complete_platforms=field_set.complete_platforms,
98
            runtime=field_set.runtime,
99
            architecture=FaaSArchitecture(field_set.architecture.value),
100
            output_path=field_set.output_path,
101
            include_requirements=field_set.include_requirements.value,
102
            include_sources=field_set.include_sources.value,
103
            pex3_venv_create_extra_args=field_set.pex3_venv_create_extra_args,
104
            pex_build_extra_args=field_set.pex_build_extra_args,
105
            layout=field_set.layout,
106
            # See
107
            # https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path
108
            #
109
            # Runtime | Path
110
            # ...
111
            # Python  | `python`
112
            #         | `python/lib/python3.10/site-packages`
113
            # ...
114
            #
115
            # The one independent on the runtime-version is more convenient:
116
            prefix_in_artifact="python",
117
            # a layer doesn't have a handler, just pulls in things via `dependencies`
118
            handler=None,
119
            reexported_handler_module=None,
120
        )
121
    )
122

123

124
def rules():
1✔
125
    return [
1✔
126
        *collect_rules(),
127
        UnionRule(PackageFieldSet, PythonAwsLambdaFieldSet),
128
        UnionRule(PackageFieldSet, PythonAwsLambdaLayerFieldSet),
129
        *faas_rules(),
130
    ]
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

© 2026 Coveralls, Inc