VirtualDisk: Convert 'type' to new style XML property

This commit is contained in:
Cole Robinson 2013-07-14 17:54:01 -04:00
parent ae74bd662f
commit 1a74a8fda6
3 changed files with 25 additions and 23 deletions

View File

@ -268,6 +268,7 @@ class XMLParseTest(unittest.TestCase):
check("serial", "WD-WMAP9A966149", "frob")
check = self._make_checker(disk3)
check("type", "block", "dir", "file", "block")
check("path", "/dev/loop0", None)
check("device", "cdrom", "floppy")
check("read_only", True, False)

View File

@ -390,13 +390,12 @@ class VirtualDisk(VirtualDevice):
_XMLELEMENTORDER = ["driver", "source", "target"]
_XMLPROPORDER = ["target", "bus"]
_XMLPROPORDER = ["target", "bus", "type", "device"]
def __init__(self, conn, parsexml=None, parsexmlnode=None):
VirtualDevice.__init__(self, conn, parsexml, parsexmlnode)
self._DEFAULT_SENTINEL = -1234
self._type = self._DEFAULT_SENTINEL
self._driverName = self._DEFAULT_SENTINEL
self._driverType = self._DEFAULT_SENTINEL
@ -440,15 +439,6 @@ class VirtualDisk(VirtualDevice):
_TARGET_PROPS])
def get_type(self):
if self._type != self._DEFAULT_SENTINEL:
return self._type
return self._get_default_type()
def set_type(self, val):
self._type = val
type = XMLProperty(get_type, set_type,
xpath="./@type")
def get_driver_name(self):
if self._driverName != self._DEFAULT_SENTINEL:
return self._driverName
@ -468,6 +458,15 @@ class VirtualDisk(VirtualDevice):
xpath="./driver/@type")
#############################
# Internal defaults helpers #
#############################
def _get_default_type(self):
if self._storage_creator:
return self._storage_creator.get_dev_type()
return self._storage_backend.get_dev_type()
#########################
# Simple XML properties #
@ -475,6 +474,7 @@ class VirtualDisk(VirtualDevice):
device = XMLProperty(xpath="./@device",
default_cb=lambda s: s.DEVICE_DISK)
type = XMLProperty(xpath="./@type", default_cb=_get_default_type)
bus = XMLProperty(xpath="./target/@bus")
target = XMLProperty(xpath="./target/@dev")
@ -588,11 +588,6 @@ class VirtualDisk(VirtualDevice):
self.refresh_xml_prop("driver_type")
def _get_default_type(self):
if self._storage_creator:
return self._storage_creator.get_dev_type()
return self._storage_backend.get_dev_type()
def _get_default_driver(self):
"""
Set driverName and driverType from passed parameters
@ -744,7 +739,7 @@ class VirtualDisk(VirtualDevice):
if path:
path = util.xml_escape(path)
ret = " <disk type='%s'>\n" % self.type
ret = " <disk>\n"
drvxml = ""
if self.driver_type is not None:

View File

@ -529,22 +529,28 @@ class XMLProperty(property):
continue
node.setContent(util.xml_escape(str(val)))
def _prop_is_unset(self, xmlbuilder):
propstore = getattr(xmlbuilder, "_propstore")
propname = self._findpropname(xmlbuilder)
return (propname not in propstore)
def refresh_xml(self, xmlbuilder):
def refresh_xml(self, xmlbuilder, force_call_fset=False):
call_fset = True
if not self._is_new_style_prop():
call_fset = False
elif getattr(xmlbuilder, "_is_parse")():
call_fset = False
elif self._prop_is_unset(xmlbuilder) and self._default_cb:
call_fset = False
if force_call_fset:
call_fset = True
self.fset(xmlbuilder, self.fget(xmlbuilder), call_fset=call_fset)
def set_default(self, xmlbuilder):
propstore = getattr(xmlbuilder, "_propstore")
propname = self._findpropname(xmlbuilder)
unset = (propname not in propstore)
if not unset:
if not self._prop_is_unset(xmlbuilder) or not self._default_cb:
return
self.refresh_xml(xmlbuilder)
self.refresh_xml(xmlbuilder, force_call_fset=True)
class XMLBuilder(object):