mirror of
https://gitlab.com/libvirt/libvirt-python.git
synced 2025-08-03 08:21:58 +03:00
* python/*: update of the python bindings, fix names, add
missing features like list of domains and domain info extraction Daniel
This commit is contained in:
29
generator.py
29
generator.py
@ -202,6 +202,9 @@ def enum(type, name, value):
|
|||||||
#
|
#
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
functions_failed = []
|
||||||
|
functions_skipped = []
|
||||||
|
|
||||||
skipped_modules = {
|
skipped_modules = {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,8 +257,8 @@ foreign_encoding_args = (
|
|||||||
# Class methods which are written by hand in libvir.c but the Python-level
|
# 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()).
|
# code is still automatically generated (so they are not in skip_function()).
|
||||||
skip_impl = (
|
skip_impl = (
|
||||||
'xmlSaveFileTo',
|
'virConnectListDomainsID',
|
||||||
'xmlSaveFormatFileTo',
|
'virDomainGetInfo',
|
||||||
)
|
)
|
||||||
|
|
||||||
def skip_function(name):
|
def skip_function(name):
|
||||||
@ -479,9 +482,11 @@ def buildStubs():
|
|||||||
ret = print_function_wrapper(function, wrapper, export, include)
|
ret = print_function_wrapper(function, wrapper, export, include)
|
||||||
if ret < 0:
|
if ret < 0:
|
||||||
failed = failed + 1
|
failed = failed + 1
|
||||||
|
functions_failed.append(function)
|
||||||
del functions[function]
|
del functions[function]
|
||||||
if ret == 0:
|
if ret == 0:
|
||||||
skipped = skipped + 1
|
skipped = skipped + 1
|
||||||
|
functions_skipped.append(function)
|
||||||
del functions[function]
|
del functions[function]
|
||||||
if ret == 1:
|
if ret == 1:
|
||||||
nb_wrap = nb_wrap + 1
|
nb_wrap = nb_wrap + 1
|
||||||
@ -536,6 +541,10 @@ function_classes = {}
|
|||||||
|
|
||||||
function_classes["None"] = []
|
function_classes["None"] = []
|
||||||
|
|
||||||
|
function_post = {
|
||||||
|
'virDomainDestroy': "self._o = None",
|
||||||
|
}
|
||||||
|
|
||||||
def nameFixup(name, classe, type, file):
|
def nameFixup(name, classe, type, file):
|
||||||
listname = classe + "List"
|
listname = classe + "List"
|
||||||
ll = len(listname)
|
ll = len(listname)
|
||||||
@ -557,6 +566,12 @@ def nameFixup(name, classe, type, file):
|
|||||||
func = string.lower(func[0:1]) + func[1:]
|
func = string.lower(func[0:1]) + func[1:]
|
||||||
else:
|
else:
|
||||||
func = name
|
func = name
|
||||||
|
if func == "iD":
|
||||||
|
func = "ID"
|
||||||
|
if func == "oSType":
|
||||||
|
func = "OSType"
|
||||||
|
if func == "xMLDesc":
|
||||||
|
func = "XMLDesc"
|
||||||
return func
|
return func
|
||||||
|
|
||||||
|
|
||||||
@ -836,6 +851,8 @@ def buildWrappers():
|
|||||||
classes.write(classes_type[arg[1]][0])
|
classes.write(classes_type[arg[1]][0])
|
||||||
n = n + 1
|
n = n + 1
|
||||||
classes.write(")\n");
|
classes.write(")\n");
|
||||||
|
if function_post.has_key(name):
|
||||||
|
classes.write(" %s\n" % (function_post[name]));
|
||||||
if ret[0] != "void":
|
if ret[0] != "void":
|
||||||
if classes_type.has_key(ret[0]):
|
if classes_type.has_key(ret[0]):
|
||||||
#
|
#
|
||||||
@ -893,6 +910,14 @@ def buildWrappers():
|
|||||||
classes.write("%s = %s\n" % (name,value))
|
classes.write("%s = %s\n" % (name,value))
|
||||||
classes.write("\n");
|
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()
|
txt.close()
|
||||||
classes.close()
|
classes.close()
|
||||||
|
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<api name='libvir-python'>
|
<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>
|
</api>
|
||||||
|
54
libvir.c
54
libvir.c
@ -48,6 +48,58 @@ libvir_virConnectClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
|
|||||||
return(py_retval);
|
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 *
|
* The registration stuff *
|
||||||
@ -57,6 +109,8 @@ static PyMethodDef libvirMethods[] = {
|
|||||||
#include "libvir-export.c"
|
#include "libvir-export.c"
|
||||||
{(char *) "virDomainFree", libvir_virDomainFree, METH_VARARGS, NULL},
|
{(char *) "virDomainFree", libvir_virDomainFree, METH_VARARGS, NULL},
|
||||||
{(char *) "virConnectClose", libvir_virConnectClose, 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}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ typedef struct {
|
|||||||
|
|
||||||
PyObject * libvir_intWrap(int val);
|
PyObject * libvir_intWrap(int val);
|
||||||
PyObject * libvir_longWrap(long val);
|
PyObject * libvir_longWrap(long val);
|
||||||
|
PyObject * libvir_longlongWrap(long long val);
|
||||||
PyObject * libvir_charPtrWrap(char *str);
|
PyObject * libvir_charPtrWrap(char *str);
|
||||||
PyObject * libvir_constcharPtrWrap(const char *str);
|
PyObject * libvir_constcharPtrWrap(const char *str);
|
||||||
PyObject * libvir_charPtrConstWrap(const char *str);
|
PyObject * libvir_charPtrConstWrap(const char *str);
|
||||||
|
12
types.c
12
types.c
@ -33,6 +33,18 @@ libvir_longWrap(long val)
|
|||||||
return (ret);
|
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 *
|
PyObject *
|
||||||
libvir_charPtrWrap(char *str)
|
libvir_charPtrWrap(char *str)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user