Source code for pyhpecw7.utils.xml.lib

"""This module provides several utility functions
for dealing with XML text and ``etree.Element``
XML objects.
"""
from lxml.builder import ElementMaker

from pyhpecw7.utils.xml.namespaces import *


[docs]def config_element_maker(): return ElementMaker(namespace=HPCONFIG, nsmap={None: HPCONFIG})
[docs]def data_element_maker(): return ElementMaker(namespace=HPDATA, nsmap={None: HPDATA})
[docs]def action_element_maker(): return ElementMaker(namespace=HPACTION, nsmap={None: HPACTION})
[docs]def nc_element_maker(): return ElementMaker(namespace=NETCONFBASE, nsmap={None: NETCONFBASE})
[docs]def config_params(pmap, key_map, value_map={}, E=config_element_maker(), fill_in=True): params = [] for key, value in pmap.items(): if fill_in: key2 = key_map.get(key, key) else: key2 = key_map.get(key, None) if key2: params.append( getattr(E, key2)(value_map.get(key, {}).get(value, value))) return params
[docs]def operation_kwarg(operation=None): if operation is None: return {} return { NETCONFBASE_C + 'operation': operation }
def _findall_with_ns(query, ele, ns=''): return ele.findall('.//{%s}%s' % (ns, query))
[docs]def findall_in_data(query, ele): return _findall_with_ns(query, ele, ns=HPDATA)
def _find_with_ns(query, ele, ns=''): return ele.find('.//{%s}%s' % (ns, query))
[docs]def find_in_data(query, ele): return _find_with_ns(query, ele, ns=HPDATA)
[docs]def find_in_action(query, ele): return _find_with_ns(query, ele, ns=HPACTION)
[docs]def findall_in_action(query, ele): return _findall_with_ns(query, ele, ns=HPACTION)
[docs]def find_in_config(query, ele): return _find_with_ns(query, ele, ns=HPCONFIG)
[docs]def elem_to_dict(elem, ns, key_map, value_map={}): """Convert an XML etree.Element to a desired dictionary as specified by the key map and value map. Args: elem (etree.Element): An ancestor element of the tags specified in the key map. ns (string): The namespace to use when searching for XML tags. key_map (dict): A mapping from desired dictionary keys to XML tag names. value_map (dict): A mapping from XML tag names to dictionaries of mappings from XML text values to desired dictionary values. Returns: The desired dictionary. """ to_dict = {} for k, v in key_map.items(): field = elem.find('.//{0}{1}'.format(ns, v)) if field is not None: text = field.text to_dict[k] = value_map.get(v, {}).get(text, text) return to_dict
[docs]def data_elem_to_dict(elem, key_map, value_map={}): return elem_to_dict(elem, HPDATA_C, key_map, value_map=value_map)
[docs]def reverse_value_map(key_map, value_map): """Utility function for creating a "reverse" value map from a given key map and value map. """ r_value_map = {} for k, v in value_map.items(): sub_values = r_value_map[key_map[k]] = {} for k2, v2 in v.items(): sub_values[v2] = k2 return r_value_map
[docs]def remove_namespaces(xml): """Remove the namespaces from an ``etree.Element`` object and return the modified object. """ for elem in xml.getiterator(): split_elem = elem.tag.split('}') if len(split_elem) > 1: elem.tag = split_elem[1] return xml
[docs]def get_text(xml, tag): """Return the text from a given tag and XML element. """ elem = xml.find(tag) if elem is not None: return elem.text.strip()