[libvirt] [PATCH 1/4] python: add Python binding for virDomainGetSchedulerParametersFlags API
Daniel Veillard
veillard at redhat.com
Mon Jul 25 06:49:50 UTC 2011
On Fri, Jul 22, 2011 at 02:11:55PM +0900, Taku Izumi wrote:
>
> This patch adds the Python bindings for
> virDomainGetSchedulerParametersFlags API.
>
> Signed-off-by: Taku Izumi <izumi.taku at jp.fujitsu.com>
> ---
> python/libvirt-override-api.xml | 6 ++
> python/libvirt-override.c | 83 ++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 89 insertions(+)
>
> Index: libvirt/python/libvirt-override-api.xml
> ===================================================================
> --- libvirt.orig/python/libvirt-override-api.xml
> +++ libvirt/python/libvirt-override-api.xml
> @@ -151,6 +151,12 @@
> <return type='int' info='-1 in case of error, 0 in case of success.'/>
> <arg name='domain' type='virDomainPtr' info='pointer to domain object'/>
> </function>
> + <function name='virDomainGetSchedulerParametersFlags' file='python'>
> + <info>Get the scheduler parameters</info>
> + <return type='virSchedParameterPtr' info='None in case of error, returns a dictionary of params'/>
> + <arg name='domain' type='virDomainPtr' info='pointer to domain object'/>
> + <arg name='flags' type='int' info='an OR'ed set of virDomainModificationImpact'/>
> + </function>
> <function name='virDomainGetSchedulerType' file='python'>
> <info>Get the scheduler type.</info>
> <return type='char *' info='NULL in case of error. The caller must free the returned string.'/>
> Index: libvirt/python/libvirt-override.c
> ===================================================================
> --- libvirt.orig/python/libvirt-override.c
> +++ libvirt/python/libvirt-override.c
> @@ -291,6 +291,88 @@ libvirt_virDomainGetSchedulerParameters(
> }
>
> static PyObject *
> +libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED,
> + PyObject *args) {
> + virDomainPtr domain;
> + PyObject *pyobj_domain, *info;
> + char *c_retval;
> + int i_retval;
> + int nparams, i;
> + int flags;
flags are always unsigned int, but that's a minor change !
> + virTypedParameterPtr params;
> +
> + if (!PyArg_ParseTuple(args, (char *)"Oi:virDomainGetScedulerParametersFlags",
> + &pyobj_domain, &flags))
> + return(NULL);
> + domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
> +
> + LIBVIRT_BEGIN_ALLOW_THREADS;
> + c_retval = virDomainGetSchedulerType(domain, &nparams);
> + LIBVIRT_END_ALLOW_THREADS;
> +
> + if (c_retval == NULL)
> + return VIR_PY_NONE;
> + free(c_retval);
> +
> + if ((params = malloc(sizeof(*params)*nparams)) == NULL)
> + return VIR_PY_NONE;
> +
> + LIBVIRT_BEGIN_ALLOW_THREADS;
> + i_retval = virDomainGetSchedulerParametersFlags(domain, params, &nparams, flags);
> + LIBVIRT_END_ALLOW_THREADS;
> +
> + if (i_retval < 0) {
> + free(params);
> + return VIR_PY_NONE;
> + }
> +
> + /* convert to a Python tuple of long objects */
> + if ((info = PyDict_New()) == NULL) {
> + free(params);
> + return VIR_PY_NONE;
> + }
> + for (i = 0 ; i < nparams ; i++) {
> + PyObject *key, *val;
> +
> + switch (params[i].type) {
> + case VIR_TYPED_PARAM_INT:
> + val = PyInt_FromLong((long)params[i].value.i);
> + break;
> +
> + case VIR_TYPED_PARAM_UINT:
> + val = PyInt_FromLong((long)params[i].value.ui);
> + break;
> +
> + case VIR_TYPED_PARAM_LLONG:
> + val = PyLong_FromLongLong((long long)params[i].value.l);
> + break;
> +
> + case VIR_TYPED_PARAM_ULLONG:
> + val = PyLong_FromLongLong((long long)params[i].value.ul);
> + break;
> +
> + case VIR_TYPED_PARAM_DOUBLE:
> + val = PyFloat_FromDouble((double)params[i].value.d);
> + break;
> +
> + case VIR_TYPED_PARAM_BOOLEAN:
> + val = PyBool_FromLong((long)params[i].value.b);
> + break;
> +
> + default:
> + free(params);
> + Py_DECREF(info);
> + return VIR_PY_NONE;
> + }
> +
> + key = libvirt_constcharPtrWrap(params[i].field);
> + PyDict_SetItem(info, key, val);
> + }
> + free(params);
> + return(info);
> +}
> +
> +static PyObject *
> libvirt_virDomainSetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED,
> PyObject *args) {
> virDomainPtr domain;
> @@ -3833,6 +3915,7 @@ static PyMethodDef libvirtMethods[] = {
> {(char *) "virNodeGetCellsFreeMemory", libvirt_virNodeGetCellsFreeMemory, METH_VARARGS, NULL},
> {(char *) "virDomainGetSchedulerType", libvirt_virDomainGetSchedulerType, METH_VARARGS, NULL},
> {(char *) "virDomainGetSchedulerParameters", libvirt_virDomainGetSchedulerParameters, METH_VARARGS, NULL},
> + {(char *) "virDomainGetSchedulerParametersFlags", libvirt_virDomainGetSchedulerParametersFlags, METH_VARARGS, NULL},
> {(char *) "virDomainSetSchedulerParameters", libvirt_virDomainSetSchedulerParameters, METH_VARARGS, NULL},
> {(char *) "virDomainSetBlkioParameters", libvirt_virDomainSetBlkioParameters, METH_VARARGS, NULL},
> {(char *) "virDomainGetBlkioParameters", libvirt_virDomainGetBlkioParameters, METH_VARARGS, NULL},
>
Looks fine, ACK, I will push this
thanks !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list