On 03/25/2013 10:18 AM, Guannan Ren wrote:
When prefixing with string (optional) or optional in the description
of arguments to libvirt C APIs, in python, these arguments will be
set as optional arugments, for example:
* virDomainSaveFlags:
* @domain: a domain object
* @to: path for the output file
* @dxml: (optional) XML config for adjusting guest xml used on restore
* @flags: bitwise-OR of virDomainSaveRestoreFlags
the corresponding python APIs is
restoreFlags(self, frm, dxml=None, flags=0)
The following python APIs are changed to:
blockCommit(self, disk, base, top, bandwidth=0, flags=0)
blockPull(self, disk, bandwidth=0, flags=0)
blockRebase(self, disk, base, bandwidth=0, flags=0)
migrate(self, dconn, flags=0, dname=None, uri=None, bandwidth=0)
migrate2(self, dconn, dxml=None, flags=0, dname=None, uri=None, bandwidth=0)
migrateToURI(self, duri, flags=0, dname=None, bandwidth=0)
migrateToURI2(self, dconnuri=None, miguri=None, dxml=None, flags=0, \
dname=None, bandwidth=0)
saveFlags(self, to, dxml=None, flags=0)
migrate(self, domain, flags=0, dname=None, uri=None, bandwidth=0)
migrate2(self, domain, dxml=None, flags=0, dname=None, uri=None, bandwidth=0)
restoreFlags(self, frm, dxml=None, flags=0)
---
python/generator.py | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/python/generator.py b/python/generator.py
index 0237374..7586ffc 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -1005,6 +1005,8 @@ functions_int_default_test = "%s == -1"
def is_integral_type (name):
return not re.search ("^(unsigned)? ?(int|long)$", name) is None
+def is_optional_arg(info):
+ return not re.search("^\(?\optional\)?", info) is None
Use "is not None" in here, I believe it is described in best practices.
# Functions returning lists which need special rules to check for
errors
# and raise exceptions.
functions_list_exception_test = {
@@ -1488,9 +1490,12 @@ def buildWrappers(module):
for arg in args:
if n != index:
classes.write(", %s" % arg[0])
+ if arg[0] == "flags" or is_optional_arg(arg[2]):
+ if is_integral_type(arg[1]):
+ classes.write("=0")
+ else:
+ classes.write("=None")
n = n + 1
- if arg[0] == "flags":
- classes.write("=0")
classes.write("):\n")
writeDoc(module, name, args, ' ', classes)
n = 0
We have a check for flags being always unsigned long, so I see no place
this could make any problems.
ACK,
Martin