worked through a couple todos, removed usage of eval within parsing xml files
This commit is contained in:
parent
e4b280196b
commit
8612c73d49
8 changed files with 76 additions and 58 deletions
|
@ -71,20 +71,20 @@ class CoreDocumentParser0(object):
|
|||
"""
|
||||
Helper to return tuple of attributes common to nodes and nets.
|
||||
"""
|
||||
id = int(obj.getAttribute("id"))
|
||||
node_id = int(obj.getAttribute("id"))
|
||||
name = str(obj.getAttribute("name"))
|
||||
type = str(obj.getAttribute("type"))
|
||||
return id, name, type
|
||||
node_type = str(obj.getAttribute("type"))
|
||||
return node_id, name, node_type
|
||||
|
||||
def parsenets(self):
|
||||
linkednets = []
|
||||
for net in self.np.getElementsByTagName("NetworkDefinition"):
|
||||
id, name, type = self.getcommonattributes(net)
|
||||
nodecls = xmlutils.xml_type_to_node_class(self.session, type)
|
||||
node_id, name, node_type = self.getcommonattributes(net)
|
||||
nodecls = xmlutils.xml_type_to_node_class(node_type)
|
||||
if not nodecls:
|
||||
logger.warn("skipping unknown network node '%s' type '%s'", name, type)
|
||||
logger.warn("skipping unknown network node '%s' type '%s'", name, node_type)
|
||||
continue
|
||||
n = self.session.add_object(cls=nodecls, objid=id, name=name, start=self.start)
|
||||
n = self.session.add_object(cls=nodecls, objid=node_id, name=name, start=self.start)
|
||||
if name in self.coords:
|
||||
x, y, z = self.coords[name]
|
||||
n.setposition(x, y, z)
|
||||
|
|
|
@ -151,7 +151,7 @@ class CoreDocumentParser1(object):
|
|||
return nodeutils.get_node_class(NodeTypes.EMANE)
|
||||
else:
|
||||
logger.warn('unknown network type: \'%s\'', coretype)
|
||||
return xmlutils.xml_type_to_node_class(self.session, coretype)
|
||||
return xmlutils.xml_type_to_node_class(coretype)
|
||||
return nodeutils.get_node_class(NodeTypes.WIRELESS_LAN)
|
||||
logger.warn('unknown network type: \'%s\'', network_type)
|
||||
return None
|
||||
|
|
|
@ -4,6 +4,19 @@ from core import logger
|
|||
from core.netns import nodes
|
||||
|
||||
|
||||
_NODE_MAP = {
|
||||
nodes.CoreNode.__name__: nodes.CoreNode,
|
||||
nodes.SwitchNode.__name__: nodes.SwitchNode,
|
||||
nodes.HubNode.__name__: nodes.HubNode,
|
||||
nodes.WlanNode.__name__: nodes.WlanNode,
|
||||
nodes.RJ45Node.__name__: nodes.RJ45Node,
|
||||
nodes.TunnelNode.__name__: nodes.TunnelNode,
|
||||
nodes.GreTapBridge.__name__: nodes.GreTapBridge,
|
||||
nodes.PtpNet.__name__: nodes.PtpNet,
|
||||
nodes.CtrlNet.__name__: nodes.CtrlNet
|
||||
}
|
||||
|
||||
|
||||
def add_elements_from_list(dom, parent, iterable, name, attr_name):
|
||||
"""
|
||||
XML helper to iterate through a list and add items to parent using tags
|
||||
|
@ -77,7 +90,8 @@ def get_text_elements_to_list(parent):
|
|||
if n.nodeType != Node.ELEMENT_NODE:
|
||||
continue
|
||||
k = str(n.nodeName)
|
||||
v = '' # sometimes want None here?
|
||||
# sometimes want None here?
|
||||
v = ''
|
||||
for c in n.childNodes:
|
||||
if c.nodeType != Node.TEXT_NODE:
|
||||
continue
|
||||
|
@ -251,19 +265,19 @@ def get_params_set_attrs(dom, param_names, target):
|
|||
param_name = param.getAttribute("name")
|
||||
value = param.getAttribute("value")
|
||||
if value is None:
|
||||
continue # never reached?
|
||||
# never reached?
|
||||
continue
|
||||
if param_name in param_names:
|
||||
setattr(target, param_name, str(value))
|
||||
|
||||
|
||||
def xml_type_to_node_class(session, type):
|
||||
def xml_type_to_node_class(node_type):
|
||||
"""
|
||||
Helper to convert from a type string to a class name in nodes.*.
|
||||
"""
|
||||
if hasattr(nodes, type):
|
||||
# TODO: remove and use a mapping to known nodes
|
||||
logger.error("using eval to retrieve node type: %s", type)
|
||||
return eval("nodes.%s" % type)
|
||||
logger.error("xml type to node type: %s", node_type)
|
||||
if hasattr(nodes, node_type):
|
||||
return _NODE_MAP[node_type]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue