Source code for runway.cfngin.hooks.awslambda.python_requirements._deployment_package

"""AWS Lambda Python Deployment Package."""
from __future__ import annotations

from pathlib import Path
from typing import TYPE_CHECKING, Optional

from igittigitt import IgnoreParser

from .....compat import cached_property
from ..deployment_package import DeploymentPackage

if TYPE_CHECKING:
    from . import PythonProject


[docs]class PythonDeploymentPackage(DeploymentPackage["PythonProject"]): """AWS Lambda Python Deployment Package.""" project: PythonProject @cached_property def gitignore_filter(self) -> Optional[IgnoreParser]: """Filter to use when zipping dependencies. This should be overridden by subclasses if a filter should be used. """ if self.project.args.slim: gitignore_filter = IgnoreParser() gitignore_filter.add_rule( "**/*.dist-info*", self.project.dependency_directory ) gitignore_filter.add_rule( "**/*.py[c|d|i|o]", self.project.dependency_directory ) gitignore_filter.add_rule( "**/__pycache__*", self.project.dependency_directory ) if self.project.args.strip: gitignore_filter.add_rule("**/*.so", self.project.dependency_directory) return gitignore_filter return None
[docs] @staticmethod def insert_layer_dir(file_path: Path, relative_to: Path) -> Path: """Insert ``python`` directory into local file path for layer archive. Args: file_path: Path to local file. relative_to: Path to a directory that the file_path will be relative to in the deployment package. """ return relative_to / f"python/{file_path.relative_to(relative_to)}"