summaryrefslogtreecommitdiffstats
path: root/ipalib/public.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipalib/public.py')
-rw-r--r--ipalib/public.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index b22eff0e..003e0d72 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -214,12 +214,39 @@ class Command(plugable.Plugin):
options = tuple()
takes_args = tuple()
+ def __init__(self):
+ self.args = plugable.NameSpace(self.__check_args(), sort=False)
+
def get_args(self):
return self.takes_args
def get_options(self):
return self.options
+ def __check_args(self):
+ optional = False
+ multivalue = False
+ for arg in self.get_args():
+ if type(arg) is str:
+ arg = Option(arg, '', ipa_types.Unicode(), required=True)
+ elif not isinstance(arg, Option):
+ raise TypeError(
+ 'arg: need %r or %r; got %r' % (str, Option, arg)
+ )
+ if optional and arg.required:
+ raise ValueError(
+ '%s: required argument after optional' % arg.name
+ )
+ if multivalue:
+ raise ValueError(
+ '%s: only final argument can be multivalue' % arg.name
+ )
+ if not arg.required:
+ optional = True
+ if arg.multivalue:
+ multivalue = True
+ yield arg
+
def __get_Option(self):
"""
Returns the NameSpace containing the Option instances.