]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
python: set default value to optional arguments
authorGuannan Ren <gren@redhat.com>
Tue, 26 Mar 2013 04:34:49 +0000 (12:34 +0800)
committerGuannan Ren <gren@redhat.com>
Tue, 26 Mar 2013 04:34:49 +0000 (12:34 +0800)
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

index 0237374b67947c8ff42dd861cdaacb9ceec2fbec..8c380bb64ae9525ae69e4492b7aa84630ad631d2 100755 (executable)
@@ -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 re.search("^\(?\optional\)?", info) is not None
 # Functions returning lists which need special rules to check for errors
 # and raise exceptions.
 functions_list_exception_test = {
@@ -1332,6 +1334,11 @@ def buildWrappers(module):
                 if n != 0:
                     classes.write(", ")
                 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
             classes.write("):\n")
             writeDoc(module, name, args, '    ', classes)
@@ -1488,9 +1495,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