# -*- coding: utf-8 -*-fromtypingimportUnion,Optional,TYPE_CHECKINGfrom.abstractimportHashableAbc,RenderableAbc,SerializableAbc,PlaybookManagedfrom.validatorimportvalidate_attr_typefrom.utilsimportvalidate_account_id,validate_iam_arnifTYPE_CHECKING:# pragma: no coverfrom.pb.playbookimportPlaybook
[docs]classPrincipal(HashableAbc,RenderableAbc,SerializableAbc,PlaybookManaged):""" Principal Model. """
[docs]classIam(Principal):_prefix:str=Nonedef__init__(self,arn:str,_playbook_id:Optional[str]=None,):self.arn=arnself.validate()self._playbook_id=_playbook_id# IAM object is never playbook manageddefvalidate(self):validate_attr_type(self,"arn",self.arn,str)validate_iam_arn(self.arn)@propertydefid(self):returnself.arn@propertydefvar_name(self):return"{}_{}".format(self._prefix,self.arn.split("/",1)[1].replace("-","_").replace(".","_").replace("/","__"))def__repr__(self):returnf'{self.__class__.__name__}(arn={self.arn!r})'defserialize(self):returndict(object_type=self.object_type,arn=self.arn,_playbook_id=self._playbook_id,)@propertydefname(self)->str:""" Return the IAM role / user / group base name """returnself.arn.split("/")[-1]