"""Retrieve a value from SSM Parameter Store."""from__future__importannotationsimportloggingfromtypingimportTYPE_CHECKING,Any,ClassVar,castfrom...lookups.handlers.baseimportLookupHandlerifTYPE_CHECKING:frommypy_boto3_ssm.type_defsimportParameterTypeDeffrom...contextimportCfnginContext,RunwayContextLOGGER=logging.getLogger(__name__)
[docs]classSsmLookup(LookupHandler["CfnginContext | RunwayContext"]):"""SSM Parameter Store Lookup."""TYPE_NAME:ClassVar[str]="ssm""""Name that the Lookup is registered as."""
[docs]@classmethoddefhandle(cls,value:str,context:CfnginContext|RunwayContext,**_kwargs:Any)->Any:"""Retrieve a value from SSM Parameter Store. Args: value: The value passed to the Lookup. context: The current context object. Raises: ParameterNotFound: Parameter not found in SSM and a default value was not provided. """query,args=cls.parse(value)session=context.get_session(region=cast("str | None",args.get("region")))client=session.client("ssm")try:returncls.format_results(cls._handle_get_parameter(client.get_parameter(Name=query,WithDecryption=True)["Parameter"]),**args,)exceptclient.exceptions.ParameterNotFound:if"default"inargs:LOGGER.debug('unable to resolve SSM parameter "%s"; using default',query,exc_info=True)args.pop("load",None)# don't load a default valuereturncls.format_results(args.pop("default"),**args)raise
@staticmethoddef_handle_get_parameter(parameter:ParameterTypeDef)->list[str]|str|None:"""Handle the return value of ``get_parameter``."""if"Value"notinparameter:returnNonevalue=parameter["Value"]ifparameter.get("Type")=="StringList":returnvalue.split(",")returnvalue