summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorChuck Short <chuck.short@canonical.com>2012-04-30 13:52:37 -0400
committerChuck Short <chuck.short@canonical.com>2012-04-30 15:10:19 -0400
commit7a5c505a3bc22a1542791b6f32ceaf0f0ec17a63 (patch)
treea4f5588a2eec22ad02b1a1d7ef591fdbd59931cb /nova
parent1c127f79c3331bc74b0b74c4eade87be695a8828 (diff)
downloadnova-7a5c505a3bc22a1542791b6f32ceaf0f0ec17a63.tar.gz
nova-7a5c505a3bc22a1542791b6f32ceaf0f0ec17a63.tar.xz
nova-7a5c505a3bc22a1542791b6f32ceaf0f0ec17a63.zip
Clean up ElementTree usage
Use lxml in favor of ElementTree to make things more consistent. Fixes LP: #953449 Change-Id: I7f48528d7df47fe7207ca88bce196dea7535df0e Signed-off-by: Chuck Short <chuck.short@canonical.com>
Diffstat (limited to 'nova')
-rw-r--r--nova/image/s3.py4
-rw-r--r--nova/tests/api/ec2/test_middleware.py5
-rw-r--r--nova/tests/fakelibvirt.py21
-rw-r--r--nova/tests/test_fakelibvirt.py10
-rw-r--r--nova/tests/test_libvirt.py20
-rw-r--r--nova/tests/test_libvirt_vif.py14
-rw-r--r--nova/virt/libvirt/connection.py25
-rw-r--r--nova/volume/san.py9
8 files changed, 51 insertions, 57 deletions
diff --git a/nova/image/s3.py b/nova/image/s3.py
index fdf955515..1b8b76596 100644
--- a/nova/image/s3.py
+++ b/nova/image/s3.py
@@ -24,10 +24,10 @@ import os
import shutil
import tarfile
import tempfile
-from xml.etree import ElementTree
import boto.s3.connection
import eventlet
+from lxml import etree
from nova import rpc
from nova import exception
@@ -180,7 +180,7 @@ class S3ImageService(object):
return local_filename
def _s3_parse_manifest(self, context, metadata, manifest):
- manifest = ElementTree.fromstring(manifest)
+ manifest = etree.fromstring(manifest)
image_format = 'ami'
image_type = 'machine'
diff --git a/nova/tests/api/ec2/test_middleware.py b/nova/tests/api/ec2/test_middleware.py
index 62e12abaa..d032d1ea3 100644
--- a/nova/tests/api/ec2/test_middleware.py
+++ b/nova/tests/api/ec2/test_middleware.py
@@ -16,6 +16,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+from lxml import etree
import webob
import webob.dec
import webob.exc
@@ -27,8 +28,6 @@ from nova import flags
from nova import test
from nova import utils
-from xml.etree import ElementTree
-
FLAGS = flags.FLAGS
@@ -108,7 +107,7 @@ class ExecutorTestCase(test.TestCase):
return self.executor(fake_wsgi_request)
def _extract_message(self, result):
- tree = ElementTree.fromstring(result.body)
+ tree = etree.fromstring(result.body)
return tree.findall('./Errors')[0].find('Error/Message').text
def test_instance_not_found(self):
diff --git a/nova/tests/fakelibvirt.py b/nova/tests/fakelibvirt.py
index 24ff5ae55..5a317dca1 100644
--- a/nova/tests/fakelibvirt.py
+++ b/nova/tests/fakelibvirt.py
@@ -14,12 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-from xml.etree import ElementTree
-try:
- ParseError = ElementTree.ParseError
-except AttributeError:
- from xml.parsers import expat
- ParseError = expat.ExpatError
+from lxml import etree
import uuid
@@ -141,7 +136,7 @@ class NWFilter(object):
self._parse_xml(xml)
def _parse_xml(self, xml):
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
root = tree.find('.')
self._name = root.get('name')
@@ -163,8 +158,8 @@ class Domain(object):
def _parse_definition(self, xml):
try:
- tree = ElementTree.fromstring(xml)
- except ParseError:
+ tree = etree.fromstring(xml)
+ except etree.ParseError:
raise libvirtError(VIR_ERR_XML_DETAIL, VIR_FROM_DOMAIN,
"Invalid XML.")
@@ -301,13 +296,13 @@ class Domain(object):
123456789L]
def attachDevice(self, xml):
- disk_info = _parse_disk_info(ElementTree.fromstring(xml))
+ disk_info = _parse_disk_info(etree.fromstring(xml))
disk_info['_attached'] = True
self._def['devices']['disks'] += [disk_info]
return True
def detachDevice(self, xml):
- disk_info = _parse_disk_info(ElementTree.fromstring(xml))
+ disk_info = _parse_disk_info(etree.fromstring(xml))
disk_info['_attached'] = True
return disk_info in self._def['devices']['disks']
@@ -404,7 +399,7 @@ class Domain(object):
self._state = VIR_DOMAIN_RUNNING
def snapshotCreateXML(self, xml, flags):
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
name = tree.find('./name').text
snapshot = DomainSnapshot(name, self)
self._snapshots[name] = snapshot
@@ -741,7 +736,7 @@ class Connection(object):
</capabilities>'''
def compareCPU(self, xml, flags):
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
arch_node = tree.find('./arch')
if arch_node is not None:
diff --git a/nova/tests/test_fakelibvirt.py b/nova/tests/test_fakelibvirt.py
index ac3ceea2d..51ff55b10 100644
--- a/nova/tests/test_fakelibvirt.py
+++ b/nova/tests/test_fakelibvirt.py
@@ -16,7 +16,7 @@
from nova import test
-from xml.etree import ElementTree
+from lxml import etree
import fakelibvirt as libvirt
@@ -252,7 +252,7 @@ class FakeLibvirtTests(test.TestCase):
conn.defineXML(get_vm_xml())
dom = conn.lookupByName('testname')
xml = dom.XMLDesc(0)
- ElementTree.fromstring(xml)
+ etree.fromstring(xml)
def _test_accepts_source_type(self, source_type):
conn = self.get_openAuth_curry_func()('qemu:///system')
@@ -260,7 +260,7 @@ class FakeLibvirtTests(test.TestCase):
conn.defineXML(get_vm_xml(source_type=source_type))
dom = conn.lookupByName('testname')
xml = dom.XMLDesc(0)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
elem = tree.find('./devices/disk/source')
self.assertEquals(elem.get('file'), '/somefile')
@@ -282,7 +282,7 @@ class FakeLibvirtTests(test.TestCase):
conn.defineXML(get_vm_xml(interface_type=network_type))
dom = conn.lookupByName('testname')
xml = dom.XMLDesc(0)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
elem = tree.find('./devices/interface')
self.assertEquals(elem.get('type'), network_type)
elem = elem.find('./source')
@@ -298,7 +298,7 @@ class FakeLibvirtTests(test.TestCase):
def test_getCapabilities(self):
conn = self.get_openAuth_curry_func()('qemu:///system')
- ElementTree.fromstring(conn.getCapabilities())
+ etree.fromstring(conn.getCapabilities())
def test_nwfilter_define_undefine(self):
conn = self.get_openAuth_curry_func()('qemu:///system')
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 61cb2a32a..2343955ba 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -24,7 +24,7 @@ import shutil
import sys
import tempfile
-from xml.etree import ElementTree
+from lxml import etree
from xml.dom import minidom
from nova import context
@@ -884,7 +884,7 @@ class LibvirtConnTestCase(test.TestCase):
conn = connection.LibvirtConnection(True)
instance_ref = db.instance_create(self.context, instance_data)
xml = conn.to_xml(instance_ref, network_info, None, False)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
interfaces = tree.findall("./devices/interface")
self.assertEquals(len(interfaces), 2)
parameters = interfaces[0].findall('./filterref/parameter')
@@ -906,7 +906,7 @@ class LibvirtConnTestCase(test.TestCase):
network_info = _fake_network_info(self.stubs, 1)
xml = conn.to_xml(instance_ref, network_info)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
check = [
(lambda t: t.find('.').get('type'), 'lxc'),
@@ -947,7 +947,7 @@ class LibvirtConnTestCase(test.TestCase):
network_info = _fake_network_info(self.stubs, 1)
xml = conn.to_xml(instance_ref, network_info)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
for i, (check, expected_result) in enumerate(checks):
self.assertEqual(check(tree),
@@ -982,7 +982,7 @@ class LibvirtConnTestCase(test.TestCase):
xml = connection.LibvirtConnection(True).to_xml(instance_ref,
network_info,
image_meta)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
disks = tree.findall('./devices/disk/driver')
for disk in disks:
self.assertEqual(disk.get("cache"), "none")
@@ -994,7 +994,7 @@ class LibvirtConnTestCase(test.TestCase):
xml = connection.LibvirtConnection(True).to_xml(instance_ref,
network_info,
image_meta)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
disks = tree.findall('./devices/disk/driver')
for disk in disks:
self.assertEqual(disk.get("cache"), "writethrough")
@@ -1007,7 +1007,7 @@ class LibvirtConnTestCase(test.TestCase):
xml = connection.LibvirtConnection(True).to_xml(instance_ref,
network_info,
image_meta)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
self.assertEqual(tree.find('./devices/disk').get('device'),
device_type)
self.assertEqual(tree.find('./devices/disk/target').get('bus'), bus)
@@ -1020,7 +1020,7 @@ class LibvirtConnTestCase(test.TestCase):
xml = connection.LibvirtConnection(True).to_xml(instance_ref,
network_info,
image_meta)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
self.assertEqual(tree.find('./uuid').text,
instance_ref['uuid'])
@@ -1119,7 +1119,7 @@ class LibvirtConnTestCase(test.TestCase):
network_info = _fake_network_info(self.stubs, 1)
xml = conn.to_xml(instance_ref, network_info, None, rescue)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
for i, (check, expected_result) in enumerate(checks):
self.assertEqual(check(tree),
expected_result,
@@ -1676,7 +1676,7 @@ class NWFilterFakes:
def undefine(self):
del self.parent.filters[self.name]
pass
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
name = tree.get('name')
if name not in self.filters:
self.filters[name] = FakeNWFilterInternal(self, name)
diff --git a/nova/tests/test_libvirt_vif.py b/nova/tests/test_libvirt_vif.py
index 2cc1abcef..dfa18325a 100644
--- a/nova/tests/test_libvirt_vif.py
+++ b/nova/tests/test_libvirt_vif.py
@@ -14,15 +14,15 @@
# License for the specific language governing permissions and limitations
# under the License.
-from xml.etree import ElementTree
+from lxml import etree
from nova import flags
from nova import test
from nova import utils
from nova.virt import firewall
-from nova.virt.libvirt import vif
-from nova.virt.libvirt import connection
from nova.virt.libvirt import config
+from nova.virt.libvirt import connection
+from nova.virt.libvirt import vif
FLAGS = flags.FLAGS
@@ -83,7 +83,7 @@ class LibvirtVifTestCase(test.TestCase):
d = vif.LibvirtBridgeDriver()
xml = self._get_instance_xml(d)
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
ret = doc.findall('./devices/interface')
self.assertEqual(len(ret), 1)
node = ret[0]
@@ -99,7 +99,7 @@ class LibvirtVifTestCase(test.TestCase):
d = vif.LibvirtOpenVswitchDriver()
xml = self._get_instance_xml(d)
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
ret = doc.findall('./devices/interface')
self.assertEqual(len(ret), 1)
node = ret[0]
@@ -117,7 +117,7 @@ class LibvirtVifTestCase(test.TestCase):
d = vif.LibvirtOpenVswitchVirtualPortDriver()
xml = self._get_instance_xml(d)
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
ret = doc.findall('./devices/interface')
self.assertEqual(len(ret), 1)
node = ret[0]
@@ -143,7 +143,7 @@ class LibvirtVifTestCase(test.TestCase):
d = vif.QuantumLinuxBridgeVIFDriver()
xml = self._get_instance_xml(d)
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
ret = doc.findall('./devices/interface')
self.assertEqual(len(ret), 1)
node = ret[0]
diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py
index b8ac5f0f7..234d94afd 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -39,8 +39,8 @@ Supports KVM, LXC, QEMU, UML, and XEN.
"""
import errno
-import hashlib
import functools
+import hashlib
import glob
import multiprocessing
import os
@@ -51,9 +51,8 @@ import uuid
from eventlet import greenthread
from eventlet import tpool
-
+from lxml import etree
from xml.dom import minidom
-from xml.etree import ElementTree
from nova import block_device
from nova.compute import instance_types
@@ -528,7 +527,7 @@ class LibvirtConnection(driver.ComputeDriver):
def _get_disk_xml(xml, device):
"""Returns the xml for the disk mounted at device"""
try:
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
except Exception:
return None
ret = doc.findall('./devices/disk')
@@ -536,7 +535,7 @@ class LibvirtConnection(driver.ComputeDriver):
for child in node.getchildren():
if child.tag == 'target':
if child.get('dev') == device:
- return ElementTree.tostring(node)
+ return etree.tostring(node)
@exception.wrap_exception()
def detach_volume(self, connection_info, instance_name, mountpoint):
@@ -586,7 +585,7 @@ class LibvirtConnection(driver.ComputeDriver):
@staticmethod
def get_lxc_container_root(virt_dom):
xml = virt_dom.XMLDesc(0)
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
filesystem_block = doc.findall('./devices/filesystem')
for cnt, filesystem_nodes in enumerate(filesystem_block):
return filesystem_nodes[cnt].get('dir')
@@ -661,7 +660,7 @@ class LibvirtConnection(driver.ComputeDriver):
# Find the disk
xml_desc = virt_dom.XMLDesc(0)
- domain = ElementTree.fromstring(xml_desc)
+ domain = etree.fromstring(xml_desc)
source = domain.find('devices/disk/source')
disk_path = source.get('file')
@@ -946,7 +945,7 @@ class LibvirtConnection(driver.ComputeDriver):
def get_console_output(self, instance):
virt_dom = self._lookup_by_name(instance['name'])
xml = virt_dom.XMLDesc(0)
- tree = ElementTree.fromstring(xml)
+ tree = etree.fromstring(xml)
console_types = {}
@@ -1746,7 +1745,7 @@ class LibvirtConnection(driver.ComputeDriver):
for dom_id in self._conn.listDomainsID():
domain = self._conn.lookupByID(dom_id)
try:
- doc = ElementTree.fromstring(domain.XMLDesc(0))
+ doc = etree.fromstring(domain.XMLDesc(0))
except Exception:
continue
ret = doc.findall('./devices/disk')
@@ -1769,7 +1768,7 @@ class LibvirtConnection(driver.ComputeDriver):
doc = None
try:
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
except Exception:
return []
@@ -1802,7 +1801,7 @@ class LibvirtConnection(driver.ComputeDriver):
doc = None
try:
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
except Exception:
return []
@@ -1960,7 +1959,7 @@ class LibvirtConnection(driver.ComputeDriver):
"""
xml = self._conn.getCapabilities()
- xml = ElementTree.fromstring(xml)
+ xml = etree.fromstring(xml)
nodes = xml.findall('.//host/cpu')
if len(nodes) != 1:
reason = _("'<cpu>' must be 1, but %d\n") % len(nodes)
@@ -2363,7 +2362,7 @@ class LibvirtConnection(driver.ComputeDriver):
virt_dom = self._lookup_by_name(instance_name)
xml = virt_dom.XMLDesc(0)
- doc = ElementTree.fromstring(xml)
+ doc = etree.fromstring(xml)
disk_nodes = doc.findall('.//devices/disk')
path_nodes = doc.findall('.//devices/disk/source')
driver_nodes = doc.findall('.//devices/disk/driver')
diff --git a/nova/volume/san.py b/nova/volume/san.py
index 1d5a36057..aecb9a0b5 100644
--- a/nova/volume/san.py
+++ b/nova/volume/san.py
@@ -30,7 +30,8 @@ import random
import socket
import string
import uuid
-from xml.etree import ElementTree
+
+from lxml import etree
from nova import exception
from nova import flags
@@ -145,7 +146,7 @@ class SanISCSIDriver(nova.volume.driver.ISCSIDriver):
pass
def check_for_setup_error(self):
- """Returns an error if prerequisites aren't met"""
+ """Returns an error if prerequisites aren't met."""
if not self.run_local:
if not (FLAGS.san_password or FLAGS.san_private_key):
raise exception.Error(_('Specify san_password or '
@@ -451,7 +452,7 @@ class HpSanISCSIDriver(SanISCSIDriver):
LOG.debug(_("CLIQ command returned %s"), out)
- result_xml = ElementTree.fromstring(out)
+ result_xml = etree.fromstring(out)
if check_cliq_result:
response_node = result_xml.find("response")
if response_node is None:
@@ -492,7 +493,7 @@ class HpSanISCSIDriver(SanISCSIDriver):
if len(vips) == 1:
return vips[0]
- _xml = ElementTree.tostring(cluster_xml)
+ _xml = etree.tostring(cluster_xml)
msg = (_("Unexpected number of virtual ips for cluster "
" %(cluster_name)s. Result=%(_xml)s") %
locals())