diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-24 17:55:29 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-09-24 17:55:29 +0000 |
commit | 11a07008b896ac995755b2f2a90e6089ca1344a5 (patch) | |
tree | 44588862549fbcdb1f44a126b58fda3e23a4fe20 /ipalib/frontend.py | |
parent | ac7bdf8790a6b18eccc72af5dc2c5b59133546cd (diff) | |
download | freeipa.git-11a07008b896ac995755b2f2a90e6089ca1344a5.tar.gz freeipa.git-11a07008b896ac995755b2f2a90e6089ca1344a5.tar.xz freeipa.git-11a07008b896ac995755b2f2a90e6089ca1344a5.zip |
339: Added parse_param_spec() function and corresponding unit tests
Diffstat (limited to 'ipalib/frontend.py')
-rw-r--r-- | ipalib/frontend.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/ipalib/frontend.py b/ipalib/frontend.py index 82d96643..1ff62023 100644 --- a/ipalib/frontend.py +++ b/ipalib/frontend.py @@ -84,6 +84,38 @@ class DefaultFrom(plugable.ReadOnly): return None +def parse_param_spec(spec): + """ + Parse param spec to get name, required, and multivalue. + + The ``spec`` string determines the param name, whether the param is + required, and whether the param is multivalue according the following + syntax: + + name => required=True, multivalue=False + name? => required=False, multivalue=False + name+ => required=True, multivalue=True + name* => required=False, multivalue=True + + :param spec: A spec string. + """ + if type(spec) is not str: + raise_TypeError(spec, str, 'spec') + if len(spec) < 2: + raise ValueError( + 'param spec must be at least 2 characters; got %r' % spec + ) + _map = { + '?': dict(required=False, multivalue=False), + '*': dict(required=False, multivalue=True), + '+': dict(required=True, multivalue=True), + } + end = spec[-1] + if end in _map: + return (spec[:-1], _map[end]) + return (spec, dict(required=True, multivalue=False)) + + class Param(plugable.ReadOnly): __nones = (None, '', tuple(), []) |