Move bootstrap endpoint from api to frontend
This commit is contained in:
parent
39bbfd14d9
commit
cafa4043b3
3 changed files with 24 additions and 26 deletions
|
@ -20,7 +20,7 @@ from homeassistant.bootstrap import ERROR_LOG_FILENAME
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
URL_API, URL_API_STATES, URL_API_EVENTS, URL_API_SERVICES, URL_API_STREAM,
|
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_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,
|
URL_API_TEMPLATE, EVENT_TIME_CHANGED, EVENT_HOMEASSISTANT_STOP, MATCH_ALL,
|
||||||
HTTP_OK, HTTP_CREATED, HTTP_BAD_REQUEST, HTTP_NOT_FOUND,
|
HTTP_OK, HTTP_CREATED, HTTP_BAD_REQUEST, HTTP_NOT_FOUND,
|
||||||
HTTP_UNPROCESSABLE_ENTITY, HTTP_HEADER_CONTENT_TYPE,
|
HTTP_UNPROCESSABLE_ENTITY, HTTP_HEADER_CONTENT_TYPE,
|
||||||
|
@ -48,10 +48,6 @@ def setup(hass, config):
|
||||||
# /api/config
|
# /api/config
|
||||||
hass.http.register_path('GET', URL_API_CONFIG, _handle_get_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
|
# /states
|
||||||
hass.http.register_path('GET', URL_API_STATES, _handle_get_api_states)
|
hass.http.register_path('GET', URL_API_STATES, _handle_get_api_states)
|
||||||
hass.http.register_path(
|
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())
|
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):
|
def _handle_get_api_states(handler, path_match, data):
|
||||||
""" Returns a dict containing all entity ids and their state. """
|
""" Returns a dict containing all entity ids and their state. """
|
||||||
handler.write_json(handler.server.hass.states.all())
|
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):
|
def _handle_get_api_events(handler, path_match, data):
|
||||||
""" Handles getting overview of event listeners. """
|
""" 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):
|
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):
|
def _handle_get_api_services(handler, path_match, data):
|
||||||
""" Handles getting overview of services. """
|
""" 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
|
# pylint: disable=invalid-name
|
||||||
|
@ -390,13 +374,13 @@ def _handle_post_api_template(handler, path_match, data):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def _services_json(hass):
|
def services_json(hass):
|
||||||
""" Generate services data to JSONify. """
|
""" Generate services data to JSONify. """
|
||||||
return [{"domain": key, "services": value}
|
return [{"domain": key, "services": value}
|
||||||
for key, value in hass.services.services.items()]
|
for key, value in hass.services.services.items()]
|
||||||
|
|
||||||
|
|
||||||
def _events_json(hass):
|
def events_json(hass):
|
||||||
""" Generate event data to JSONify. """
|
""" Generate event data to JSONify. """
|
||||||
return [{"event": key, "listener_count": value}
|
return [{"event": key, "listener_count": value}
|
||||||
for key, value in hass.bus.listeners.items()]
|
for key, value in hass.bus.listeners.items()]
|
||||||
|
|
|
@ -11,6 +11,7 @@ import logging
|
||||||
from . import version, mdi_version
|
from . import version, mdi_version
|
||||||
import homeassistant.util as util
|
import homeassistant.util as util
|
||||||
from homeassistant.const import URL_ROOT, HTTP_OK
|
from homeassistant.const import URL_ROOT, HTTP_OK
|
||||||
|
from homeassistant.components import api
|
||||||
|
|
||||||
DOMAIN = 'frontend'
|
DOMAIN = 'frontend'
|
||||||
DEPENDENCIES = ['api']
|
DEPENDENCIES = ['api']
|
||||||
|
@ -25,21 +26,23 @@ FRONTEND_URLS = [
|
||||||
re.compile(r'/states(/([a-zA-Z\._\-0-9/]+)|)'),
|
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)
|
_FINGERPRINT = re.compile(r'^(\w+)-[a-z0-9]{32}\.(\w+)$', re.IGNORECASE)
|
||||||
|
|
||||||
|
|
||||||
def setup(hass, config):
|
def setup(hass, config):
|
||||||
""" Setup serving the frontend. """
|
""" 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:
|
for url in FRONTEND_URLS:
|
||||||
hass.http.register_path('GET', url, _handle_get_root, False)
|
hass.http.register_path('GET', url, _handle_get_root, False)
|
||||||
|
|
||||||
hass.http.register_path('GET', '/service_worker.js',
|
hass.http.register_path('GET', '/service_worker.js',
|
||||||
_handle_get_service_worker, False)
|
_handle_get_service_worker, False)
|
||||||
|
|
||||||
|
# Bootstrap API
|
||||||
|
hass.http.register_path(
|
||||||
|
'GET', URL_API_BOOTSTRAP, _handle_get_api_bootstrap)
|
||||||
|
|
||||||
# Static files
|
# Static files
|
||||||
hass.http.register_path(
|
hass.http.register_path(
|
||||||
'GET', re.compile(r'/static/(?P<file>[a-zA-Z\._\-0-9/]+)'),
|
'GET', re.compile(r'/static/(?P<file>[a-zA-Z\._\-0-9/]+)'),
|
||||||
|
@ -54,6 +57,18 @@ def setup(hass, config):
|
||||||
return True
|
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):
|
def _handle_get_root(handler, path_match, data):
|
||||||
""" Renders the frontend. """
|
""" Renders the frontend. """
|
||||||
handler.send_response(HTTP_OK)
|
handler.send_response(HTTP_OK)
|
||||||
|
|
|
@ -173,7 +173,6 @@ URL_API_SERVICES = "/api/services"
|
||||||
URL_API_SERVICES_SERVICE = "/api/services/{}/{}"
|
URL_API_SERVICES_SERVICE = "/api/services/{}/{}"
|
||||||
URL_API_EVENT_FORWARD = "/api/event_forwarding"
|
URL_API_EVENT_FORWARD = "/api/event_forwarding"
|
||||||
URL_API_COMPONENTS = "/api/components"
|
URL_API_COMPONENTS = "/api/components"
|
||||||
URL_API_BOOTSTRAP = "/api/bootstrap"
|
|
||||||
URL_API_ERROR_LOG = "/api/error_log"
|
URL_API_ERROR_LOG = "/api/error_log"
|
||||||
URL_API_LOG_OUT = "/api/log_out"
|
URL_API_LOG_OUT = "/api/log_out"
|
||||||
URL_API_TEMPLATE = "/api/template"
|
URL_API_TEMPLATE = "/api/template"
|
||||||
|
|
Loading…
Add table
Reference in a new issue