mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
339: Added parse_param_spec() function and corresponding unit tests
This commit is contained in:
parent
ac7bdf8790
commit
11a07008b8
@ -84,6 +84,38 @@ class DefaultFrom(plugable.ReadOnly):
|
|||||||
return None
|
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):
|
class Param(plugable.ReadOnly):
|
||||||
__nones = (None, '', tuple(), [])
|
__nones = (None, '', tuple(), [])
|
||||||
|
|
||||||
|
@ -111,6 +111,18 @@ class test_DefaultFrom(ClassChecker):
|
|||||||
assert o(**kw_copy) is None
|
assert o(**kw_copy) is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_param_spec():
|
||||||
|
"""
|
||||||
|
Test the `frontend.parse_param_spec` function.
|
||||||
|
"""
|
||||||
|
f = frontend.parse_param_spec
|
||||||
|
|
||||||
|
assert f('name') == ('name', dict(required=True, multivalue=False))
|
||||||
|
assert f('name?') == ('name', dict(required=False, multivalue=False))
|
||||||
|
assert f('name*') == ('name', dict(required=False, multivalue=True))
|
||||||
|
assert f('name+') == ('name', dict(required=True, multivalue=True))
|
||||||
|
|
||||||
|
|
||||||
class test_Param(ClassChecker):
|
class test_Param(ClassChecker):
|
||||||
"""
|
"""
|
||||||
Test the `frontend.Param` class.
|
Test the `frontend.Param` class.
|
||||||
|
Loading…
Reference in New Issue
Block a user