1 """Support for Alexa skill service end point."""
4 from http
import HTTPStatus
8 from aiohttp.web_response
import StreamResponse
33 _LOGGER = logging.getLogger(__name__)
35 FLASH_BRIEFINGS_API_ENDPOINT =
"/api/alexa/flash_briefings/{briefing_id}"
39 def async_setup(hass: HomeAssistant, flash_briefing_config: ConfigType) ->
None:
40 """Activate Alexa component."""
45 """Handle Alexa Flash Briefing skill requests."""
47 url = FLASH_BRIEFINGS_API_ENDPOINT
49 name =
"api:alexa:flash_briefings"
51 def __init__(self, hass: HomeAssistant, flash_briefings: ConfigType) ->
None:
52 """Initialize Alexa view."""
58 self, request: http.HomeAssistantRequest, briefing_id: str
59 ) -> StreamResponse | tuple[bytes, HTTPStatus]:
60 """Handle Alexa Flash Briefing request."""
61 _LOGGER.debug(
"Received Alexa flash briefing request for: %s", briefing_id)
63 if request.query.get(API_PASSWORD)
is None:
64 err =
"No password provided for Alexa flash briefing: %s"
65 _LOGGER.error(err, briefing_id)
66 return b
"", HTTPStatus.UNAUTHORIZED
68 if not hmac.compare_digest(
69 request.query[API_PASSWORD].encode(
"utf-8"),
72 err =
"Wrong password for Alexa flash briefing: %s"
73 _LOGGER.error(err, briefing_id)
74 return b
"", HTTPStatus.UNAUTHORIZED
77 err =
"No configured Alexa flash briefing was found for: %s"
78 _LOGGER.error(err, briefing_id)
79 return b
"", HTTPStatus.NOT_FOUND
85 if item.get(CONF_TITLE)
is not None:
86 if isinstance(item.get(CONF_TITLE), template.Template):
87 output[ATTR_TITLE_TEXT] = item[CONF_TITLE].async_render(
91 output[ATTR_TITLE_TEXT] = item.get(CONF_TITLE)
93 if item.get(CONF_TEXT)
is not None:
94 if isinstance(item.get(CONF_TEXT), template.Template):
95 output[ATTR_MAIN_TEXT] = item[CONF_TEXT].async_render(
99 output[ATTR_MAIN_TEXT] = item.get(CONF_TEXT)
101 if (uid := item.get(CONF_UID))
is None:
102 uid =
str(uuid.uuid4())
103 output[ATTR_UID] = uid
105 if item.get(CONF_AUDIO)
is not None:
106 if isinstance(item.get(CONF_AUDIO), template.Template):
107 output[ATTR_STREAM_URL] = item[CONF_AUDIO].async_render(
111 output[ATTR_STREAM_URL] = item.get(CONF_AUDIO)
113 if item.get(CONF_DISPLAY_URL)
is not None:
114 if isinstance(item.get(CONF_DISPLAY_URL), template.Template):
115 output[ATTR_REDIRECTION_URL] = item[CONF_DISPLAY_URL].async_render(
119 output[ATTR_REDIRECTION_URL] = item.get(CONF_DISPLAY_URL)
121 output[ATTR_UPDATE_DATE] = dt_util.utcnow().strftime(DATE_FORMAT)
123 briefing.append(output)
125 return self.json(briefing)
None __init__(self, HomeAssistant hass, ConfigType flash_briefings)
StreamResponse|tuple[bytes, HTTPStatus] get(self, http.HomeAssistantRequest request, str briefing_id)
None async_setup(HomeAssistant hass, ConfigType flash_briefing_config)