Remove static-only fields when method is auto (#3810)

This commit is contained in:
Mike Degatano 2022-08-23 07:56:14 -04:00 committed by GitHub
parent cbddca2658
commit c7f7fbd41a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 16 deletions

View File

@ -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))

View File

@ -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