-
- # set the location
- location_elems = node_elem.xpath(SFAv1Node.elements['location'].path, xml.namespaces)
- if len(location_elems) > 0:
- node['location'] = Location(location_elems[0].attrib, location_elems[0])
-
- # set the bwlimit
- bwlimit_elems = node_elem.xpath(SFAv1Node.elements['bw_limit'].path, xml.namespaces)
- if len(bwlimit_elems) > 0:
- bwlimit = BWlimit(bwlimit_elems[0].attrib, bwlimit_elems[0])
- node['bwlimit'] = bwlimit
-
- # set the interfaces
- interface_elems = node_elem.xpath(SFAv1Node.elements['interface'].path, xml.namespaces)
- node['interfaces'] = []
- for interface_elem in interface_elems:
- node['interfaces'].append(Interface(interface_elem.attrib, interface_elem))
-
- # set the slivers
- sliver_elems = node_elem.xpath(SFAv1Node.elements['sliver'].path, xml.namespaces)
- node['slivers'] = []
- for sliver_elem in sliver_elems:
- node['slivers'].append(Sliver(sliver_elem.attrib, sliver_elem))
-
- # set tags
- node['tags'] = []
- for child in node_elem.iterchildren():
- if child.tag not in SFAv1Node.elements:
- tag = PLTag({'name': child.tag, 'value': child.text}, child)
- node['tags'].append(tag)
+ location_objs = Element.get_elements(node_elem, './default:location | ./location', Location)
+ if len(location_objs) > 0:
+ node['location'] = location_objs[0]
+ bwlimit_objs = Element.get_elements(node_elem, './default:bw_limit | ./bw_limit', BWlimit)
+ if len(bwlimit_objs) > 0:
+ node['bwlimit'] = bwlimit_objs[0]
+ node['interfaces'] = Element.get_elements(node_elem, './default:interface | ./interface', Interface)
+ node['services'] = PGv2Services.get_services(node_elem)
+ node['slivers'] = SFAv1Sliver.get_slivers(node_elem)
+ node['tags'] = SFAv1PLTag.get_pl_tags(node_elem, ignore=Node.fields.keys())