Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions netjsonconfig/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ def merge_config(template, config, list_identifiers=None):
"""
result = deepcopy(template)
for key, value in config.items():
if isinstance(value, dict):
node = result.get(key, OrderedDict())
result[key] = merge_config(node, value)
if isinstance(value, dict) and isinstance(result.get(key), dict):
result[key] = merge_config(result.get(key), value, list_identifiers)
elif isinstance(value, list) and isinstance(result.get(key), list):
result[key] = merge_list(result[key], value, list_identifiers)
else:
Expand Down
25 changes: 25 additions & 0 deletions tests/openwrt/test_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,3 +245,28 @@ def test_render_invalid_uci_name(self):
option lan '0.0.0.0/24 domain=1'
""")
self.assertEqual(o.render(), expected)

def test_merge_invalid_format(self):
invalid = {
"dhcp": {
"lan": {
"interface": "lan",
"start": 100,
"limit": 150,
"leasetime": "12h",
}
}
}
valid = {
"dhcp": [
{
"dhcpv6": "disabled",
"ignore": True,
"ra": "disabled",
"config_value": "lan",
"config_name": "dhcp",
}
]
}
o = OpenWrt({}, templates=[valid, invalid])
o.validate()
Comment thread
stktyagi marked this conversation as resolved.
Outdated