def _transform_resources()

in rostran/providers/cloudformation/template.py [0:0]


    def _transform_resources(self, out_resources: Resources):
        cf_resources = self.source.get("Resources", {})

        resources_to_handle = []
        for resource_id, cf_resource in cf_resources.items():
            cf_resource_type = cf_resource["Type"]
            cf_resource_props = cf_resource.get("Properties") or {}
            typer.secho(f"Transforming resource {resource_id}<{cf_resource_type}>")

            # Get rule by resource type
            resource_rule: ResourceRule = self.rule_manager.resource_rules.get(
                cf_resource_type
            )
            if resource_rule is None:
                typer.secho(
                    f"  Resource type {cf_resource_type!r} is not supported and will be ignored.",
                    fg="yellow",
                )
                continue

            self.rules[resource_id] = resource_rule

            resource = Resource(
                resource_id=resource_id,
                resource_type=resource_rule.target_resource_type,
                depends_on=cf_resource.get("DependsOn"),
                condition=cf_resource.get("Condition"),
                deletion_policy=cf_resource.get("DeletionPolicy"),
            )
            if resource.type:
                props = self._transform_resource_props(
                    cf_resource_type,
                    cf_resource_props,
                    resource_rule.properties,
                    resource_rule.rule_id,
                )
                for k, v in props.items():
                    p = Property.initialize(k, v)
                    resource.properties.add(p)
                out_resources.add(resource)
            else:
                resource.type = cf_resource_type
                for k, v in cf_resource_props.items():
                    p = Property.initialize(k, v)
                    resource.properties.add(p)

            if resource_rule.handler:
                resources_to_handle.append((resource, resource_rule.handler))

        for resource, handler in resources_to_handle:
            handler(resource, out_resources)