From 00cbdffa126278bdd85dccba67e8e3bb38d69908 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen <paulus@paulusschoutsen.nl> Date: Sat, 16 Jun 2018 17:12:03 -0400 Subject: [PATCH] Add experimental UI backend (#15002) * Add experimental UI * Add test * Lint --- homeassistant/components/frontend/__init__.py | 31 ++++++++++++++++--- tests/components/test_frontend.py | 19 ++++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index 0c425ccd3b1..e38376edd9b 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -23,6 +23,7 @@ from homeassistant.const import CONF_NAME, EVENT_THEMES_UPDATED from homeassistant.core import callback from homeassistant.helpers.translation import async_get_translations from homeassistant.loader import bind_hass +from homeassistant.util.yaml import load_yaml REQUIREMENTS = ['home-assistant-frontend==20180615.0'] @@ -105,6 +106,10 @@ SCHEMA_GET_TRANSLATIONS = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend({ vol.Required('type'): WS_TYPE_GET_TRANSLATIONS, vol.Required('language'): str, }) +WS_TYPE_GET_EXPERIMENTAL_UI = 'frontend/experimental_ui' +SCHEMA_GET_EXPERIMENTAL_UI = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend({ + vol.Required('type'): WS_TYPE_GET_EXPERIMENTAL_UI, +}) class Panel: @@ -210,6 +215,9 @@ async def async_setup(hass, config): hass.components.websocket_api.async_register_command( WS_TYPE_GET_TRANSLATIONS, websocket_get_translations, SCHEMA_GET_TRANSLATIONS) + hass.components.websocket_api.async_register_command( + WS_TYPE_GET_EXPERIMENTAL_UI, websocket_experimental_config, + SCHEMA_GET_EXPERIMENTAL_UI) hass.http.register_view(ManifestJSONView) conf = config.get(DOMAIN, {}) @@ -254,10 +262,11 @@ async def async_setup(hass, config): """Finalize setup of a panel.""" panel.async_register_index_routes(hass.http.app.router, index_view) - await asyncio.wait([ - async_register_built_in_panel(hass, panel) - for panel in ('dev-event', 'dev-info', 'dev-service', 'dev-state', - 'dev-template', 'dev-mqtt', 'kiosk')], loop=hass.loop) + await asyncio.wait( + [async_register_built_in_panel(hass, panel) for panel in ( + 'dev-event', 'dev-info', 'dev-service', 'dev-state', + 'dev-template', 'dev-mqtt', 'kiosk', 'experimental-ui')], + loop=hass.loop) hass.data[DATA_FINALIZE_PANEL] = async_finalize_panel @@ -488,3 +497,17 @@ def websocket_get_translations(hass, connection, msg): )) hass.async_add_job(send_translations()) + + +def websocket_experimental_config(hass, connection, msg): + """Send experimental UI config over websocket config.""" + async def send_exp_config(): + """Send experimental frontend config.""" + config = await hass.async_add_job( + load_yaml, hass.config.path('experimental-ui.yaml')) + + connection.send_message_outside(websocket_api.result_message( + msg['id'], config + )) + + hass.async_add_job(send_exp_config()) diff --git a/tests/components/test_frontend.py b/tests/components/test_frontend.py index 2f118f24ef0..cb0c72e9edd 100644 --- a/tests/components/test_frontend.py +++ b/tests/components/test_frontend.py @@ -278,3 +278,22 @@ async def test_get_translations(hass, hass_ws_client): assert msg['type'] == wapi.TYPE_RESULT assert msg['success'] assert msg['result'] == {'resources': {'lang': 'nl'}} + + +async def test_experimental_ui(hass, hass_ws_client): + """Test experimental_ui command.""" + await async_setup_component(hass, 'frontend') + client = await hass_ws_client(hass) + + with patch('homeassistant.components.frontend.load_yaml', + return_value={'hello': 'world'}): + await client.send_json({ + 'id': 5, + 'type': 'frontend/experimental_ui', + }) + msg = await client.receive_json() + + assert msg['id'] == 5 + assert msg['type'] == wapi.TYPE_RESULT + assert msg['success'] + assert msg['result'] == {'hello': 'world'} -- GitLab