summaryrefslogtreecommitdiffstats
path: root/ipalib/parameters.py
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2009-03-03 16:12:29 -0500
committerRob Crittenden <rcritten@redhat.com>2009-03-03 17:49:15 -0500
commitdbbae00b173c354e39c6950c23e7fd2f0c146889 (patch)
tree10d6e05d9b68d16a5fbefa5bc61613350c2b4fcd /ipalib/parameters.py
parentbd9f7cd72099fd4a93986be23ebdb702a7c3023b (diff)
downloadfreeipa-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.py69
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):
"""