[libvirt] [PATCH] python: set default value to optional arguments

Martin Kletzander mkletzan at redhat.com
Mon Mar 25 15:28:20 UTC 2013


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




More information about the libvir-list mailing list