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_KEY_MGMT = "key-mgmt"
ATTR_INTERFACE_NAME = "interface-name" ATTR_INTERFACE_NAME = "interface-name"
IPV4_6_IGNORE_FIELDS = [
"addresses",
"address-data",
"dns",
"gateway",
"method",
]
_LOGGER: logging.Logger = logging.getLogger(__name__) _LOGGER: logging.Logger = logging.getLogger(__name__)
def _merge_settings_attribute( 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: ) -> None:
"""Merge settings attribute if present.""" """Merge settings attribute if present."""
if attribute in new_settings: if attribute in new_settings:
if attribute in base_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]) base_settings[attribute].update(new_settings[attribute])
else: else:
base_settings[attribute] = new_settings[attribute] base_settings[attribute] = new_settings[attribute]
@ -121,13 +138,18 @@ class NetworkSetting(DBusInterfaceProxy):
new_settings, settings, CONF_ATTR_802_WIRELESS_SECURITY 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_VLAN)
_merge_settings_attribute(new_settings, settings, CONF_ATTR_IPV4) _merge_settings_attribute(
if "addresses" in new_settings[CONF_ATTR_IPV4]: new_settings,
del new_settings[CONF_ATTR_IPV4]["addresses"] settings,
CONF_ATTR_IPV4,
_merge_settings_attribute(new_settings, settings, CONF_ATTR_IPV6) ignore_current_value=IPV4_6_IGNORE_FIELDS,
if "addresses" in new_settings[CONF_ATTR_IPV6]: )
del new_settings[CONF_ATTR_IPV6]["addresses"] _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)) 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 settings["connection"]["autoconnect"] == Variant("b", True)
assert "ipv4" in settings assert "ipv4" in settings
assert settings["ipv4"]["gateway"] == Variant("s", "192.168.2.1")
assert settings["ipv4"]["method"] == Variant("s", "auto") assert settings["ipv4"]["method"] == Variant("s", "auto")
assert settings["ipv4"]["dns"] == Variant("au", [16951488]) assert "gateway" not in settings["ipv4"]
assert len(settings["ipv4"]["address-data"].value) == 1 assert "dns" not in settings["ipv4"]
assert settings["ipv4"]["address-data"].value[0]["address"] == Variant( assert "address-data" not in settings["ipv4"]
"s", "192.168.2.148"
)
assert settings["ipv4"]["address-data"].value[0]["prefix"] == Variant("u", 24)
assert "addresses" not in settings["ipv4"] assert "addresses" not in settings["ipv4"]
assert len(settings["ipv4"]["route-data"].value) == 1 assert len(settings["ipv4"]["route-data"].value) == 1
assert settings["ipv4"]["route-data"].value[0]["dest"] == Variant( 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 "ipv6" in settings
assert settings["ipv6"]["method"] == Variant("s", "auto") 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 "addresses" not in settings["ipv6"]
assert settings["ipv6"]["addr-gen-mode"] == Variant("i", 0)
assert "proxy" in settings assert "proxy" in settings