def parse()

in cfn_policy_validator/parsers/resource/parser.py [0:0]


    def parse(cls, template, account_config):
        # topologically sort which allows us to process dependent resources first
        sorter = TopologicalSorter(template)
        sorted_resources = sorter.sort_resources()

        parsers = {
            'AWS::S3::AccessPoint': S3AccessPointPolicyParser(),
            'AWS::S3::MultiRegionAccessPointPolicy': S3MultiRegionAccessPointPolicyParser(),
            'AWS::S3::BucketPolicy': S3BucketPolicyParser(),
            'AWS::SQS::QueuePolicy': SqsQueuePolicyParser(),
            'AWS::SNS::TopicPolicy': SnsTopicPolicyParser(),
            'AWS::KMS::Key': KmsKeyPolicyParser(),
            'AWS::Lambda::Permission': LambdaPermissionPolicyParser(account_config),
            'AWS::Lambda::LayerVersionPermission': LambdaLayerVersionPermissionParser(account_config.partition),
            'AWS::SecretsManager::ResourcePolicy': SecretsManagerPolicyParser()
        }

        invoked_parsers = set()
        for resource in sorted_resources:
            resource_type = resource.value['Type']
            parser = parsers.get(resource_type)
            if parser is not None:
                LOGGER.info(f'Parsing resource type {resource_type} with logical name {resource.logical_name}..')
                parser.parse(resource.logical_name, resource.value)
                invoked_parsers.add(parser)

        return [policy for parser in invoked_parsers for policy in parser.get_policies()]