summaryrefslogtreecommitdiff
path: root/virtinst
diff options
context:
space:
mode:
authorCole Robinson <crobinso@redhat.com>2015-04-03 16:22:25 -0400
committerCole Robinson <crobinso@redhat.com>2015-04-03 16:45:43 -0400
commit45ae269950b593333acbc50b415bcb2c9f7872d3 (patch)
tree75cc566e53572b4b2067976f916a4b2d583d7f04 /virtinst
parentd4dfbd41b556a5e3f9e1bfef470c16e4988459ae (diff)
downloadvirt-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.py51
-rw-r--r--virtinst/util.py37
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)