"""CFNgin hook for cleaning up resources prior to CFN stack deletion."""from__future__importannotationsimportloggingfromtypingimportTYPE_CHECKING,Anyfrombotocore.exceptionsimportClientErrorfrom...utilsimportBaseModelifTYPE_CHECKING:from...contextimportCfnginContextLOGGER=logging.getLogger(__name__)
[docs]classPurgeBucketHookArgs(BaseModel):"""Hook arguments for ``purge_bucket``."""bucket_name:str"""Name of the bucket to purge."""
[docs]defpurge_bucket(context:CfnginContext,*__args:Any,**kwargs:Any)->bool:"""Delete objects in bucket."""args=PurgeBucketHookArgs.model_validate(kwargs)session=context.get_session()s3_resource=session.resource("s3")try:s3_resource.meta.client.head_bucket(Bucket=args.bucket_name)exceptClientErrorasexc:ifexc.response["Error"]["Code"]=="404":LOGGER.info('bucket "%s" does not exist; unable to complete purge',args.bucket_name)returnTrueraisebucket=s3_resource.Bucket(args.bucket_name)bucket.object_versions.delete()returnTrue