1
0
mirror of https://github.com/home-assistant/supervisor.git synced 2026-05-08 17:08:36 +01:00

Use schema validation as source for API defaults

Instead of using replace() simply set the API defaults in the API
schema.
This commit is contained in:
Stefan Agner
2024-09-04 19:11:28 +02:00
parent f72a49dfe0
commit 885506fd37
2 changed files with 20 additions and 28 deletions
+19 -27
View File
@@ -2,7 +2,6 @@
import asyncio
from collections.abc import Awaitable
from dataclasses import replace
from ipaddress import IPv4Address, IPv4Interface, IPv6Address, IPv6Interface
from typing import Any
@@ -58,28 +57,32 @@ from .utils import api_process, api_validate
_SCHEMA_IPV4_CONFIG = vol.Schema(
{
vol.Optional(ATTR_ADDRESS): [vol.Coerce(IPv4Interface)],
vol.Optional(ATTR_METHOD): vol.Coerce(InterfaceMethod),
vol.Optional(ATTR_GATEWAY): vol.Coerce(IPv4Address),
vol.Optional(ATTR_NAMESERVERS): [vol.Coerce(IPv4Address)],
vol.Optional(ATTR_ADDRESS, default=[]): [vol.Coerce(IPv4Interface)],
vol.Optional(ATTR_METHOD, default=InterfaceMethod.STATIC): vol.Coerce(
InterfaceMethod
),
vol.Optional(ATTR_GATEWAY, default=None): vol.Maybe(vol.Coerce(IPv4Address)),
vol.Optional(ATTR_NAMESERVERS, default=[]): [vol.Coerce(IPv4Address)],
}
)
_SCHEMA_IPV6_CONFIG = vol.Schema(
{
vol.Optional(ATTR_ADDRESS): [vol.Coerce(IPv6Interface)],
vol.Optional(ATTR_METHOD): vol.Coerce(InterfaceMethod),
vol.Optional(ATTR_GATEWAY): vol.Coerce(IPv6Address),
vol.Optional(ATTR_NAMESERVERS): [vol.Coerce(IPv6Address)],
vol.Optional(ATTR_ADDRESS, default=[]): [vol.Coerce(IPv6Interface)],
vol.Optional(ATTR_METHOD, default=InterfaceMethod.STATIC): vol.Coerce(
InterfaceMethod
),
vol.Optional(ATTR_GATEWAY, default=None): vol.Maybe(vol.Coerce(IPv6Address)),
vol.Optional(ATTR_NAMESERVERS, default=[]): [vol.Coerce(IPv6Address)],
}
)
_SCHEMA_WIFI_CONFIG = vol.Schema(
{
vol.Optional(ATTR_MODE): vol.Coerce(WifiMode),
vol.Optional(ATTR_AUTH): vol.Coerce(AuthMethod),
vol.Optional(ATTR_SSID): str,
vol.Optional(ATTR_PSK): str,
vol.Optional(ATTR_MODE, default=WifiMode.INFRASTRUCTURE): vol.Coerce(WifiMode),
vol.Optional(ATTR_AUTH, default=AuthMethod.OPEN): vol.Coerce(AuthMethod),
vol.Optional(ATTR_SSID, default=None): vol.Maybe(str),
vol.Optional(ATTR_PSK, default=None): vol.Maybe(str),
}
)
@@ -208,22 +211,11 @@ class APINetwork(CoreSysAttributes):
# Apply config
for key, config in body.items():
if key == ATTR_IPV4:
interface.ipv4setting = replace(
IpSetting(InterfaceMethod.STATIC, [], None, []),
**config,
)
interface.ipv4setting = IpSetting(**config)
elif key == ATTR_IPV6:
interface.ipv6setting = replace(
IpSetting(InterfaceMethod.STATIC, [], None, []),
**config,
)
interface.ipv6setting = IpSetting(**config)
elif key == ATTR_WIFI:
interface.wifi = replace(
WifiConfig(
WifiMode.INFRASTRUCTURE, "", AuthMethod.OPEN, None, None
),
**config,
)
interface.wifi = WifiConfig(**config, signal=None)
elif key == ATTR_ENABLED:
interface.enabled = config
+1 -1
View File
@@ -300,7 +300,7 @@ async def test_api_network_interface_update_invalid(api_client: TestClient):
result = await resp.json()
assert (
result["message"]
== "expected IPv4Address for dictionary value @ data['ipv4']['gateway']. Got 'invalid'"
== "not a valid value for dictionary value @ data['ipv4']['gateway']. Got 'invalid'"
)
resp = await api_client.post(