summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2009-01-14 11:25:26 -0700
committerJason Gerard DeRose <jderose@redhat.com>2009-01-14 11:25:26 -0700
commit47e8b1c0b75b19765d8682e52dcdcfcd66b7760b (patch)
tree27ab384aa1e1a8b83ce6da6c3de9f69ae7d3e86a /ipalib
parent3e201dfff6d96f415a7f7d7f6010e97877b5a5c0 (diff)
downloadfreeipa-47e8b1c0b75b19765d8682e52dcdcfcd66b7760b.tar.gz
freeipa-47e8b1c0b75b19765d8682e52dcdcfcd66b7760b.tar.xz
freeipa-47e8b1c0b75b19765d8682e52dcdcfcd66b7760b.zip
Removed deprecited ipa_types.py and test_ipa_types.py
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/ipa_types.py189
1 files changed, 0 insertions, 189 deletions
diff --git a/ipalib/ipa_types.py b/ipalib/ipa_types.py
deleted file mode 100644
index 583cceed8..000000000
--- a/ipalib/ipa_types.py
+++ /dev/null
@@ -1,189 +0,0 @@
-# Authors:
-# Jason Gerard DeRose <jderose@redhat.com>
-#
-# Copyright (C) 2008 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-"""
-Type system for coercing and normalizing input values.
-"""
-
-import re
-from plugable import ReadOnly, lock
-import errors
-
-
-def check_min_max(min_value, max_value, min_name, max_name):
- assert type(min_name) is str, 'min_name must be an str'
- assert type(max_name) is str, 'max_name must be an str'
- for (name, value) in [(min_name, min_value), (max_name, max_value)]:
- if not (value is None or type(value) is int):
- raise TypeError(
- '%s must be an int or None, got: %r' % (name, value)
- )
- if None not in (min_value, max_value) and min_value > max_value:
- d = dict(
- k0=min_name,
- v0=min_value,
- k1=max_name,
- v1=max_value,
- )
- raise ValueError(
- '%(k0)s > %(k1)s: %(k0)s=%(v0)r, %(k1)s=%(v1)r' % d
- )
-
-
-class Type(ReadOnly):
- """
- Base class for all IPA types.
- """
-
- def __init__(self, type_):
- if type(type_) is not type:
- raise TypeError('%r is not %r' % (type(type_), type))
- allowed = (bool, int, float, unicode)
- if type_ not in allowed:
- raise ValueError('not an allowed type: %r' % type_)
- self.type = type_
- # FIXME: This should be replaced with a more user friendly message
- # as this is what is returned to the user.
- self.conversion_error = 'Must be a %r' % self.type
- lock(self)
-
- def __get_name(self):
- """
- Convenience property to return the class name.
- """
- return self.__class__.__name__
- name = property(__get_name)
-
- def convert(self, value):
- try:
- return self.type(value)
- except (TypeError, ValueError):
- return None
-
- def validate(self, value):
- pass
-
- def __call__(self, value):
- if value is None:
- raise TypeError('value cannot be None')
- if type(value) is self.type:
- return value
- return self.convert(value)
-
-
-class Bool(Type):
- def __init__(self, true='Yes', false='No'):
- if true is None:
- raise TypeError('`true` cannot be None')
- if false is None:
- raise TypeError('`false` cannot be None')
- if true == false:
- raise ValueError(
- 'cannot be equal: true=%r, false=%r' % (true, false)
- )
- self.true = true
- self.false = false
- super(Bool, self).__init__(bool)
-
- def convert(self, value):
- if value == self.true:
- return True
- if value == self.false:
- return False
- return None
-
-
-class Int(Type):
- def __init__(self, min_value=None, max_value=None):
- check_min_max(min_value, max_value, 'min_value', 'max_value')
- self.min_value = min_value
- self.max_value = max_value
- super(Int, self).__init__(int)
-
- def validate(self, value):
- if type(value) is not self.type:
- return 'Must be an integer'
- if self.min_value is not None and value < self.min_value:
- return 'Cannot be smaller than %d' % self.min_value
- if self.max_value is not None and value > self.max_value:
- return 'Cannot be larger than %d' % self.max_value
-
-
-class Unicode(Type):
- def __init__(self, min_length=None, max_length=None, pattern=None):
- check_min_max(min_length, max_length, 'min_length', 'max_length')
- if min_length is not None and min_length < 0:
- raise ValueError('min_length must be >= 0, got: %r' % min_length)
- if max_length is not None and max_length < 1:
- raise ValueError('max_length must be >= 1, got: %r' % max_length)
- if not (pattern is None or isinstance(pattern, basestring)):
- raise TypeError(
- 'pattern must be a basestring or None, got: %r' % pattern
- )
- self.min_length = min_length
- self.max_length = max_length
- self.pattern = pattern
- if pattern is None:
- self.regex = None
- else:
- self.regex = re.compile(pattern)
- super(Unicode, self).__init__(unicode)
-
- def convert(self, value):
- assert type(value) not in (list, tuple)
- try:
- return self.type(value)
- except (TypeError, ValueError):
- return None
-
- def validate(self, value):
- if type(value) is not self.type:
- return 'Must be a string'
-
- if self.regex and self.regex.match(value) is None:
- return 'Must match %r' % self.pattern
-
- if self.min_length is not None and len(value) < self.min_length:
- return 'Must be at least %d characters long' % self.min_length
-
- if self.max_length is not None and len(value) > self.max_length:
- return 'Can be at most %d characters long' % self.max_length
-
-
-class Enum(Type):
- def __init__(self, *values):
- if len(values) < 1:
- raise ValueError('%s requires at least one value' % self.name)
- type_ = type(values[0])
- if type_ not in (unicode, int, float):
- raise TypeError(
- '%r: %r not unicode, int, nor float' % (values[0], type_)
- )
- for val in values[1:]:
- if type(val) is not type_:
- raise TypeError('%r: %r is not %r' % (val, type(val), type_))
- self.values = values
- self.frozenset = frozenset(values)
- super(Enum, self).__init__(type_)
-
- def validate(self, value):
- if type(value) is not self.type:
- return 'Incorrect type'
- if value not in self.frozenset:
- return 'Invalid value'