[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Libvir] [PATCH] Add Python binding for virGetVersion



Thanks Mark,

Here's a patch which does that.

Example usage:

>>> import libvirt;
>>> libvirt.getVersion ();
2002
>>> libvirt.getVersion ("QEMU");
(2002, 2002)
>>> libvirt.getVersion ("Test");
(2002, 2002)
>>> libvirt.getVersion ("Xen");
(2002, 3000001)
>>> libvirt.getVersion (None);
2002

Rich.

--
Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom.  Registered in
England and Wales under Company Registration No. 03798903
Index: python/generator.py
===================================================================
RCS file: /data/cvs/libvirt/python/generator.py,v
retrieving revision 1.20
diff -u -r1.20 generator.py
--- python/generator.py	16 Apr 2007 12:37:59 -0000	1.20
+++ python/generator.py	29 May 2007 11:41:02 -0000
@@ -287,6 +287,8 @@
         return 1
     if name == "vshRunConsole":
         return 1
+    if name == "virGetVersion":
+        return 1
     return 0
 
 def print_function_wrapper(name, output, export, include):
Index: python/libvir.c
===================================================================
RCS file: /data/cvs/libvirt/python/libvir.c,v
retrieving revision 1.21
diff -u -r1.21 libvir.c
--- python/libvir.c	10 Apr 2007 23:15:58 -0000	1.21
+++ python/libvir.c	29 May 2007 11:41:02 -0000
@@ -179,6 +179,36 @@
  ************************************************************************/
 
 static PyObject *
+libvirt_virGetVersion (PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
+{
+    char *type = NULL;
+    unsigned long libVer, typeVer = 0;
+    int c_retval;
+
+    if (!PyArg_ParseTuple (args, (char *) "z", &type))
+        return NULL;
+
+    LIBVIRT_BEGIN_ALLOW_THREADS;
+
+    if (type == NULL)
+        c_retval = virGetVersion (&libVer, NULL, NULL);
+    else
+        c_retval = virGetVersion (&libVer, type, &typeVer);
+
+    LIBVIRT_END_ALLOW_THREADS;
+
+    if (c_retval == -1) {
+        Py_INCREF(Py_None);
+        return (Py_None);
+    }
+
+    if (type == NULL)
+        return PyInt_FromLong (libVer);
+    else
+        return Py_BuildValue ((char *) "kk", libVer, typeVer);
+}
+
+static PyObject *
 libvirt_virDomainFree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
     PyObject *py_retval;
     int c_retval;
@@ -628,6 +658,7 @@
  ************************************************************************/
 static PyMethodDef libvirtMethods[] = {
 #include "libvirt-export.c"
+    {(char *) "virGetVersion", libvirt_virGetVersion, METH_VARARGS, NULL},
     {(char *) "virDomainFree", libvirt_virDomainFree, METH_VARARGS, NULL},
     {(char *) "virConnectClose", libvirt_virConnectClose, METH_VARARGS, NULL},
     {(char *) "virConnectListDomainsID", libvirt_virConnectListDomainsID, METH_VARARGS, NULL},
@@ -664,3 +695,17 @@
 
     initialized = 1;
 }
+
+/*
+ * vim: set tabstop=4:
+ * vim: set shiftwidth=4:
+ * vim: set expandtab:
+ */
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */
Index: python/libvir.py
===================================================================
RCS file: /data/cvs/libvirt/python/libvir.py,v
retrieving revision 1.4
diff -u -r1.4 libvir.py
--- python/libvir.py	16 Apr 2007 12:37:59 -0000	1.4
+++ python/libvir.py	29 May 2007 11:41:02 -0000
@@ -83,6 +83,26 @@
        Returns 1 in case of success."""
     return libvirtmod.virRegisterErrorHandler(f,ctx)
 
+#
+# 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."""
+    ret = libvirtmod.virGetVersion (name);
+    if ret is None: raise libvirtError ("virGetVersion() failed")
+    return ret
+
+
 # WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
 #
 # Everything before this line comes from libvir.py

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]