diff options
-rw-r--r-- | TODO | 2 | ||||
-rwxr-xr-x | generator.py | 29 | ||||
-rw-r--r-- | libvir-python-api.xml | 12 | ||||
-rw-r--r-- | libvir.c | 54 | ||||
-rw-r--r-- | libvir_wrap.h | 1 | ||||
-rw-r--r-- | types.c | 12 |
6 files changed, 107 insertions, 3 deletions
@@ -5,4 +5,4 @@ Daniel Veillard -$date$ +$Date$ diff --git a/generator.py b/generator.py index b489b56..0c22482 100755 --- a/generator.py +++ b/generator.py @@ -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() diff --git a/libvir-python-api.xml b/libvir-python-api.xml index 45076f5..d90da8a 100644 --- a/libvir-python-api.xml +++ b/libvir-python-api.xml @@ -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> @@ -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} }; diff --git a/libvir_wrap.h b/libvir_wrap.h index 31771d7..41400c0 100644 --- a/libvir_wrap.h +++ b/libvir_wrap.h @@ -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); @@ -34,6 +34,18 @@ libvir_longWrap(long val) } 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) { PyObject *ret; |