diff options
author | Rob Crittenden <rcritten@redhat.com> | 2009-03-03 16:12:29 -0500 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2009-03-03 17:49:15 -0500 |
commit | dbbae00b173c354e39c6950c23e7fd2f0c146889 (patch) | |
tree | 10d6e05d9b68d16a5fbefa5bc61613350c2b4fcd /ipalib/parameters.py | |
parent | bd9f7cd72099fd4a93986be23ebdb702a7c3023b (diff) | |
download | freeipa-dbbae00b173c354e39c6950c23e7fd2f0c146889.tar.gz freeipa-dbbae00b173c354e39c6950c23e7fd2f0c146889.tar.xz freeipa-dbbae00b173c354e39c6950c23e7fd2f0c146889.zip |
Add maxvalue and minvalue kwargs and rules to Int and Float
Diffstat (limited to 'ipalib/parameters.py')
-rw-r--r-- | ipalib/parameters.py | 69 |
1 files changed, 67 insertions, 2 deletions
diff --git a/ipalib/parameters.py b/ipalib/parameters.py index 5bb2e4d66..4746e7652 100644 --- a/ipalib/parameters.py +++ b/ipalib/parameters.py @@ -27,8 +27,6 @@ TODO: to first name and last name) * Add the _rule_pattern() methods to `Bytes` and `Str` - - * Add maxvalue, minvalue kwargs and rules to `Int` and `Float` """ import re @@ -761,6 +759,39 @@ class Int(Number): type = int type_error = _('must be an integer') + kwargs = Param.kwargs + ( + ('minvalue', int, None), + ('maxvalue', int, None), + ) + + def __init__(self, name, *rules, **kw): + super(Number, self).__init__(name, *rules, **kw) + + if (self.minvalue > self.maxvalue) and (self.minvalue is not None and self.maxvalue is not None): + raise ValueError( + '%s: minvalue > maxvalue (minvalue=%r, maxvalue=%r)' % ( + self.nice, self.minvalue, self.maxvalue) + ) + + def _rule_minvalue(self, _, value): + """ + Check min constraint. + """ + assert type(value) is int + if value < self.minvalue: + return _('must be at least %(minvalue)d') % dict( + minvalue=self.minvalue, + ) + + def _rule_maxvalue(self, _, value): + """ + Check max constraint. + """ + assert type(value) is int + if value > self.maxvalue: + return _('can be at most %(maxvalue)d') % dict( + maxvalue=self.maxvalue, + ) class Float(Number): """ @@ -770,6 +801,40 @@ class Float(Number): type = float type_error = _('must be a decimal number') + kwargs = Param.kwargs + ( + ('minvalue', float, None), + ('maxvalue', float, None), + ) + + def __init__(self, name, *rules, **kw): + super(Number, self).__init__(name, *rules, **kw) + + if (self.minvalue > self.maxvalue) and (self.minvalue is not None and self.maxvalue is not None): + raise ValueError( + '%s: minvalue > maxvalue (minvalue=%r, maxvalue=%r)' % ( + self.nice, self.minvalue, self.maxvalue) + ) + + def _rule_minvalue(self, _, value): + """ + Check min constraint. + """ + assert type(value) is float + if value < self.minvalue: + return _('must be at least %(minvalue)f') % dict( + minvalue=self.minvalue, + ) + + def _rule_maxvalue(self, _, value): + """ + Check max constraint. + """ + assert type(value) is float + if value > self.maxvalue: + return _('can be at most %(maxvalue)f') % dict( + maxvalue=self.maxvalue, + ) + class Data(Param): """ |