summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2010-07-27 16:35:23 -0400
committerRob Crittenden <rcritten@redhat.com>2010-08-06 15:32:37 -0400
commit2d7d047cbf9375a4c75196f13ac1e0c439ae9e8b (patch)
treec30749ec5472dcbfb54165ec5f0c28f87377fe08 /ipalib
parent252b73fb3ec3cfb6c5efb4b93db321eedd3745e1 (diff)
downloadfreeipa-2d7d047cbf9375a4c75196f13ac1e0c439ae9e8b.tar.gz
freeipa-2d7d047cbf9375a4c75196f13ac1e0c439ae9e8b.tar.xz
freeipa-2d7d047cbf9375a4c75196f13ac1e0c439ae9e8b.zip
Add optional error message to pattern validator
The pattern validator by default displays the pattern that is being matched against. This isn't helpful, particularly for very hairy patterns. This adds a new parameter, pattern_errmsg, that is displayed on errors if set. ticket #11
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/parameters.py12
-rw-r--r--ipalib/plugins/group.py3
-rw-r--r--ipalib/plugins/user.py3
3 files changed, 15 insertions, 3 deletions
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index f97c42218..c86db758e 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -1082,6 +1082,7 @@ class Data(Param):
('maxlength', int, None),
('length', int, None),
('pattern', (basestring,), None),
+ ('pattern_errmsg', (basestring,), None),
)
def __init__(self, name, *rules, **kw):
@@ -1123,9 +1124,12 @@ class Data(Param):
"""
assert type(value) is self.type
if self.re.match(value) is None:
- return _('must match pattern "%(pattern)s"') % dict(
- pattern=self.pattern,
- )
+ if self.re_errmsg:
+ return self.re_errmsg % dict(pattern=self.pattern,)
+ else:
+ return _('must match pattern "%(pattern)s"') % dict(
+ pattern=self.pattern,
+ )
class Bytes(Data):
@@ -1148,6 +1152,7 @@ class Bytes(Data):
self.re = None
else:
self.re = re.compile(kw['pattern'])
+ self.re_errmsg = kw.get('pattern_errmsg', None)
super(Bytes, self).__init__(name, *rules, **kw)
def _rule_minlength(self, _, value):
@@ -1201,6 +1206,7 @@ class Str(Data):
self.re = None
else:
self.re = re.compile(kw['pattern'], re.UNICODE)
+ self.re_errmsg = kw.get('pattern_errmsg', None)
super(Str, self).__init__(name, *rules, **kw)
def _convert_scalar(self, value, index=None):
diff --git a/ipalib/plugins/group.py b/ipalib/plugins/group.py
index 2558c38ab..4fd630d42 100644
--- a/ipalib/plugins/group.py
+++ b/ipalib/plugins/group.py
@@ -89,6 +89,9 @@ class group(LDAPObject):
takes_params = (
Str('cn',
+ pattern='^[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]?$',
+ pattern_errmsg='may only include letters, numbers, _, -, . and $',
+ maxlength=33,
cli_name='name',
label=_('Group name'),
primary_key=True,
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py
index de5ff2d27..f698aa703 100644
--- a/ipalib/plugins/user.py
+++ b/ipalib/plugins/user.py
@@ -72,6 +72,9 @@ class user(LDAPObject):
takes_params = (
Str('uid',
+ pattern='^[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]?$',
+ pattern_errmsg='may only include letters, numbers, _, -, . and $',
+ maxlength=33,
cli_name='login',
label=_('User login'),
primary_key=True,