def cfn_literal_parser()

in cfn_clean/__init__.py [0:0]


def cfn_literal_parser(source):
    """
    Sanitize the source:
    * Keep json body for specific resource properties
    """

    if isinstance(source, dict):
        for key, value in source.items():
            if key == "Type":
                for item in UNCONVERTED_KEYS:
                    if value == item[0]:
                        # Checking if this resource has "Properties" and the property literal to maintain
                        # Better check than just try/except KeyError :-)
                        if source.get("Properties") and source.get("Properties", {}).get(item[1]):
                            if isinstance(source["Properties"][item[1]], dict) and \
                                    not has_intrinsic_functions(source["Properties"][item[1]].keys()):
                                source["Properties"][item[1]] = LiteralString(u"{}".format(json.dumps(
                                    source["Properties"][item[1]],
                                    indent=2,
                                    separators=(',', ': '))
                                ))

            else:
                source[key] = cfn_literal_parser(value)

    elif isinstance(source, list):
        return [cfn_literal_parser(item) for item in source]

    return source