Use constants instead of literals for api (#105955)

This commit is contained in:
Jan-Philipp Benecke 2024-01-29 18:09:00 +01:00 committed by GitHub
parent b386960661
commit 0a0d4c37a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -13,7 +13,12 @@ import voluptuous as vol
from homeassistant.auth.models import User from homeassistant.auth.models import User
from homeassistant.auth.permissions.const import POLICY_READ from homeassistant.auth.permissions.const import POLICY_READ
from homeassistant.bootstrap import DATA_LOGGING from homeassistant.bootstrap import DATA_LOGGING
from homeassistant.components.http import HomeAssistantView, require_admin from homeassistant.components.http import (
KEY_HASS,
KEY_HASS_USER,
HomeAssistantView,
require_admin,
)
from homeassistant.const import ( from homeassistant.const import (
CONTENT_TYPE_JSON, CONTENT_TYPE_JSON,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
@ -112,7 +117,7 @@ class APICoreStateView(HomeAssistantView):
Home Assistant core is running. Its primary use case is for supervisor Home Assistant core is running. Its primary use case is for supervisor
to check if Home Assistant is running. to check if Home Assistant is running.
""" """
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
return self.json({"state": hass.state.value}) return self.json({"state": hass.state.value})
@ -125,7 +130,7 @@ class APIEventStream(HomeAssistantView):
@require_admin @require_admin
async def get(self, request: web.Request) -> web.StreamResponse: async def get(self, request: web.Request) -> web.StreamResponse:
"""Provide a streaming interface for the event bus.""" """Provide a streaming interface for the event bus."""
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
stop_obj = object() stop_obj = object()
to_write: asyncio.Queue[object | str] = asyncio.Queue() to_write: asyncio.Queue[object | str] = asyncio.Queue()
@ -192,7 +197,7 @@ class APIConfigView(HomeAssistantView):
@ha.callback @ha.callback
def get(self, request: web.Request) -> web.Response: def get(self, request: web.Request) -> web.Response:
"""Get current configuration.""" """Get current configuration."""
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
return self.json(hass.config.as_dict()) return self.json(hass.config.as_dict())
@ -205,8 +210,8 @@ class APIStatesView(HomeAssistantView):
@ha.callback @ha.callback
def get(self, request: web.Request) -> web.Response: def get(self, request: web.Request) -> web.Response:
"""Get current states.""" """Get current states."""
user: User = request["hass_user"] user: User = request[KEY_HASS_USER]
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
if user.is_admin: if user.is_admin:
states = (state.as_dict_json for state in hass.states.async_all()) states = (state.as_dict_json for state in hass.states.async_all())
else: else:
@ -234,8 +239,8 @@ class APIEntityStateView(HomeAssistantView):
@ha.callback @ha.callback
def get(self, request: web.Request, entity_id: str) -> web.Response: def get(self, request: web.Request, entity_id: str) -> web.Response:
"""Retrieve state of entity.""" """Retrieve state of entity."""
user: User = request["hass_user"] user: User = request[KEY_HASS_USER]
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
if not user.permissions.check_entity(entity_id, POLICY_READ): if not user.permissions.check_entity(entity_id, POLICY_READ):
raise Unauthorized(entity_id=entity_id) raise Unauthorized(entity_id=entity_id)
@ -248,10 +253,10 @@ class APIEntityStateView(HomeAssistantView):
async def post(self, request: web.Request, entity_id: str) -> web.Response: async def post(self, request: web.Request, entity_id: str) -> web.Response:
"""Update state of entity.""" """Update state of entity."""
user: User = request["hass_user"] user: User = request[KEY_HASS_USER]
if not user.is_admin: if not user.is_admin:
raise Unauthorized(entity_id=entity_id) raise Unauthorized(entity_id=entity_id)
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
try: try:
data = await request.json() data = await request.json()
except ValueError: except ValueError:
@ -289,9 +294,9 @@ class APIEntityStateView(HomeAssistantView):
@ha.callback @ha.callback
def delete(self, request: web.Request, entity_id: str) -> web.Response: def delete(self, request: web.Request, entity_id: str) -> web.Response:
"""Remove entity.""" """Remove entity."""
if not request["hass_user"].is_admin: if not request[KEY_HASS_USER].is_admin:
raise Unauthorized(entity_id=entity_id) raise Unauthorized(entity_id=entity_id)
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
if hass.states.async_remove(entity_id): if hass.states.async_remove(entity_id):
return self.json_message("Entity removed.") return self.json_message("Entity removed.")
return self.json_message("Entity not found.", HTTPStatus.NOT_FOUND) return self.json_message("Entity not found.", HTTPStatus.NOT_FOUND)
@ -306,7 +311,7 @@ class APIEventListenersView(HomeAssistantView):
@ha.callback @ha.callback
def get(self, request: web.Request) -> web.Response: def get(self, request: web.Request) -> web.Response:
"""Get event listeners.""" """Get event listeners."""
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
return self.json(async_events_json(hass)) return self.json(async_events_json(hass))
@ -341,7 +346,7 @@ class APIEventView(HomeAssistantView):
if state: if state:
event_data[key] = state event_data[key] = state
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
hass.bus.async_fire( hass.bus.async_fire(
event_type, event_data, ha.EventOrigin.remote, self.context(request) event_type, event_data, ha.EventOrigin.remote, self.context(request)
) )
@ -357,7 +362,7 @@ class APIServicesView(HomeAssistantView):
async def get(self, request: web.Request) -> web.Response: async def get(self, request: web.Request) -> web.Response:
"""Get registered services.""" """Get registered services."""
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
services = await async_services_json(hass) services = await async_services_json(hass)
return self.json(services) return self.json(services)
@ -375,7 +380,7 @@ class APIDomainServicesView(HomeAssistantView):
Returns a list of changed states. Returns a list of changed states.
""" """
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
body = await request.text() body = await request.text()
try: try:
data = json_loads(body) if body else None data = json_loads(body) if body else None
@ -428,7 +433,7 @@ class APIComponentsView(HomeAssistantView):
@ha.callback @ha.callback
def get(self, request: web.Request) -> web.Response: def get(self, request: web.Request) -> web.Response:
"""Get current loaded components.""" """Get current loaded components."""
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
return self.json(list(hass.config.components)) return self.json(list(hass.config.components))
@ -449,7 +454,7 @@ class APITemplateView(HomeAssistantView):
"""Render a template.""" """Render a template."""
try: try:
data = await request.json() data = await request.json()
tpl = _cached_template(data["template"], request.app["hass"]) tpl = _cached_template(data["template"], request.app[KEY_HASS])
return tpl.async_render(variables=data.get("variables"), parse_result=False) # type: ignore[no-any-return] return tpl.async_render(variables=data.get("variables"), parse_result=False) # type: ignore[no-any-return]
except (ValueError, TemplateError) as ex: except (ValueError, TemplateError) as ex:
return self.json_message( return self.json_message(
@ -466,7 +471,7 @@ class APIErrorLog(HomeAssistantView):
@require_admin @require_admin
async def get(self, request: web.Request) -> web.FileResponse: async def get(self, request: web.Request) -> web.FileResponse:
"""Retrieve API error log.""" """Retrieve API error log."""
hass: HomeAssistant = request.app["hass"] hass: HomeAssistant = request.app[KEY_HASS]
return web.FileResponse(hass.data[DATA_LOGGING]) return web.FileResponse(hass.data[DATA_LOGGING])