提交 b4259bbc 编写于 作者: D Daniel P. Berrange

Fixed exception reporting for domain/network operations

上级 cc05eaf8
Mon Apr 16 08:30:04 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* python/generator.py, python/libvir.py: Ensure that connection
info is passed into virError object when a virNetwork or virDomain
operation fails
Sun Apr 15 15:57:04 EST 2007 Daniel P. Berrange <berrange@redhat.com> Sun Apr 15 15:57:04 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* qemud/driver.c: Fixed integer overflow in calculating CPU time * qemud/driver.c: Fixed integer overflow in calculating CPU time
......
...@@ -535,10 +535,10 @@ def buildStubs(): ...@@ -535,10 +535,10 @@ def buildStubs():
# The type automatically remapped to generated classes # The type automatically remapped to generated classes
# #
classes_type = { classes_type = {
"virDomainPtr": ("._o", "virDomain(_obj=%s)", "virDomain"), "virDomainPtr": ("._o", "virDomain(self,_obj=%s)", "virDomain"),
"virDomain *": ("._o", "virDomain(_obj=%s)", "virDomain"), "virDomain *": ("._o", "virDomain(self, _obj=%s)", "virDomain"),
"virNetworkPtr": ("._o", "virNetwork(_obj=%s)", "virNetwork"), "virNetworkPtr": ("._o", "virNetwork(self, _obj=%s)", "virNetwork"),
"virNetwork *": ("._o", "virNetwork(_obj=%s)", "virNetwork"), "virNetwork *": ("._o", "virNetwork(self, _obj=%s)", "virNetwork"),
"virConnectPtr": ("._o", "virConnect(_obj=%s)", "virConnect"), "virConnectPtr": ("._o", "virConnect(_obj=%s)", "virConnect"),
"virConnect *": ("._o", "virConnect(_obj=%s)", "virConnect"), "virConnect *": ("._o", "virConnect(_obj=%s)", "virConnect"),
} }
...@@ -556,11 +556,6 @@ classes_destructors = { ...@@ -556,11 +556,6 @@ classes_destructors = {
"virConnect": "virConnectClose", "virConnect": "virConnectClose",
} }
classes_references = {
"virDomain": "virConnect",
"virNetwork": "virConnect",
}
functions_noexcept = { functions_noexcept = {
'virDomainGetID': True, 'virDomainGetID': True,
'virDomainGetName': True, 'virDomainGetName': True,
...@@ -872,11 +867,16 @@ def buildWrappers(): ...@@ -872,11 +867,16 @@ def buildWrappers():
else: else:
txt.write("Class %s()\n" % (classname)) txt.write("Class %s()\n" % (classname))
classes.write("class %s:\n" % (classname)) classes.write("class %s:\n" % (classname))
if classname == "virDomain" or classname == "virNetwork":
classes.write(" def __init__(self, conn, _obj=None):\n")
else:
classes.write(" def __init__(self, _obj=None):\n") classes.write(" def __init__(self, _obj=None):\n")
if reference_keepers.has_key(classname): if reference_keepers.has_key(classname):
list = reference_keepers[classname] list = reference_keepers[classname]
for ref in list: for ref in list:
classes.write(" self.%s = None\n" % ref[1]) classes.write(" self.%s = None\n" % ref[1])
if classname == "virDomain" or classname == "virNetwork":
classes.write(" self._conn = conn\n")
classes.write(" if _obj != None:self._o = _obj;return\n") classes.write(" if _obj != None:self._o = _obj;return\n")
classes.write(" self._o = None\n\n"); classes.write(" self._o = None\n\n");
destruct=None destruct=None
...@@ -961,6 +961,14 @@ def buildWrappers(): ...@@ -961,6 +961,14 @@ def buildWrappers():
classes.write( classes.write(
" if ret is None:raise libvirtError('%s() failed', conn=self)\n" % " if ret is None:raise libvirtError('%s() failed', conn=self)\n" %
(name)) (name))
elif classname == "virDomain":
classes.write(
" if ret is None:raise libvirtError('%s() failed', dom=self)\n" %
(name))
elif classname == "virNetwork":
classes.write(
" if ret is None:raise libvirtError('%s() failed', net=self)\n" %
(name))
else: else:
classes.write( classes.write(
" if ret is None:raise libvirtError('%s() failed')\n" % " if ret is None:raise libvirtError('%s() failed')\n" %
...@@ -973,12 +981,6 @@ def buildWrappers(): ...@@ -973,12 +981,6 @@ def buildWrappers():
classes.write(classes_type[ret[0]][1] % ("ret")); classes.write(classes_type[ret[0]][1] % ("ret"));
classes.write("\n"); classes.write("\n");
#
# hook up a reference if needed
#
if classes_references.has_key(classes_type[ret[0]][2]):
classes.write(" __tmp.ref = self\n");
# #
# Sometime one need to keep references of the source # Sometime one need to keep references of the source
# class in the returned class object. # class in the returned class object.
...@@ -1031,6 +1033,14 @@ def buildWrappers(): ...@@ -1031,6 +1033,14 @@ def buildWrappers():
classes.write ((" if " + test + classes.write ((" if " + test +
": raise libvirtError ('%s() failed', conn=self)\n") % ": raise libvirtError ('%s() failed', conn=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virDomain":
classes.write ((" if " + test +
": raise libvirtError ('%s() failed', dom=self)\n") %
("ret", name))
elif classname == "virNetwork":
classes.write ((" if " + test +
": raise libvirtError ('%s() failed', net=self)\n") %
("ret", name))
else: else:
classes.write ((" if " + test + classes.write ((" if " + test +
": raise libvirtError ('%s() failed')\n") % ": raise libvirtError ('%s() failed')\n") %
...@@ -1053,6 +1063,14 @@ def buildWrappers(): ...@@ -1053,6 +1063,14 @@ def buildWrappers():
classes.write ((" if " + test + classes.write ((" if " + test +
": raise libvirtError ('%s() failed', conn=self)\n") % ": raise libvirtError ('%s() failed', conn=self)\n") %
("ret", name)) ("ret", name))
elif classname == "virDomain":
classes.write ((" if " + test +
": raise libvirtError ('%s() failed', dom=self)\n") %
("ret", name))
elif classname == "virNetwork":
classes.write ((" if " + test +
": raise libvirtError ('%s() failed', net=self)\n") %
("ret", name))
else: else:
classes.write ((" if " + test + classes.write ((" if " + test +
": raise libvirtError ('%s() failed')\n") % ": raise libvirtError ('%s() failed')\n") %
......
...@@ -9,9 +9,14 @@ import types ...@@ -9,9 +9,14 @@ import types
# The root of all libvirt errors. # The root of all libvirt errors.
class libvirtError(Exception): class libvirtError(Exception):
def __init__(self, msg, conn=None): def __init__(self, msg, conn=None, dom=None, net=None):
Exception.__init__(self, msg) Exception.__init__(self, msg)
if dom is not None:
conn = dom._conn
elif net is not None:
conn = net._conn
if conn is None: if conn is None:
self.err = virGetLastError() self.err = virGetLastError()
else: else:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册