]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fixed exception reporting for domain/network operations
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 16 Apr 2007 12:37:59 +0000 (12:37 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 16 Apr 2007 12:37:59 +0000 (12:37 +0000)
ChangeLog
python/generator.py
python/libvir.py

index d5f0fa43dd7b4ff710ba7100bf7fee2f5349c9c7..9be0b1999db436b38685e8676f05aa26bc3823b3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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>
 
        * qemud/driver.c: Fixed integer overflow in calculating CPU time
index 567cc529a37c53f88cb978449a86cefa2c8c33c7..c3c79dc2cf3ded663f5924e21ae0b4971dd176a0 100755 (executable)
@@ -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") %
index dc4bc295cefdb8999fce484caa793cb001ce6924..e1c4ff3feebbc2c744160fbad47ecde124b57fe5 100644 (file)
@@ -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: