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 []