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.t...@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&apos;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/
dan...@veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to