[libvirt] [PATCH v2] python: add virDomainGetCPUStats python binding API
Guannan Ren
gren at redhat.com
Wed Mar 21 13:47:45 UTC 2012
On 03/21/2012 09:23 PM, Eric Blake wrote:
> On 03/21/2012 07:22 AM, Guannan Ren wrote:
>> On 03/21/2012 08:07 PM, Eric Blake wrote:
>>> Maybe we need a wrapper:
>>>
>>> int libvirt_boolUnwrap(PyObject *obj, bool *value) {
>>> int ret = PyObject_IsTrue(obj);
>>> if (ret< 0)
>>> return ret;
>>> *value = ret> 0;
>>> return 0;
>>> }
>>>
>>> and then callers become:
>>>
>>> if (libvirt_boolUnwrap(value,&temp->value.b)< 0)
>>> goto cleanup;
>>>
>> The libvirt_boolUnwrap is okay to be flexible like this, we still need
>> the caller to check whether or not the value given from user python code
>> is boolean argument, we need to do the data type checking in python C
>> API
>> before invoking the wrapper.
> But that's my point - the wrapper should be doing the type checking
> (PyObject_IsTrue already _does_ some type checking - that's why it can
> fail with -1 with an already decent python exception created). Callers
> shouldn't have to duplicate the work which can be done in just one
> place, but instead just pass in an object of unknown type and let the
> wrapper do the work of both type validation and conversion if the type
> was usable as a boolean.
>
I get your points, sorry I don't express my idea clearly.
According to my experience, for PyObject_IsTrue, all of non-null
objects
belongs to True, null objects like {}, ""(str) ,None, False
counts as False, it's good way to work with Pybool_check to ensure
the type of value given by upper python code is right type. The
wrapper
should do the job.
More information about the libvir-list
mailing list