[libvirt] Python binding APIs strict or loose

Hi There is a question. we need strict python binding API or loose one. For example: The setSchedulerParameters(), it accepts one of parameters: 'vcpu_quota' In C its type is of 'long long', then we need a conversion from PyInt/PyLong to 'long long' by using cpython function 'PyLong_AsLongLong'. The problem is when the user python pass in a value of type Pyfloat instead of PyInt/PyLong, the cpython function drops the fraction part of the value automatically, Is it what we want or we need to add a type checking to ensure that the type of value passed in is PyInt/PyLong, otherwise, we raise an exception.
dom.schedulerParameters() {'vcpu_quota': -1L, 'vcpu_period': 100000L, 'cpu_shares': 500L}
dom.setSchedulerParameters({'vcpu_quota': 10.88}) works as dom.setSchedulerParameters({'vcpu_quota': 10})
Any idea? Guannan Ren

On 04/20/2012 04:23 AM, Guannan Ren wrote:
Hi
There is a question. we need strict python binding API or loose one.
For example: The setSchedulerParameters(), it accepts one of parameters: 'vcpu_quota' In C its type is of 'long long', then we need a conversion from PyInt/PyLong to 'long long' by using cpython function 'PyLong_AsLongLong'. The problem is when the user python pass in a value of type Pyfloat instead of PyInt/PyLong, the cpython function drops the fraction part of the value automatically, Is it what we want or we need to add a type checking to ensure that the type of value passed in is PyInt/PyLong, otherwise, we raise an exception.
Or a third option - if it is not PyLong, but is a floating point, then validate that conversion from floating point to integer and back does not change the value (that is, there was no fractional value to begin with). I know C would just truncate unconditionally, but I don't know enough python coding conventions to know if python programmers expect the same behavior as C, or if they expect something else. But I do know that whatever we pick should be consistent - our current approach of accepting but truncating fractions for int while rejecting fractions for long long is not consistent. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
participants (2)
-
Eric Blake
-
Guannan Ren