Django

Code

Changeset 4241

Show
Ignore:
Timestamp:
12/26/06 17:46:10 (2 years ago)
Author:
adrian
Message:

newforms: Added max_length and min_length optional arguments to RegexField?, EmailField? and URLField. Note that the argument order for those three fields has changed

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/newforms/fields.py

    r4223 r4241  
    214214 
    215215class RegexField(Field): 
    216     def __init__(self, regex, error_message=None, required=True, widget=None, label=None): 
     216    def __init__(self, regex, max_length=None, min_length=None, error_message=None, 
     217            required=True, widget=None, label=None): 
    217218        """ 
    218219        regex can be either a string or a compiled regular expression object. 
     
    224225            regex = re.compile(regex) 
    225226        self.regex = regex 
     227        self.max_length, self.min_length = max_length, min_length 
    226228        self.error_message = error_message or gettext(u'Enter a valid value.') 
    227229 
     
    236238        if not self.required and value == u'': 
    237239            return value 
     240        if self.max_length is not None and len(value) > self.max_length: 
     241            raise ValidationError(gettext(u'Ensure this value has at most %d characters.') % self.max_length) 
     242        if self.min_length is not None and len(value) < self.min_length: 
     243            raise ValidationError(gettext(u'Ensure this value has at least %d characters.') % self.min_length) 
    238244        if not self.regex.search(value): 
    239245            raise ValidationError(self.error_message) 
     
    246252 
    247253class EmailField(RegexField): 
    248     def __init__(self, required=True, widget=None, label=None): 
    249         RegexField.__init__(self, email_re, gettext(u'Enter a valid e-mail address.'), required, widget, label) 
     254    def __init__(self, max_length=None, min_length=None, required=True, widget=None, label=None): 
     255        RegexField.__init__(self, email_re, max_length, min_length, gettext(u'Enter a valid e-mail address.'), required, widget, label) 
    250256 
    251257url_re = re.compile( 
     
    263269 
    264270class URLField(RegexField): 
    265     def __init__(self, required=True, verify_exists=False, widget=None, label=None, 
     271    def __init__(self, max_length=None, min_length=None, required=True, verify_exists=False, widget=None, label=None, 
    266272            validator_user_agent=URL_VALIDATOR_USER_AGENT): 
    267         RegexField.__init__(self, url_re, gettext(u'Enter a valid URL.'), required, widget, label) 
     273        RegexField.__init__(self, url_re, max_length, min_length, gettext(u'Enter a valid URL.'), required, widget, label) 
    268274        self.verify_exists = verify_exists 
    269275        self.user_agent = validator_user_agent 
  • django/trunk/tests/regressiontests/forms/tests.py

    r4240 r4241  
    10991099 
    11001100RegexField takes an optional error_message argument: 
    1101 >>> f = RegexField('^\d\d\d\d$', 'Enter a four-digit number.') 
     1101>>> f = RegexField('^\d\d\d\d$', error_message='Enter a four-digit number.') 
    11021102>>> f.clean('1234') 
    11031103u'1234' 
     
    11101110... 
    11111111ValidationError: [u'Enter a four-digit number.'] 
     1112 
     1113RegexField also access min_length and max_length parameters, for convenience. 
     1114>>> f = RegexField('^\d+$', min_length=5, max_length=10) 
     1115>>> f.clean('123') 
     1116Traceback (most recent call last): 
     1117... 
     1118ValidationError: [u'Ensure this value has at least 5 characters.'] 
     1119>>> f.clean('abc') 
     1120Traceback (most recent call last): 
     1121... 
     1122ValidationError: [u'Ensure this value has at least 5 characters.'] 
     1123>>> f.clean('12345') 
     1124u'12345' 
     1125>>> f.clean('1234567890') 
     1126u'1234567890' 
     1127>>> f.clean('12345678901') 
     1128Traceback (most recent call last): 
     1129... 
     1130ValidationError: [u'Ensure this value has at most 10 characters.'] 
     1131>>> f.clean('12345a') 
     1132Traceback (most recent call last): 
     1133... 
     1134ValidationError: [u'Enter a valid value.'] 
    11121135 
    11131136# EmailField ################################################################## 
     
    11561179... 
    11571180ValidationError: [u'Enter a valid e-mail address.'] 
     1181 
     1182EmailField also access min_length and max_length parameters, for convenience. 
     1183>>> f = EmailField(min_length=10, max_length=15) 
     1184>>> f.clean('a@foo.com') 
     1185Traceback (most recent call last): 
     1186... 
     1187ValidationError: [u'Ensure this value has at least 10 characters.'] 
     1188>>> f.clean('alf@foo.com') 
     1189u'alf@foo.com' 
     1190>>> f.clean('alf123456788@foo.com') 
     1191Traceback (most recent call last): 
     1192... 
     1193ValidationError: [u'Ensure this value has at most 15 characters.'] 
    11581194 
    11591195# URLField ################################################################## 
     
    12481284... 
    12491285ValidationError: [u'This URL appears to be a broken link.'] 
     1286 
     1287EmailField also access min_length and max_length parameters, for convenience. 
     1288>>> f = URLField(min_length=15, max_length=20) 
     1289>>> f.clean('http://f.com') 
     1290Traceback (most recent call last): 
     1291... 
     1292ValidationError: [u'Ensure this value has at least 15 characters.'] 
     1293>>> f.clean('http://example.com') 
     1294u'http://example.com' 
     1295>>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com') 
     1296Traceback (most recent call last): 
     1297... 
     1298ValidationError: [u'Ensure this value has at most 20 characters.'] 
    12501299 
    12511300# BooleanField ################################################################