def _query_state_rci(state): """\ Parse an RCI response via ElementTree. Present limitations: o Only returns tags in the first level below "state". o Appends any tag attributes to the tag name, but the order may change since ElementTree sorts them. Best to use only one attribute per tag. """ query_string = """\ <rci_request version="1.1"> <query_state> <%s/> </query_state> </rci_request>""" % state state_tree = ElementTree().parsestring("<" + state + " />") state_xml = simple_rci_query(query_string) tree = ElementTree().parsestring(state_xml) root_list = tree.findall(state_tree.tag) return root_list
def _query_state_rci(state): """\ Parse an RCI response via ElementTree. Present limitations: o Only returns tags in the first level below "state". o Appends any tag attributes to the tag name, but the order may change since ElementTree sorts them. Best to use only one attribute per tag. """ query_string = """\ <rci_request version="1.1"> <query_state> <%s/> </query_state> </rci_request>""" % state state_tree = ElementTree().parsestring("<"+state+" />") state_xml = simple_rci_query(query_string) tree = ElementTree().parsestring(state_xml) root_list = tree.findall(state_tree.tag) return root_list
def get_ethernet_mac_string(): """\ Returns the Ethernet MAC address as a string, using RCI 'device_info' Example: "00:40:9D:6A:72:F6" """ if sys.platform == 'digiconnect': # in Connect/ConnectPort, looking for: # <device_info> # <mac>00:40:9d:52:1d:6e</mac> # </device_info> info = query_state("device_info") for item in info: mac = item.find('mac') if mac != None: return mac.text elif sys.platform == 'linux2': # in X2e ZB/3G, looking for # <interface_info name="eth0"> # <mac>00:40:9d:52:1d:6e</mac> # </interface_info> response = process_rci_request( '<rci_request version="1.1"><query_state /></rci_request>') # there may be a cleaner method, but we have multiple possible nodes # like <interface_info name="eth0"> and <interface_info name="wlan0"> # I couldn't find a cleaner way to find <interface_info name="eth0"> if # it is NOT the first interface_info root = ElementTree().parsestring(response) inf_list = root.findall('interface_info') interface_node = None for node in inf_list: if interface_node is None: # save the very first 'interface_info' we find, but keep going interface_node = node if node.attrib['name'] in ('eth0'): # break and use this one interface_node = node break # this will return string like '00:40:9d:5c:1b:05" or None if interface_node is not None: return interface_node.findtext('mac') return None