Add TT WS API (#28599)

* Add TT WS API

* Add a test

* Correctly convert TT errrors
This commit is contained in:
Paulus Schoutsen 2019-11-08 01:06:16 -08:00 committed by Bram Kragten
parent b2071b81c1
commit bd54ff3c02
7 changed files with 93 additions and 20 deletions

View file

@ -6,7 +6,7 @@ import logging
import aiohttp
import async_timeout
import attr
from hass_nabucasa import Cloud, auth
from hass_nabucasa import Cloud, auth, thingtalk
from hass_nabucasa.const import STATE_DISCONNECTED
import voluptuous as vol
@ -75,28 +75,29 @@ _CLOUD_ERRORS = {
async def async_setup(hass):
"""Initialize the HTTP API."""
hass.components.websocket_api.async_register_command(
WS_TYPE_STATUS, websocket_cloud_status, SCHEMA_WS_STATUS
)
hass.components.websocket_api.async_register_command(
async_register_command = hass.components.websocket_api.async_register_command
async_register_command(WS_TYPE_STATUS, websocket_cloud_status, SCHEMA_WS_STATUS)
async_register_command(
WS_TYPE_SUBSCRIPTION, websocket_subscription, SCHEMA_WS_SUBSCRIPTION
)
hass.components.websocket_api.async_register_command(websocket_update_prefs)
hass.components.websocket_api.async_register_command(
async_register_command(websocket_update_prefs)
async_register_command(
WS_TYPE_HOOK_CREATE, websocket_hook_create, SCHEMA_WS_HOOK_CREATE
)
hass.components.websocket_api.async_register_command(
async_register_command(
WS_TYPE_HOOK_DELETE, websocket_hook_delete, SCHEMA_WS_HOOK_DELETE
)
hass.components.websocket_api.async_register_command(websocket_remote_connect)
hass.components.websocket_api.async_register_command(websocket_remote_disconnect)
async_register_command(websocket_remote_connect)
async_register_command(websocket_remote_disconnect)
hass.components.websocket_api.async_register_command(google_assistant_list)
hass.components.websocket_api.async_register_command(google_assistant_update)
async_register_command(google_assistant_list)
async_register_command(google_assistant_update)
hass.components.websocket_api.async_register_command(alexa_list)
hass.components.websocket_api.async_register_command(alexa_update)
hass.components.websocket_api.async_register_command(alexa_sync)
async_register_command(alexa_list)
async_register_command(alexa_update)
async_register_command(alexa_sync)
async_register_command(thingtalk_convert)
hass.http.register_view(GoogleActionsSyncView)
hass.http.register_view(CloudLoginView)
@ -592,3 +593,18 @@ async def alexa_sync(hass, connection, msg):
connection.send_result(msg["id"])
else:
connection.send_error(msg["id"], ws_const.ERR_UNKNOWN_ERROR, "Unknown error")
@websocket_api.async_response
@websocket_api.websocket_command({"type": "cloud/thingtalk/convert", "query": str})
async def thingtalk_convert(hass, connection, msg):
"""Convert a query."""
cloud = hass.data[DOMAIN]
with async_timeout.timeout(10):
try:
connection.send_result(
msg["id"], await thingtalk.async_convert(cloud, msg["query"])
)
except thingtalk.ThingTalkConversionError as err:
connection.send_error(msg["id"], ws_const.ERR_UNKNOWN_ERROR, str(err))