diff --git a/ChangeLog b/ChangeLog index d5f0fa43dd7b4ff710ba7100bf7fee2f5349c9c7..9be0b1999db436b38685e8676f05aa26bc3823b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Apr 16 08:30:04 EST 2007 Daniel P. Berrange + + * 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 * qemud/driver.c: Fixed integer overflow in calculating CPU time diff --git a/python/generator.py b/python/generator.py index 567cc529a37c53f88cb978449a86cefa2c8c33c7..c3c79dc2cf3ded663f5924e21ae0b4971dd176a0 100755 --- a/python/generator.py +++ b/python/generator.py @@ -535,10 +535,10 @@ def buildStubs(): # The type automatically remapped to generated classes # classes_type = { - "virDomainPtr": ("._o", "virDomain(_obj=%s)", "virDomain"), - "virDomain *": ("._o", "virDomain(_obj=%s)", "virDomain"), - "virNetworkPtr": ("._o", "virNetwork(_obj=%s)", "virNetwork"), - "virNetwork *": ("._o", "virNetwork(_obj=%s)", "virNetwork"), + "virDomainPtr": ("._o", "virDomain(self,_obj=%s)", "virDomain"), + "virDomain *": ("._o", "virDomain(self, _obj=%s)", "virDomain"), + "virNetworkPtr": ("._o", "virNetwork(self, _obj=%s)", "virNetwork"), + "virNetwork *": ("._o", "virNetwork(self, _obj=%s)", "virNetwork"), "virConnectPtr": ("._o", "virConnect(_obj=%s)", "virConnect"), "virConnect *": ("._o", "virConnect(_obj=%s)", "virConnect"), } @@ -556,11 +556,6 @@ classes_destructors = { "virConnect": "virConnectClose", } -classes_references = { - "virDomain": "virConnect", - "virNetwork": "virConnect", -} - functions_noexcept = { 'virDomainGetID': True, 'virDomainGetName': True, @@ -872,11 +867,16 @@ def buildWrappers(): else: txt.write("Class %s()\n" % (classname)) classes.write("class %s:\n" % (classname)) - classes.write(" def __init__(self, _obj=None):\n") + if classname == "virDomain" or classname == "virNetwork": + classes.write(" def __init__(self, conn, _obj=None):\n") + else: + classes.write(" def __init__(self, _obj=None):\n") if reference_keepers.has_key(classname): list = reference_keepers[classname] for ref in list: 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(" self._o = None\n\n"); destruct=None @@ -961,6 +961,14 @@ def buildWrappers(): classes.write( " if ret is None:raise libvirtError('%s() failed', conn=self)\n" % (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: classes.write( " if ret is None:raise libvirtError('%s() failed')\n" % @@ -973,12 +981,6 @@ def buildWrappers(): classes.write(classes_type[ret[0]][1] % ("ret")); 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 # class in the returned class object. @@ -1031,6 +1033,14 @@ def buildWrappers(): classes.write ((" if " + test + ": raise libvirtError ('%s() failed', conn=self)\n") % ("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: classes.write ((" if " + test + ": raise libvirtError ('%s() failed')\n") % @@ -1053,6 +1063,14 @@ def buildWrappers(): classes.write ((" if " + test + ": raise libvirtError ('%s() failed', conn=self)\n") % ("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: classes.write ((" if " + test + ": raise libvirtError ('%s() failed')\n") % diff --git a/python/libvir.py b/python/libvir.py index dc4bc295cefdb8999fce484caa793cb001ce6924..e1c4ff3feebbc2c744160fbad47ecde124b57fe5 100644 --- a/python/libvir.py +++ b/python/libvir.py @@ -9,9 +9,14 @@ import types # The root of all libvirt errors. class libvirtError(Exception): - def __init__(self, msg, conn=None): + def __init__(self, msg, conn=None, dom=None, net=None): Exception.__init__(self, msg) + if dom is not None: + conn = dom._conn + elif net is not None: + conn = net._conn + if conn is None: self.err = virGetLastError() else: