]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
* python/*: update of the python bindings, fix names, add
authorDaniel Veillard <veillard@redhat.com>
Tue, 31 Jan 2006 10:24:12 +0000 (10:24 +0000)
committerDaniel Veillard <veillard@redhat.com>
Tue, 31 Jan 2006 10:24:12 +0000 (10:24 +0000)
  missing features like list of domains and domain info extraction
Daniel

ChangeLog
include/libvir.h
python/TODO
python/generator.py
python/libvir-python-api.xml
python/libvir.c
python/libvir_wrap.h
python/types.c

index 53972a54b9bd669cd17110af7e7de4837db7120f..ac2af04b07edb918b4c6bc57daf07dc1871a7370 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Tue Jan 31 11:22:51 CET 2006 Daniel Veillard <veillard@redhat.com>
+
+       * python/*: update of the python bindings, fix names, add
+         missing features like list of domains and domain info extraction
+
+Tue Jan 31 11:21:56 CET 2006 Daniel Veillard <veillard@redhat.com>
+
+       * configure.in libvir.spec.in NEWS docs/*: commiting the state of 0.0.2
+         release
+
 Sun Jan 29 11:55:13 CET 2006 Daniel Veillard <veillard@redhat.com>
 
        * NEWS docs/news.xsl: added stylesheet to generate NEWS file
index ddba307ec61ca3ece1ea2961fc88b555ec36df19..850c617bb74edfe4bb1a815cfbb39046897842d9 100644 (file)
@@ -167,7 +167,7 @@ typedef enum {
  * version * 1,000,000 + minor * 1000 + micro
  */
 
