From a9ea906035bcf5cbe95db64f51ed2ff7cec2b503 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 16 Sep 2009 14:03:53 +0100 Subject: Re-arrange python generator to make it clear what's auto-generated * README: New file describing what each file is used for * livvirt-override.c, libvirt-override.py, libvirt-override-api.xml, libvirt-override-virConnect.py: Manually written code overriding the generator * typewrappers.c, typewrappers.h: Data type wrappers * generator.py: Automatically pre-prend contents of libvirt-override.py to generated libvirt.py. Output into libvirt.py directly instead of libvirtclass.py. Don't generate libvirtclass.txt at all. Write C files into libvirt.c/.h directly * Makefile.am: Remove rule for creating libvirt.py from libvirt-override.py and libvirtclass.py, since generator.py does it directly --- libvirt-override.py | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 libvirt-override.py (limited to 'libvirt-override.py') diff --git a/libvirt-override.py b/libvirt-override.py new file mode 100644 index 0000000..92c6e03 --- /dev/null +++ b/libvirt-override.py @@ -0,0 +1,144 @@ +# +# Manually written part of python bindings for libvirt +# + +# On cygwin, the DLL is called cygvirtmod.dll +try: + import libvirtmod +except ImportError, lib_e: + try: + import cygvirtmod as libvirtmod + except ImportError, cyg_e: + if str(cyg_e).count("No module named"): + raise lib_e + +import types + +# The root of all libvirt errors. +class libvirtError(Exception): + def __init__(self, defmsg, conn=None, dom=None, net=None, pool=None, vol=None): + + if dom is not None: + conn = dom._conn + elif net is not None: + conn = net._conn + elif pool is not None: + conn = pool._conn + elif vol is not None: + conn = vol._conn + + # Never call virConnGetLastError(). + # virGetLastError() is now thread local + err = virGetLastError() + if err is None: + msg = defmsg + else: + msg = err[2] + + Exception.__init__(self, msg) + + self.err = err + + def get_error_code(self): + if self.err is None: + return None + return self.err[0] + + def get_error_domain(self): + if self.err is None: + return None + return self.err[1] + + def get_error_message(self): + if self.err is None: + return None + return self.err[2] + + def get_error_level(self): + if self.err is None: + return None + return self.err[3] + + def get_str1(self): + if self.err is None: + return None + return self.err[4] + + def get_str2(self): + if self.err is None: + return None + return self.err[5] + + def get_str3(self): + if self.err is None: + return None + return self.err[6] + + def get_int1(self): + if self.err is None: + return None + return self.err[7] + + def get_int2(self): + if self.err is None: + return None + return self.err[8] + +# +# register the libvirt global error handler +# +def registerErrorHandler(f, ctx): + """Register a Python written function to for error reporting. + The function is called back as f(ctx, error), with error + being a list of information about the error being raised. + Returns 1 in case of success.""" + return libvirtmod.virRegisterErrorHandler(f,ctx) + +def openAuth(uri, auth, flags): + ret = libvirtmod.virConnectOpenAuth(uri, auth, flags) + if ret is None:raise libvirtError('virConnectOpenAuth() failed') + return virConnect(_obj=ret) + + +# +# Return library version. +# +def getVersion (name = None): + """If no name parameter is passed (or name is None) then the + version of the libvirt library is returned as an integer. + + If a name is passed and it refers to a driver linked to the + libvirt library, then this returns a tuple of (library version, + driver version). + + If the name passed refers to a non-existent driver, then you + will get the exception 'no support for hypervisor'. + + Versions numbers are integers: 1000000*major + 1000*minor + release.""" + if name is None: + ret = libvirtmod.virGetVersion (); + else: + ret = libvirtmod.virGetVersion (name); + if ret is None: raise libvirtError ("virGetVersion() failed") + return ret + + +# +# Invoke an EventHandle callback +# +def eventInvokeHandleCallback (watch, fd, event, callback, opaque): + """ + Invoke the Event Impl Handle Callback in C + """ + libvirtmod.virEventInvokeHandleCallback(watch, fd, event, callback, opaque); + +# +# Invoke an EventTimeout callback +# +def eventInvokeTimeoutCallback (timer, callback, opaque): + """ + Invoke the Event Impl Timeout Callback in C + """ + libvirtmod.virEventInvokeTimeoutCallback(timer, callback, opaque); + + -- cgit