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

pantsbuild / pants / 18517631058

15 Oct 2025 04:18AM UTC coverage: 69.207% (-11.1%) from 80.267%
18517631058

Pull #22745

github

web-flow
Merge 642a76ca1 into 99919310e
Pull Request #22745: [windows] Add windows support in the stdio crate.

53815 of 77759 relevant lines covered (69.21%)

2.42 hits per line

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

0.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
×
5

6
import logging
×
7
from dataclasses import dataclass
×
8

9
from pants.backend.awslambda.python.target_types import (
×
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 (
×
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
×
29
from pants.core.environments.target_types import EnvironmentField
×
30
from pants.core.goals.package import BuiltPackage, OutputPathField, PackageFieldSet
×
31
from pants.engine.rules import collect_rules, rule
×
32
from pants.engine.unions import UnionRule
×
33
from pants.util.logging import LogLevel
×
34

35
logger = logging.getLogger(__name__)
×
36

37

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

50

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

55
    handler: PythonAwsLambdaHandlerField
×
56

57

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

62
    dependencies: PythonAwsLambdaLayerDependenciesField
×
63
    include_sources: PythonAwsLambdaIncludeSources
×
64

65

66
@rule(desc="Create Python AWS Lambda Function", level=LogLevel.DEBUG)
×
67
async def package_python_aws_lambda_function(
×
68
    field_set: PythonAwsLambdaFieldSet,
69
) -> BuiltPackage:
70
    return await build_python_faas(
×
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)
×
90
async def package_python_aws_lambda_layer(
×
91
    field_set: PythonAwsLambdaLayerFieldSet,
92
) -> BuiltPackage:
93
    return await build_python_faas(
×
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():
×
125
    return [
×
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

© 2025 Coveralls, Inc