-#define LIBVIR_VERSION_NUMBER 1
+#define LIBVIR_VERSION_NUMBER 2
 
 int                    virGetVersion           (unsigned long *libVer,
                                                 const char *type,
index e4e505a34a04eb6578470a09ba33346301e4b409..f78c07b26a54f754df5e5b8f608dfce94520bc4a 100644 (file)
@@ -5,4 +5,4 @@
 
 Daniel Veillard
 
-$date$
+$Date$
index b489b568d26afe9a4970743eeaa4cf6e09e51f47..0c22482b77984f1ccfdbdd87cbb7617d4501c92c 100755 (executable)
@@ -202,6 +202,9 @@ def enum(type, name, value):
 #
 #######################################################################
 
+functions_failed = []
+functions_skipped = []
+
 skipped_modules = {
 }
 
@@ -254,8 +257,8 @@ foreign_encoding_args = (
 # Class methods which are written by hand in libvir.c but the Python-level
 # code is still automatically generated (so they are not in skip_function()).
 skip_impl = (
-    'xmlSaveFileTo',
-    'xmlSaveFormatFileTo',
+    'virConnectListDomainsID',
+    'virDomainGetInfo',
 )
 
 def skip_function(name):
@@ -479,9 +482,11 @@ def buildStubs():
        ret = print_function_wrapper(function, wrapper, export, include)
        if ret < 0:
            failed = failed + 1
+           functions_failed.append(function)
            del functions[function]
        if ret == 0:
            skipped = skipped + 1
+           functions_skipped.append(function)
            del functions[function]
        if ret == 1:
            nb_wrap = nb_wrap + 1
@@ -536,6 +541,10 @@ function_classes = {}
 
 function_classes["None"] = []
 
+function_post = {
+    'virDomainDestroy': "self._o = None",
+}
+
 def nameFixup(name, classe, type, file):
     listname = classe + "List"
     ll = len(listname)
@@ -557,6 +566,12 @@ def nameFixup(name, classe, type, file):
         func = string.lower(func[0:1]) + func[1:]
     else:
         func = name
+    if func == "iD":
+        func = "ID"
+    if func == "oSType":
+        func = "OSType"
+    if func == "xMLDesc":
+        func = "XMLDesc"
     return func
 
 
@@ -836,6 +851,8 @@ def buildWrappers():
                            classes.write(classes_type[arg[1]][0])
                    n = n + 1
                classes.write(")\n");
+               if function_post.has_key(name):
+                   classes.write("        %s\n" % (function_post[name]));
                if ret[0] != "void":
                    if classes_type.has_key(ret[0]):
                        #
@@ -893,6 +910,14 @@ def buildWrappers():
             classes.write("%s = %s\n" % (name,value))
         classes.write("\n");
 
+    if len(functions_skipped) != 0:
+       txt.write("\nFunctions skipped:\n")
+       for function in functions_skipped:
+           txt.write("    %s\n" % function)
+    if len(functions_failed) != 0:
+       txt.write("\nFunctions failed:\n")
+       for function in functions_failed:
+           txt.write("    %s\n" % function)
     txt.close()
     classes.close()
 
index 45076f52a7fd6957e382edad8f3d2aa6f84813a4..d90da8a27a4adec6702faf0e7d92688496dd23d8 100644 (file)
@@ -1,3 +1,15 @@
 <?xml version="1.0"?>
 <api name='libvir-python'>
+  <symbols>
+    <function name="virConnectListDomainsID" file='python'>
+      <info>Returns the list of the ID of the domains on the hypervisor</info>
+      <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
+      <return type='int *' info="the list of ID or None in case of error"/>
+    </function>
+    <function name='virDomainGetInfo' file='libvir' module='libvir'>
+      <info>Extract information about a domain. Note that if the connection used to get the domain is limited only a partial set of the informations can be extracted.</info>
+      <return type='int *' info='the list of informations or None in case of error'/>
+      <arg name='domain' type='virDomainPtr' info='a domain object'/>
+    </function>
+  </symbols>
 </api>
index 2f186601857f852998ee4deb7af44c2a1da6e6fd..5956fdd09d42c25277bc56149da03c1fc949dae5 100644 (file)
@@ -48,6 +48,58 @@ libvir_virConnectClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
     return(py_retval);
 }
 
+static PyObject *
+libvir_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED,
+                               PyObject *args) {
+    PyObject *py_retval;
+    int ids[500], c_retval, i;
+    virConnectPtr conn;
+    PyObject *pyobj_conn;
+
+
+    if (!PyArg_ParseTuple(args, (char *)"O:virConnectListDomains", &pyobj_conn))
+        return(NULL);
+    conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn);
+
+    c_retval = virConnectListDomains(conn, &ids[0], 500);
+    if (c_retval < 0) {
+        Py_INCREF(Py_None);
+       return(Py_None);
+    }
+    py_retval = PyList_New(c_retval);
+    for (i = 0;i < c_retval;i++) {
+        PyList_SetItem(py_retval, i, libvir_intWrap(ids[i]));
+    }
+    return(py_retval);
+}
+
+static PyObject *
+libvir_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    virDomainPtr domain;
+    PyObject *pyobj_domain;
+    virDomainInfo info;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetInfo", &pyobj_domain))
+        return(NULL);
+    domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
+
+    c_retval = virDomainGetInfo(domain, &info);
+    if (c_retval < 0) {
+        Py_INCREF(Py_None);
+       return(Py_None);
+    }
+    py_retval = PyList_New(5);
+    PyList_SetItem(py_retval, 0, libvir_intWrap((int) info.state));
+    PyList_SetItem(py_retval, 1, libvir_longWrap((long) info.maxMem));
+    PyList_SetItem(py_retval, 2, libvir_longWrap((long) info.memory));
+    PyList_SetItem(py_retval, 3, libvir_intWrap((int) info.nrVirtCpu));
+    PyList_SetItem(py_retval, 4,
+                   libvir_longlongWrap((unsigned long long) info.cpuTime));
+    return(py_retval);
+}
+
 /************************************************************************
  *                                                                     *
  *                     The registration stuff                          *
@@ -57,6 +109,8 @@ static PyMethodDef libvirMethods[] = {
 #include "libvir-export.c"
     {(char *) "virDomainFree", libvir_virDomainFree, METH_VARARGS, NULL},
     {(char *) "virConnectClose", libvir_virConnectClose, METH_VARARGS, NULL},
+    {(char *) "virConnectListDomainsID", libvir_virConnectListDomainsID, METH_VARARGS, NULL},
+    {(char *) "virDomainGetInfo", libvir_virDomainGetInfo, METH_VARARGS, NULL},
     {NULL, NULL, 0, NULL}
 };
 
index 31771d7826608bf9f0fe7a855141696bf189633d..41400c06ac87ebd54ce7c5a79f72ccc3d94125a8 100644 (file)
@@ -40,6 +40,7 @@ typedef struct {
 
 PyObject * libvir_intWrap(int val);
 PyObject * libvir_longWrap(long val);
+PyObject * libvir_longlongWrap(long long val);
 PyObject * libvir_charPtrWrap(char *str);
 PyObject * libvir_constcharPtrWrap(const char *str);
 PyObject * libvir_charPtrConstWrap(const char *str);
index 1f71198d1bd714bbbf34d1b30ccd48d3fe093f3c..3015c1d65a25abe7414ebc81dac9c4b26511cb87 100644 (file)
@@ -33,6 +33,18 @@ libvir_longWrap(long val)
     return (ret);
 }
 
+PyObject *
+libvir_longlongWrap(long long val)
+{
+    PyObject *ret;
+
+#ifdef DEBUG
+    printf("libvir_longWrap: val = %ld\n", val);
+#endif
+    ret = PyLong_FromUnsignedLongLong((unsigned long long) val);
+    return (ret);
+}
+
 PyObject *
 libvir_charPtrWrap(char *str)
 {