diff options
author | Cole Robinson <crobinso@redhat.com> | 2015-04-03 16:22:25 -0400 |
---|---|---|
committer | Cole Robinson <crobinso@redhat.com> | 2015-04-03 16:45:43 -0400 |
commit | 45ae269950b593333acbc50b415bcb2c9f7872d3 (patch) | |
tree | 75cc566e53572b4b2067976f916a4b2d583d7f04 /virtinst | |
parent | d4dfbd41b556a5e3f9e1bfef470c16e4988459ae (diff) | |
download | virt-manager-45ae269950b593333acbc50b415bcb2c9f7872d3.tar.gz |
storage: Use XMLBuilder for pool enumerate parsing
And kill the parse_node_helper function, since that paradigm is dead.
Diffstat (limited to 'virtinst')
-rw-r--r-- | virtinst/storage.py | 51 | ||||
-rw-r--r-- | virtinst/util.py | 37 |
2 files changed, 27 insertions, 61 deletions
diff --git a/virtinst/storage.py b/virtinst/storage.py index 8438896c..607a3fd9 100644 --- a/virtinst/storage.py +++ b/virtinst/storage.py @@ -165,30 +165,33 @@ class StoragePool(_StorageObject): return [] raise - def source_parser(node): - ret = [] - - child = node.children - while child: - if child.name == "source": - xml = "<pool>\n%s\n</pool>" % ( - util.xml_indent(child.serialize(format=1), 2)) - parseobj = StoragePool(conn, parsexml=xml) - parseobj.type = pool_type - - obj = StoragePool(conn) - obj.type = pool_type - obj.source_path = parseobj.source_path - for host in parseobj.hosts: - parseobj.remove_host(host) - obj.add_host_obj(host) - obj.source_name = parseobj.source_name - obj.format = parseobj.format - ret.append(obj) - child = child.next - return ret - - return util.parse_node_helper(xml, "sources", source_parser) + class _EnumerateSource(XMLBuilder): + _XML_ROOT_NAME = "source" + class _EnumerateSources(XMLBuilder): + _XML_ROOT_NAME = "sources" + sources = XMLChildProperty(_EnumerateSource) + + + ret = [] + sources = _EnumerateSources(conn, xml) + for source in sources.sources: + source_xml = source.get_xml_config() + + pool_xml = "<pool>\n%s\n</pool>" % (util.xml_indent(source_xml, 2)) + parseobj = StoragePool(conn, parsexml=pool_xml) + parseobj.type = pool_type + + obj = StoragePool(conn) + obj.type = pool_type + obj.source_path = parseobj.source_path + for host in parseobj.hosts: + parseobj.remove_host(host) + obj.add_host_obj(host) + obj.source_name = parseobj.source_name + obj.format = parseobj.format + + ret.append(obj) + return ret @staticmethod def build_default_pool(conn): diff --git a/virtinst/util.py b/virtinst/util.py index 099b501a..c5726f05 100644 --- a/virtinst/util.py +++ b/virtinst/util.py @@ -25,7 +25,6 @@ import re import stat import libvirt -import libxml2 _host_blktap_capable = None @@ -248,42 +247,6 @@ def default_bridge(conn): return None -def parse_node_helper(xml, root_name, callback, exec_class=ValueError): - """ - Parse the passed XML, expecting root as root_name, and pass the - root node to callback - """ - class ErrorHandler(object): - def __init__(self): - self.msg = "" - def handler(self, ignore, s): - self.msg += s - error = ErrorHandler() - libxml2.registerErrorHandler(error.handler, None) - - try: - try: - doc = libxml2.readMemory(xml, len(xml), - None, None, - libxml2.XML_PARSE_NOBLANKS) - except (libxml2.parserError, libxml2.treeError), e: - raise exec_class("%s\n%s" % (e, error.msg)) - finally: - libxml2.registerErrorHandler(None, None) - - ret = None - try: - root = doc.getRootElement() - if root.name != root_name: - raise ValueError("Root element is not '%s'" % root_name) - - ret = callback(root) - finally: - doc.freeDoc() - - return ret - - def generate_uuid(conn): for ignore in range(256): uuid = randomUUID(conn) |