summaryrefslogtreecommitdiffstats
path: root/generator.py
diff options
context:
space:
mode:
authorGuannan Ren <gren@redhat.com>2013-08-21 16:07:20 +0800
committerJiri Denemark <jdenemar@redhat.com>2013-08-21 16:05:37 +0200
commitec6ed4d7c8f24cef96cb28a45b7f4baab02741fd (patch)
tree59996f54f70a396664cc7a085adacde4d50e686b /generator.py
parent60d87b704e7cb1251da46e825033eb3d35311ae2 (diff)
downloadlibvirt-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
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-xgenerator.py10
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]