def extract_actions()

in scripts/validate.py [0:0]


def extract_actions(message):
    """Extract all of the special message actions from the given message."""
    message_type = message["template"]

    def _extract_cfr_doorhanger():
        buttons_prop = message["content"].get("buttons", {})
        if type(buttons_prop) is list:
            for button in buttons_prop:
                yield button["action"]
        else:
            for name, button in buttons_prop.items():
                if name == "primary":
                    yield button["action"]
                else:
                    for sub_button in button:
                        if "action" in sub_button:
                            yield sub_button["action"]

    def _extract_cfr_urlbar_chiclet():
        yield message["content"]["action"]

    def _extract_infobar():
        for button in message["buttons"]:
            yield button["action"]

    def _extract_spotlight():
        template = message["content"].get("template", "logo-and-content")

        if template == "logo-and-content":
            yield message["content"]["body"]["primary"]["action"]
            yield message["content"]["body"]["secondary"]["action"]
        elif template == "multistage":
            for screen in message["content"]["screens"]:
                for button_name in ["primary_button", "secondary_button"]:
                    button = screen["content"].get(button_name)
                    if button and button["action"].get("type"):
                        yield button["action"]

    def _extract_toolbar_badge():
        if "action" in message["content"]:
            yield message["content"]["action"]

    def _extract_pb_newtab():
        if "promoButton" in message["content"]:
            yield message["content"]["promoButton"]["action"]

    extractors = {
        "cfr_doorhanger": _extract_cfr_doorhanger,
        "cfr_urlbar_chiclet": _extract_cfr_urlbar_chiclet,
        "infobar": _extract_infobar,
        "spotlight": _extract_spotlight,
        "toolbar_badge": _extract_toolbar_badge,
        "pb_newtab": _extract_pb_newtab,
    }

    try:
        yield from extractors[message_type]()
    except KeyError:
        return []