diff options
| author | Giampaolo Lauria <lauria2@yahoo.com> | 2011-07-18 16:48:03 -0400 | 
|---|---|---|
| committer | Andrew Tridgell <tridge@samba.org> | 2011-07-21 11:44:31 +1000 | 
| commit | 452e50919efcd5d92df2bfad48ef106cd75ebad9 (patch) | |
| tree | ef185a53a329cfc1f6e91c992c78d8124d554691 /source4/scripting/python | |
| parent | f03a059814ab757a112ea4504ffe8b933a905e3d (diff) | |
| download | samba-452e50919efcd5d92df2bfad48ef106cd75ebad9.tar.gz samba-452e50919efcd5d92df2bfad48ef106cd75ebad9.tar.bz2 samba-452e50919efcd5d92df2bfad48ef106cd75ebad9.zip | |
samba-tool: Fixed bugs to determine min and max # of allowed arguments
Fixed the bugs in the code to determine both the min and the max # of allowed arguments
Changed the argument suffix convention from "*" to "+" to represent one or more arguments as:
 1. It follows the Regular expression convention ("*" means 0 or more)
 2. It is what was missing in terms of functionality
NB Currently, no command is using the "*/+", but it is a good thing to have to help out the validation of the args if/when in the future
we have such need
Signed-off-by: Andrew Tridgell <tridge@samba.org>
Diffstat (limited to 'source4/scripting/python')
| -rw-r--r-- | source4/scripting/python/samba/netcmd/__init__.py | 21 | 
1 files changed, 14 insertions, 7 deletions
| diff --git a/source4/scripting/python/samba/netcmd/__init__.py b/source4/scripting/python/samba/netcmd/__init__.py index 05ed321ef9..e7ec1f7836 100644 --- a/source4/scripting/python/samba/netcmd/__init__.py +++ b/source4/scripting/python/samba/netcmd/__init__.py @@ -124,17 +124,24 @@ class Command(object):                  if option.dest is not None:                      del kwargs[option.dest]          kwargs.update(optiongroups) + +        # Check for a min a max number of allowed arguments, whenever possible +        # The suffix "?" means zero or one occurence +        # The suffix "+" means at least one occurence          min_args = 0          max_args = 0 +        undetermined_max_args = False          for i, arg in enumerate(self.takes_args): -            if arg[-1] not in ("?", "*"): -                min_args += 1 -            max_args += 1 -            if arg[-1] == "*": -                max_args = -1 -        if len(args) < min_args or (max_args != -1 and len(args) > max_args): -            self.usage(*args) +            if arg[-1] != "?": +               min_args += 1 +            if arg[-1] == "+": +               undetermined_max_args = True +            else: +               max_args += 1 +        if (len(args) < min_args) or (undetermined_max_args == False and len(args) > max_args): +            parser.print_usage()              return -1 +          try:              return self.run(*args, **kwargs)          except Exception, e: | 
