Skip to content
This repository has been archived by the owner on May 15, 2019. It is now read-only.

Commit

Permalink
Merge branch 'tcaiazza-to_dict' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
dbarrosop committed May 12, 2018
1 parent e981fd7 commit 3d4e600
Show file tree
Hide file tree
Showing 3 changed files with 172 additions and 1 deletion.
7 changes: 6 additions & 1 deletion napalm_yang/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ def _load_model(self, model):
if model in v:
self.add_model(getattr(models, k.replace("-", "_")))
return

else:
raise ValueError("Couldn't find model {}".format(model))

Expand Down Expand Up @@ -157,6 +158,7 @@ def load_dict(self, data, overwrite=False, auto_load_model=True):
for k, v in data.items():
if k not in self._elements.keys() and not auto_load_model:
raise AttributeError("Model {} is not loaded".format(k))

elif k not in self._elements.keys() and auto_load_model:
self._load_model(k)

Expand Down Expand Up @@ -384,7 +386,10 @@ def _to_dict_leaf(element, filter):
value = None
if element._changed() or not filter:
try:
value = ast.literal_eval(element.__repr__())
if hasattr(element, "_list"):
value = element._list
else:
value = ast.literal_eval(element.__repr__())
except Exception:
value = element.__repr__()

Expand Down
79 changes: 79 additions & 0 deletions test/unit/test_to_dict.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import json
import os

import napalm_yang


BASE_PATH = os.path.join(os.path.dirname(__file__), "test_to_dict")


class Tests(object):

def test_to_dict(self):
root = napalm_yang.base.Root()
root.add_model(napalm_yang.models.openconfig_interfaces)
with open(os.path.join(BASE_PATH, "data.json"), "r") as f:
root.load_dict(json.load(f))

assert (
root.to_dict()
== {
"interfaces": {
"interface": {
"Ethernet1": {
"name": "Ethernet1",
"config": {"type": "ethernetCsmacd", "enabled": True},
"ethernet": {
"switched_vlan": {
"config": {
"interface_mode": "TRUNK",
"native_vlan": 30,
"access_vlan": 1,
"trunk_vlans": ["20..22", 40],
}
}
},
"routed_vlan": {"ipv4": {"config": {"enabled": False}}},
},
"Ethernet2": {
"name": "Ethernet2",
"config": {"type": "ethernetCsmacd", "enabled": True},
"ethernet": {
"switched_vlan": {
"config": {
"interface_mode": "ACCESS",
"native_vlan": 1,
"access_vlan": 30,
"trunk_vlans": ["1..4094"],
}
}
},
"routed_vlan": {"ipv4": {"config": {"enabled": False}}},
},
"Management1": {
"name": "Management1",
"config": {
"type": "ethernetCsmacd", "mtu": 1500, "enabled": True
},
"routed_vlan": {
"ipv4": {
"addresses": {
"address": {
"10.0.2.15": {
"ip": "10.0.2.15",
"config": {
"ip": "10.0.2.15",
"prefix_length": 24,
"secondary": False,
},
}
}
},
"config": {"enabled": True},
}
},
},
}
}
}
)
87 changes: 87 additions & 0 deletions test/unit/test_to_dict/data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"interfaces": {
"interface": {
"Ethernet1": {
"config": {
"enabled": true,
"type": "ethernetCsmacd"
},
"ethernet": {
"switched-vlan": {
"config": {
"access-vlan": 1,
"interface-mode": "TRUNK",
"native-vlan": 30,
"trunk-vlans": [
"20..22",
40
]
}
}
},
"name": "Ethernet1",
"routed-vlan": {
"ipv4": {
"config": {
"enabled": false
}
}
}
},
"Ethernet2": {
"config": {
"enabled": true,
"type": "ethernetCsmacd"
},
"ethernet": {
"switched-vlan": {
"config": {
"access-vlan": 30,
"interface-mode": "ACCESS",
"native-vlan": 1,
"trunk-vlans": [
"1..4094"
]
}
}
},
"name": "Ethernet2",
"routed-vlan": {
"ipv4": {
"config": {
"enabled": false
}
}
}
},
"Management1": {
"config": {
"enabled": true,
"mtu": 1500,
"type": "ethernetCsmacd"
},
"name": "Management1",
"routed-vlan": {
"ipv4": {
"addresses": {
"address": {
"10.0.2.15": {
"config": {
"ip": "10.0.2.15",
"prefix-length": 24,
"secondary": false
},
"ip": "10.0.2.15"
}
}
},
"config": {
"enabled": true
}
}
}
}
}
}
}

0 comments on commit 3d4e600

Please sign in to comment.