Change Password param so (password, confirm_password) can be passed to _convert_scalar()

This commit is contained in:
Jason Gerard DeRose 2009-10-16 02:22:39 -06:00
parent a3a0c0ae33
commit b35849b47d
3 changed files with 29 additions and 0 deletions

View File

@ -736,6 +736,15 @@ class NoSuchNamespaceError(InvocationError):
format = _('api has no such namespace: %(name)r')
class PasswordMismatch(InvocationError):
"""
**3011** Raise when password and password confirmation don't match.
"""
errno = 3011
format = _('Passwords do not match')
##############################################################################
# 4000 - 4999: Execution errors

View File

@ -35,6 +35,7 @@ from util import make_repr
from request import ugettext
from plugable import ReadOnly, lock, check_name
from errors import ConversionError, RequirementError, ValidationError
from errors import PasswordMismatch
from constants import NULLS, TYPE_ERROR, CALLABLE_ERROR
import csv
@ -1145,6 +1146,14 @@ class Password(Str):
A parameter for passwords (stored in the ``unicode`` type).
"""
def _convert_scalar(self, value, index=None):
if isinstance(value, (tuple, list)) and len(value) == 2:
(p1, p2) = value
if p1 != p2:
raise PasswordMismatch(name=self.name, index=index)
value = p1
return super(Password, self)._convert_scalar(value, index)
class Enum(Param):
"""

View File

@ -1065,6 +1065,17 @@ class test_Password(ClassChecker):
assert o.pattern is None
assert o.password is True
def test_convert_scalar(self):
"""
Test the `ipalib.parameters.Password._convert_scalar` method.
"""
o = self.cls('my_password')
e = raises(errors.PasswordMismatch, o._convert_scalar, [u'one', u'two'])
assert e.name == 'my_password'
assert e.index is None
assert o._convert_scalar([u'one', u'one']) == u'one'
assert o._convert_scalar(u'one') == u'one'
class test_StrEnum(ClassChecker):
"""