mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-08 17:56:33 +00:00
Remove static-only fields when method is auto (#3810)
This commit is contained in:
parent
cbddca2658
commit
c7f7fbd41a
@ -34,15 +34,32 @@ ATTR_AUTH_ALG = "auth-alg"
|
||||
ATTR_KEY_MGMT = "key-mgmt"
|
||||
ATTR_INTERFACE_NAME = "interface-name"
|
||||
|
||||
IPV4_6_IGNORE_FIELDS = [
|
||||
"addresses",
|
||||
"address-data",
|
||||
"dns",
|
||||
"gateway",
|
||||
"method",
|
||||
]
|
||||
|
||||
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _merge_settings_attribute(
|
||||
base_settings: Any, new_settings: Any, attribute: str
|
||||
base_settings: Any,
|
||||
new_settings: Any,
|
||||
attribute: str,
|
||||
*,
|
||||
ignore_current_value: list[str] = None,
|
||||
) -> None:
|
||||
"""Merge settings attribute if present."""
|
||||
if attribute in new_settings:
|
||||
if attribute in base_settings:
|
||||
if ignore_current_value:
|
||||
for field in ignore_current_value:
|
||||
if field in base_settings[attribute]:
|
||||
del base_settings[attribute][field]
|
||||
|
||||
base_settings[attribute].update(new_settings[attribute])
|
||||
else:
|
||||
base_settings[attribute] = new_settings[attribute]
|
||||
@ -121,13 +138,18 @@ class NetworkSetting(DBusInterfaceProxy):
|
||||
new_settings, settings, CONF_ATTR_802_WIRELESS_SECURITY
|
||||
)
|
||||
_merge_settings_attribute(new_settings, settings, CONF_ATTR_VLAN)
|
||||
_merge_settings_attribute(new_settings, settings, CONF_ATTR_IPV4)
|
||||
if "addresses" in new_settings[CONF_ATTR_IPV4]:
|
||||
del new_settings[CONF_ATTR_IPV4]["addresses"]
|
||||
|
||||
_merge_settings_attribute(new_settings, settings, CONF_ATTR_IPV6)
|
||||
if "addresses" in new_settings[CONF_ATTR_IPV6]:
|
||||
del new_settings[CONF_ATTR_IPV6]["addresses"]
|
||||
_merge_settings_attribute(
|
||||
new_settings,
|
||||
settings,
|
||||
CONF_ATTR_IPV4,
|
||||
ignore_current_value=IPV4_6_IGNORE_FIELDS,
|
||||
)
|
||||
_merge_settings_attribute(
|
||||
new_settings,
|
||||
settings,
|
||||
CONF_ATTR_IPV6,
|
||||
ignore_current_value=IPV4_6_IGNORE_FIELDS,
|
||||
)
|
||||
|
||||
return await self.dbus.Settings.Connection.Update(("a{sa{sv}}", new_settings))
|
||||
|
||||
|
@ -90,14 +90,10 @@ async def mock_call_dbus_get_settings_signature(
|
||||
assert settings["connection"]["autoconnect"] == Variant("b", True)
|
||||
|
||||
assert "ipv4" in settings
|
||||
assert settings["ipv4"]["gateway"] == Variant("s", "192.168.2.1")
|
||||
assert settings["ipv4"]["method"] == Variant("s", "auto")
|
||||
assert settings["ipv4"]["dns"] == Variant("au", [16951488])
|
||||
assert len(settings["ipv4"]["address-data"].value) == 1
|
||||
assert settings["ipv4"]["address-data"].value[0]["address"] == Variant(
|
||||
"s", "192.168.2.148"
|
||||
)
|
||||
assert settings["ipv4"]["address-data"].value[0]["prefix"] == Variant("u", 24)
|
||||
assert "gateway" not in settings["ipv4"]
|
||||
assert "dns" not in settings["ipv4"]
|
||||
assert "address-data" not in settings["ipv4"]
|
||||
assert "addresses" not in settings["ipv4"]
|
||||
assert len(settings["ipv4"]["route-data"].value) == 1
|
||||
assert settings["ipv4"]["route-data"].value[0]["dest"] == Variant(
|
||||
@ -113,8 +109,11 @@ async def mock_call_dbus_get_settings_signature(
|
||||
|
||||
assert "ipv6" in settings
|
||||
assert settings["ipv6"]["method"] == Variant("s", "auto")
|
||||
assert settings["ipv6"]["addr-gen-mode"] == Variant("i", 0)
|
||||
assert "gateway" not in settings["ipv6"]
|
||||
assert "dns" not in settings["ipv6"]
|
||||
assert "address-data" not in settings["ipv6"]
|
||||
assert "addresses" not in settings["ipv6"]
|
||||
assert settings["ipv6"]["addr-gen-mode"] == Variant("i", 0)
|
||||
|
||||
assert "proxy" in settings
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user