summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorGiampaolo Lauria <lauria2@yahoo.com>2011-07-18 16:48:03 -0400
committerAndrew Tridgell <tridge@samba.org>2011-07-21 11:44:31 +1000
commit452e50919efcd5d92df2bfad48ef106cd75ebad9 (patch)
treeef185a53a329cfc1f6e91c992c78d8124d554691 /source4
parentf03a059814ab757a112ea4504ffe8b933a905e3d (diff)
downloadsamba-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')
-rw-r--r--source4/scripting/python/samba/netcmd/__init__.py21
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: