diff options
author | Guannan Ren <gren@redhat.com> | 2013-08-21 16:07:20 +0800 |
---|---|---|
committer | Jiri Denemark <jdenemar@redhat.com> | 2013-08-21 16:05:37 +0200 |
commit | ec6ed4d7c8f24cef96cb28a45b7f4baab02741fd (patch) | |
tree | 59996f54f70a396664cc7a085adacde4d50e686b /generator.py | |
parent | 60d87b704e7cb1251da46e825033eb3d35311ae2 (diff) | |
download | libvirt-python-v6-libvirt-0.10.2-26.el6.tar.gz libvirt-python-v6-libvirt-0.10.2-26.el6.tar.xz libvirt-python-v6-libvirt-0.10.2-26.el6.zip |
python: fix bindings that don't raise an exceptionlibvirt-0.10.2-29.el6libvirt-0.10.2-28.el6libvirt-0.10.2-27.el6libvirt-0.10.2-26.el6libvirt-0.10.2-25.el6libvirt-0.10.2-24.el6libvirt-0.10.2-23.el6
Resovles: https://bugzilla.redhat.com/show_bug.cgi?id=912170
(cherry picked from commit 4b143ab23173000d1afa258726be0ff38cf2b386)
For example:
>>> dom.memoryStats()
libvir: QEMU Driver error : Requested operation is not valid:\
domain is not running
There are six such python API functions like so.
The root reason is that generator.py script checks the type of return
value of a python stub function defined in libvirt-api.xml or
libvirt-override-api.xml to see whether to add the raise clause or not
in python wrapper code in libvirt.py.
The type of return value is supposed to be C types.
For those stub functions which return python non-integer data type like
string, list, tuple, dictionary, the existing type in functions varies
from each other which leads problem like this.
Currently, in generator.py, it maintains a buggy whitelist for stub functions
returning a list type. I think it is easy to forget adding new function name
in the whitelist.
This patch makes the value of type consistent with C type "char *"
in libvirt-override-api.xml. For python, any of types could be printed
as string, so I choose "char *" in this case. And the comment in xml
could explain it when adding new function definition.
<function name='virNodeGetCPUStats' file='python'>
...
- <return type='virNodeCPUStats' info='...'/>
+ <return type='char *' info='...'/>
...
</function>
Conflicts:
python/libvirt-override-api.xml
*no virDomainGetJobStats and virNodeGetCPUMap APIs in RHEL6.5
Diffstat (limited to 'generator.py')
-rwxr-xr-x | generator.py | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/generator.py b/generator.py index 9096f9e..9bd64b7 100755 --- a/generator.py +++ b/generator.py @@ -925,11 +925,9 @@ functions_list_exception_test = { } functions_list_default_test = "%s is None" -def is_list_type (name): - whitelist = [ "virDomainBlockStats", - "virDomainInterfaceStats" ] +def is_python_noninteger_type (name): - return name[-1:] == "*" or name in whitelist + return name[-1:] == "*" def nameFixup(name, classe, type, file): # avoid a desastrous clash @@ -1304,7 +1302,7 @@ def buildWrappers(module): ("ret", name)) classes.write(" return ret\n") - elif is_list_type (ret[0]): + elif is_python_noninteger_type (ret[0]): if not functions_noexcept.has_key (name): if functions_list_exception_test.has_key (name): test = functions_list_exception_test[name] @@ -1574,7 +1572,7 @@ def buildWrappers(module): classes.write (" return ret\n") - elif is_list_type (ret[0]): + elif is_python_noninteger_type (ret[0]): if not functions_noexcept.has_key (name): if functions_list_exception_test.has_key (name): test = functions_list_exception_test[name] |