"""Retrieve a value from AWS Elastic Container Registry (ECR)."""from__future__importannotationsimportbase64importloggingfromtypingimportTYPE_CHECKING,Any,ClassVar,castfrom...lookups.handlers.baseimportLookupHandlerifTYPE_CHECKING:frommypy_boto3_ecr.clientimportECRClientfrom...contextimportCfnginContext,RunwayContextLOGGER=logging.getLogger(__name__)
[docs]classEcrLookup(LookupHandler["CfnginContext | RunwayContext"]):"""ECR Lookup."""TYPE_NAME:ClassVar[str]="ecr""""Name that the Lookup is registered as."""
[docs]@staticmethoddefget_login_password(client:ECRClient)->str:"""Get a password to login to ECR registry."""auth=client.get_authorization_token().get("authorizationData",[None])[0]ifnotauthor"authorizationToken"notinauth:raiseValueError("get_authorization_token did not return authorizationData")auth_token=base64.b64decode(auth["authorizationToken"]).decode()_,password=auth_token.split(":")returnpassword
[docs]@classmethoddefhandle(cls,value:str,context:CfnginContext|RunwayContext,**_kwargs:Any)->Any:"""Retrieve a value from AWS Elastic Container Registry (ECR). Args: value: The value passed to the Lookup. context: The current context object. """query,args=cls.parse(value)session=context.get_session(region=cast("str | None",args.get("region")))client=session.client("ecr")ifquery=="login-password":result=cls.get_login_password(client)else:raiseValueError(f"ecr lookup does not support '{query}'")returncls.format_results(result,**args)