mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Expose more Websocket API constants (#42263)
This commit is contained in:
parent
c157a582b8
commit
de12ac354a
@ -6,7 +6,31 @@ import voluptuous as vol
|
|||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.loader import bind_hass
|
from homeassistant.loader import bind_hass
|
||||||
|
|
||||||
from . import commands, connection, const, decorators, http, messages
|
from . import commands, connection, const, decorators, http, messages # noqa
|
||||||
|
from .connection import ActiveConnection # noqa
|
||||||
|
from .const import ( # noqa
|
||||||
|
ERR_HOME_ASSISTANT_ERROR,
|
||||||
|
ERR_INVALID_FORMAT,
|
||||||
|
ERR_NOT_FOUND,
|
||||||
|
ERR_NOT_SUPPORTED,
|
||||||
|
ERR_TEMPLATE_ERROR,
|
||||||
|
ERR_TIMEOUT,
|
||||||
|
ERR_UNAUTHORIZED,
|
||||||
|
ERR_UNKNOWN_COMMAND,
|
||||||
|
ERR_UNKNOWN_ERROR,
|
||||||
|
)
|
||||||
|
from .decorators import ( # noqa
|
||||||
|
async_response,
|
||||||
|
require_admin,
|
||||||
|
websocket_command,
|
||||||
|
ws_require_user,
|
||||||
|
)
|
||||||
|
from .messages import ( # noqa
|
||||||
|
BASE_COMMAND_MESSAGE_SCHEMA,
|
||||||
|
error_message,
|
||||||
|
event_message,
|
||||||
|
result_message,
|
||||||
|
)
|
||||||
|
|
||||||
# mypy: allow-untyped-calls, allow-untyped-defs
|
# mypy: allow-untyped-calls, allow-untyped-defs
|
||||||
|
|
||||||
@ -14,17 +38,6 @@ DOMAIN = const.DOMAIN
|
|||||||
|
|
||||||
DEPENDENCIES = ("http",)
|
DEPENDENCIES = ("http",)
|
||||||
|
|
||||||
# Backwards compat / Make it easier to integrate
|
|
||||||
ActiveConnection = connection.ActiveConnection
|
|
||||||
BASE_COMMAND_MESSAGE_SCHEMA = messages.BASE_COMMAND_MESSAGE_SCHEMA
|
|
||||||
error_message = messages.error_message
|
|
||||||
result_message = messages.result_message
|
|
||||||
event_message = messages.event_message
|
|
||||||
async_response = decorators.async_response
|
|
||||||
require_admin = decorators.require_admin
|
|
||||||
ws_require_user = decorators.ws_require_user
|
|
||||||
websocket_command = decorators.websocket_command
|
|
||||||
|
|
||||||
|
|
||||||
@bind_hass
|
@bind_hass
|
||||||
@callback
|
@callback
|
||||||
|
@ -5,7 +5,7 @@ from typing import Any, Callable, Dict, Hashable, Optional
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.core import Context, callback
|
from homeassistant.core import Context, callback
|
||||||
from homeassistant.exceptions import Unauthorized
|
from homeassistant.exceptions import HomeAssistantError, Unauthorized
|
||||||
|
|
||||||
from . import const, messages
|
from . import const, messages
|
||||||
|
|
||||||
@ -118,6 +118,9 @@ class ActiveConnection:
|
|||||||
elif isinstance(err, asyncio.TimeoutError):
|
elif isinstance(err, asyncio.TimeoutError):
|
||||||
code = const.ERR_TIMEOUT
|
code = const.ERR_TIMEOUT
|
||||||
err_message = "Timeout"
|
err_message = "Timeout"
|
||||||
|
elif isinstance(err, HomeAssistantError):
|
||||||
|
code = const.ERR_UNKNOWN_ERROR
|
||||||
|
err_message = str(err)
|
||||||
else:
|
else:
|
||||||
code = const.ERR_UNKNOWN_ERROR
|
code = const.ERR_UNKNOWN_ERROR
|
||||||
err_message = "Unknown error"
|
err_message = "Unknown error"
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
"""Test WebSocket Connection class."""
|
"""Test WebSocket Connection class."""
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant import exceptions
|
||||||
from homeassistant.components import websocket_api
|
from homeassistant.components import websocket_api
|
||||||
from homeassistant.components.websocket_api import const
|
from homeassistant.components.websocket_api import const
|
||||||
|
|
||||||
@ -20,3 +26,32 @@ async def test_send_big_result(hass, websocket_client):
|
|||||||
assert msg["type"] == const.TYPE_RESULT
|
assert msg["type"] == const.TYPE_RESULT
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == {"big": "result"}
|
assert msg["result"] == {"big": "result"}
|
||||||
|
|
||||||
|
|
||||||
|
async def test_exception_handling():
|
||||||
|
"""Test handling of exceptions."""
|
||||||
|
send_messages = []
|
||||||
|
conn = websocket_api.ActiveConnection(
|
||||||
|
logging.getLogger(__name__), None, send_messages.append, None, None
|
||||||
|
)
|
||||||
|
|
||||||
|
for (exc, code, err) in (
|
||||||
|
(exceptions.Unauthorized(), websocket_api.ERR_UNAUTHORIZED, "Unauthorized"),
|
||||||
|
(
|
||||||
|
vol.Invalid("Invalid something"),
|
||||||
|
websocket_api.ERR_INVALID_FORMAT,
|
||||||
|
"Invalid something. Got {'id': 5}",
|
||||||
|
),
|
||||||
|
(asyncio.TimeoutError(), websocket_api.ERR_TIMEOUT, "Timeout"),
|
||||||
|
(
|
||||||
|
exceptions.HomeAssistantError("Failed to do X"),
|
||||||
|
websocket_api.ERR_UNKNOWN_ERROR,
|
||||||
|
"Failed to do X",
|
||||||
|
),
|
||||||
|
(ValueError("Really bad"), websocket_api.ERR_UNKNOWN_ERROR, "Unknown error"),
|
||||||
|
):
|
||||||
|
send_messages.clear()
|
||||||
|
conn.async_handle_exception({"id": 5}, exc)
|
||||||
|
assert len(send_messages) == 1
|
||||||
|
assert send_messages[0]["error"]["code"] == code
|
||||||
|
assert send_messages[0]["error"]["message"] == err
|
||||||
|
Loading…
x
Reference in New Issue
Block a user