from collections import namedtuple from functools import partial from typing import TYPE_CHECKING, Any, Type, Union from moto.utilities.utils import PARTITION_NAMES, get_partition if TYPE_CHECKING: from .models import LambdaBackend ARN = namedtuple("ARN", ["region", "account", "function_name", "version"]) LAYER_ARN = namedtuple("LAYER_ARN", ["region", "account", "layer_name", "version"]) def make_arn(resource_type: str, region: str, account: str, name: str) -> str: return ( f"arn:{get_partition(region)}:lambda:{region}:{account}:{resource_type}:{name}" ) make_function_arn = partial(make_arn, "function") make_layer_arn = partial(make_arn, "layer") def make_ver_arn( resource_type: str, region: str, account: str, name: str, version: Any = "1" ) -> str: arn = make_arn(resource_type, region, account, name) return f"{arn}:{version}" make_function_ver_arn = partial(make_ver_arn, "function") make_layer_ver_arn = partial(make_ver_arn, "layer") def split_arn(arn_type: Union[Type[ARN], Type[LAYER_ARN]], arn: str) -> Any: for partition in PARTITION_NAMES: arn = arn.replace(f"arn:{partition}:lambda:", "") region, account, _, name, version = arn.split(":") return arn_type(region, account, name, version) split_function_arn = partial(split_arn, ARN) split_layer_arn = partial(split_arn, LAYER_ARN) def get_backend(account_id: str, region: str) -> "LambdaBackend": from moto.core.models import default_user_config if default_user_config.get("lambda", {}).get("use_docker", True) is False: from moto.awslambda_simple.models import lambda_simple_backends return lambda_simple_backends[account_id][region] else: from moto.awslambda.models import lambda_backends return lambda_backends[account_id][region]
Memory