Source code for aws_lambda_artifact_builder.layer.uv_builder
# -*- coding: utf-8 -*-"""UV-based Lambda layer builder implementation.This module provides Lambda layer creation using UV's ultra-fast dependency management,supporting both local and containerized builds. UV offers the fastest dependencyresolution and installation while maintaining compatibility with pip and Poetry workflows.**Command Pattern Classes:**- :class:`UvBasedLambdaLayerLocalBuilder`: Local uv-based builds- :class:`UvBasedLambdaLayerContainerBuilder`: Containerized uv-based builds"""importsubprocessimportdataclassesfrompathlibimportPathfromfunc_args.apiimportREQfrom..vendor.better_pathlibimporttemp_cwdfrom..constantsimportLayerBuildToolEnumfrom..pathsimportpath_build_lambda_layer_using_uv_in_container_scriptfrom.builderimport(BasedLambdaLayerLocalBuilder,BasedLambdaLayerContainerBuilder,)
[docs]@dataclasses.dataclass(frozen=True)classUVBasedLambdaLayerLocalBuilder(BasedLambdaLayerLocalBuilder,):""" This class implements UV-specific build workflow using lock files and UV's high-performance dependency resolution. **Key Features:** - Frozen lock file installation (--frozen) - Environment variable authentication (UV_INDEX_*) - Development dependency exclusion (--no-dev) - Copy-based linking for Lambda compatibility (--link-mode=copy) .. seealso:: :class:`~aws_lambda_artifact_builder.layer.builder.BasedLambdaLayerLocalBuilder` """path_bin_uv:Path=dataclasses.field(default=REQ)_build_tool:str=dataclasses.field(default=LayerBuildToolEnum.uv)
[docs]defstep_3_2_run_uv_sync(self):""" Execute UV sync with lock file constraints. Runs UV sync with --frozen to prevent lock file updates, --no-dev to exclude development dependencies, and --no-install-project to exclude the project itself. Uses --link-mode=copy for Lambda layer compatibility. """self.log("--- Step 3.2 - Run 'uv sync'")path_bin_uv=self.path_bin_uvdir_repo=self.path_layout.dir_repowithtemp_cwd(dir_repo):args=[f"{path_bin_uv}","sync","--frozen","--no-dev","--no-install-project","--link-mode=copy",]subprocess.run(args,cwd=dir_repo,check=True)
[docs]@dataclasses.dataclass(frozen=True)classUVBasedLambdaLayerContainerBuilder(BasedLambdaLayerContainerBuilder,):""" Command class for containerized UV-based Lambda layer builds. .. seealso:: :class:`~aws_lambda_artifact_builder.layer.builder.BasedLambdaLayerContainerBuilder` """path_script:Path=dataclasses.field(default=path_build_lambda_layer_using_uv_in_container_script)
[docs]defstep_1_preflight_check(self):super().step_1_preflight_check()ifself.path_layout.path_uv_lock.exists()isFalse:raiseFileNotFoundError(f"UV lock file not found: {self.path_layout.path_uv_lock},"f"cannot proceed with uv-based build."f"Please run 'uv lock' to generate the lock file.")