Added an ANY_OF validator that allows a value to be valid according to any of a list of validators.
This commit is contained in:
@@ -32,6 +32,7 @@ except ImportError:
|
|||||||
JSONErrors += (JSONDecodeError,)
|
JSONErrors += (JSONDecodeError,)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
'ANY_OF',
|
||||||
'CLEANUP',
|
'CLEANUP',
|
||||||
'CRYPT',
|
'CRYPT',
|
||||||
'IS_ALPHANUMERIC',
|
'IS_ALPHANUMERIC',
|
||||||
@@ -2591,6 +2592,38 @@ class IS_SLUG(Validator):
|
|||||||
return (urlify(value, self.maxlen, self.keep_underscores), None)
|
return (urlify(value, self.maxlen, self.keep_underscores), None)
|
||||||
|
|
||||||
|
|
||||||
|
class ANY_OF(Validator):
|
||||||
|
"""
|
||||||
|
test if any of the validators in a list return successfully
|
||||||
|
|
||||||
|
>>> ANY_OF([IS_EMAIL(),IS_ALPHANUMERIC()])('a@b.co')
|
||||||
|
('a@b.co', None)
|
||||||
|
>>> ANY_OF([IS_EMAIL(),IS_ALPHANUMERIC()])('abco')
|
||||||
|
('abco', None)
|
||||||
|
>>> ANY_OF([IS_EMAIL(),IS_ALPHANUMERIC()])('@ab.co')
|
||||||
|
('@ab.co', 'enter only letters, numbers, and underscore')
|
||||||
|
>>> ANY_OF([IS_ALPHANUMERIC(),IS_EMAIL()])('@ab.co')
|
||||||
|
('@ab.co', 'enter a valid email address')
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, subs):
|
||||||
|
self.subs = subs
|
||||||
|
|
||||||
|
def __call__(self, value):
|
||||||
|
for validator in self.subs:
|
||||||
|
value, error = validator(value)
|
||||||
|
if error == None:
|
||||||
|
break
|
||||||
|
return value, error
|
||||||
|
|
||||||
|
def formatter(self, value):
|
||||||
|
# Use the formatter of the first subvalidator
|
||||||
|
# that validates the value and has a formatter
|
||||||
|
for validator in self.subs:
|
||||||
|
if hasattr(validator, 'formatter') and validator(value)[1] != None:
|
||||||
|
return validator.formatter(value)
|
||||||
|
|
||||||
|
|
||||||
class IS_EMPTY_OR(Validator):
|
class IS_EMPTY_OR(Validator):
|
||||||
"""
|
"""
|
||||||
dummy class for testing IS_EMPTY_OR
|
dummy class for testing IS_EMPTY_OR
|
||||||
|
|||||||
Reference in New Issue
Block a user