diff --git a/homeassistant/components/api.py b/homeassistant/components/api.py index 11f1826549e..aa57d1f57f7 100644 --- a/homeassistant/components/api.py +++ b/homeassistant/components/api.py @@ -20,7 +20,7 @@ from homeassistant.bootstrap import ERROR_LOG_FILENAME from homeassistant.const import ( URL_API, URL_API_STATES, URL_API_EVENTS, URL_API_SERVICES, URL_API_STREAM, URL_API_EVENT_FORWARD, URL_API_STATES_ENTITY, URL_API_COMPONENTS, - URL_API_CONFIG, URL_API_BOOTSTRAP, URL_API_ERROR_LOG, URL_API_LOG_OUT, + URL_API_CONFIG, URL_API_ERROR_LOG, URL_API_LOG_OUT, URL_API_TEMPLATE, EVENT_TIME_CHANGED, EVENT_HOMEASSISTANT_STOP, MATCH_ALL, HTTP_OK, HTTP_CREATED, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_UNPROCESSABLE_ENTITY, HTTP_HEADER_CONTENT_TYPE, @@ -48,10 +48,6 @@ def setup(hass, config): # /api/config hass.http.register_path('GET', URL_API_CONFIG, _handle_get_api_config) - # /api/bootstrap - hass.http.register_path( - 'GET', URL_API_BOOTSTRAP, _handle_get_api_bootstrap) - # /states hass.http.register_path('GET', URL_API_STATES, _handle_get_api_states) hass.http.register_path( @@ -180,18 +176,6 @@ def _handle_get_api_config(handler, path_match, data): handler.write_json(handler.server.hass.config.as_dict()) -def _handle_get_api_bootstrap(handler, path_match, data): - """ Returns all data needed to bootstrap Home Assistant. """ - hass = handler.server.hass - - handler.write_json({ - 'config': hass.config.as_dict(), - 'states': hass.states.all(), - 'events': _events_json(hass), - 'services': _services_json(hass), - }) - - def _handle_get_api_states(handler, path_match, data): """ Returns a dict containing all entity ids and their state. """ handler.write_json(handler.server.hass.states.all()) @@ -242,7 +226,7 @@ def _handle_post_state_entity(handler, path_match, data): def _handle_get_api_events(handler, path_match, data): """ Handles getting overview of event listeners. """ - handler.write_json(_events_json(handler.server.hass)) + handler.write_json(events_json(handler.server.hass)) def _handle_api_post_events_event(handler, path_match, event_data): @@ -277,7 +261,7 @@ def _handle_api_post_events_event(handler, path_match, event_data): def _handle_get_api_services(handler, path_match, data): """ Handles getting overview of services. """ - handler.write_json(_services_json(handler.server.hass)) + handler.write_json(services_json(handler.server.hass)) # pylint: disable=invalid-name @@ -390,13 +374,13 @@ def _handle_post_api_template(handler, path_match, data): return -def _services_json(hass): +def services_json(hass): """ Generate services data to JSONify. """ return [{"domain": key, "services": value} for key, value in hass.services.services.items()] -def _events_json(hass): +def events_json(hass): """ Generate event data to JSONify. """ return [{"event": key, "listener_count": value} for key, value in hass.bus.listeners.items()] diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index 06438c02140..b5e6fffb3d9 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -11,6 +11,7 @@ import logging from . import version, mdi_version import homeassistant.util as util from homeassistant.const import URL_ROOT, HTTP_OK +from homeassistant.components import api DOMAIN = 'frontend' DEPENDENCIES = ['api'] @@ -25,21 +26,23 @@ FRONTEND_URLS = [ re.compile(r'/states(/([a-zA-Z\._\-0-9/]+)|)'), ] +URL_API_BOOTSTRAP = "/api/bootstrap" + _FINGERPRINT = re.compile(r'^(\w+)-[a-z0-9]{32}\.(\w+)$', re.IGNORECASE) def setup(hass, config): """ Setup serving the frontend. """ - if 'http' not in hass.config.components: - _LOGGER.error('Dependency http is not loaded') - return False - for url in FRONTEND_URLS: hass.http.register_path('GET', url, _handle_get_root, False) hass.http.register_path('GET', '/service_worker.js', _handle_get_service_worker, False) + # Bootstrap API + hass.http.register_path( + 'GET', URL_API_BOOTSTRAP, _handle_get_api_bootstrap) + # Static files hass.http.register_path( 'GET', re.compile(r'/static/(?P[a-zA-Z\._\-0-9/]+)'), @@ -54,6 +57,18 @@ def setup(hass, config): return True +def _handle_get_api_bootstrap(handler, path_match, data): + """ Returns all data needed to bootstrap Home Assistant. """ + hass = handler.server.hass + + handler.write_json({ + 'config': hass.config.as_dict(), + 'states': hass.states.all(), + 'events': api.events_json(hass), + 'services': api.services_json(hass), + }) + + def _handle_get_root(handler, path_match, data): """ Renders the frontend. """ handler.send_response(HTTP_OK) diff --git a/homeassistant/const.py b/homeassistant/const.py index 084f269e036..0887db12785 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -173,7 +173,6 @@ URL_API_SERVICES = "/api/services" URL_API_SERVICES_SERVICE = "/api/services/{}/{}" URL_API_EVENT_FORWARD = "/api/event_forwarding" URL_API_COMPONENTS = "/api/components" -URL_API_BOOTSTRAP = "/api/bootstrap" URL_API_ERROR_LOG = "/api/error_log" URL_API_LOG_OUT = "/api/log_out" URL_API_TEMPLATE = "/api/template"