[Libvir] PATCH: Fix exception reporting for virNetwork / virDomain python methods

Daniel Veillard veillard at redhat.com
Sun Apr 15 21:26:16 UTC 2007

On Sun, Apr 15, 2007 at 10:07:01PM +0100, Daniel P. Berrange wrote:
> The virError() class in the python bindings will either pick up the global
> error details, or will extract them from the virConnect private error
> details. For the latter to work, you must pass in a virConnect object
> when creating the virError. I'd previously fixed up the generator so that
> was done correctly for any method on virConnectPtr, however, I forgot that
> a similar fix was needed for the virDomainPtr / virNetworkPtr related
> methods. Currently we're getting back zero useful information in the python
> layer with a virDomain* or virNetwork* method fails.

  Hum, I see, problematic ...

> Unfortunately, given a virDomainPtr / virNetworkPtr object in python, there
> is no easy way to get back the virConnectPtr object. So this patch does
> two things - it passes the virConnect python object into the constructor
> of the virDomain / virNetwork python objects, and then stores it in a
> private _conn attribute. Then, the virNetwork/virDomain objects are passed
> into the virError() classes when needeed so it can get hold of the private
> error details.  
> So with this patch, virt-manager will get sensible error information when
> attempting to start an inactive guest, or when doing device hot-add/remove.


> BTW, since we now store an explicit reference to the virConnect object,
> I removed the generic 'self.ref' back-reference.
> -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")

  the generator is getting more and more hackish :-\
I understand the reasons though... I'm resisting ditching it because we are
still changings APIs an comments quite a bit, one day it won't be worth keeping

  Please go ahead, 


Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/

More information about the libvir-list mailing list