Django

Code

Changeset 6926

Show
Ignore:
Timestamp:
12/17/07 02:05:27 (9 months ago)
Author:
mtredinnick
Message:

Fixed #5871 -- Factored out the validation errors in localflavor form fields. Brings them into line with the standard newforms fields. Patch from Jan Rademaker.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/localflavor/ar/forms.py

    r6145 r6926  
    2525    See http://www.correoargentino.com.ar/consulta_cpa/home.php 
    2626    """ 
     27    default_error_messages = { 
     28        'invalid': ugettext("Enter a postal code in the format NNNN or ANNNNAAA."), 
     29    } 
     30 
    2731    def __init__(self, *args, **kwargs): 
    2832        super(ARPostalCodeField, self).__init__(r'^\d{4}$|^[A-HJ-NP-Za-hj-np-z]\d{4}\D{3}$', 
    29             min_length=4, max_length=8, 
    30             error_message=ugettext("Enter a postal code in the format NNNN or ANNNNAAA."), 
    31                     *args, **kwargs) 
     33            min_length=4, max_length=8, *args, **kwargs) 
    3234 
    3335    def clean(self, value): 
     
    3638            return u'' 
    3739        if len(value) not in (4, 8): 
    38             raise ValidationError(ugettext("Enter a postal code in the format NNNN or ANNNNAAA.")
     40            raise ValidationError(self.error_messages['invalid']
    3941        if len(value) == 8: 
    4042            return u'%s%s%s' % (value[0].upper(), value[1:5], value[5:].upper()) 
     
    4547    A field that validates `Documento Nacional de IdentidadŽ (DNI) numbers. 
    4648    """ 
     49    default_error_messages = { 
     50        'invalid': ugettext("This field requires only numbers."), 
     51        'max_digits': ugettext("This field requires 7 or 8 digits."), 
     52    } 
     53 
    4754    def __init__(self, *args, **kwargs): 
    4855        super(ARDNIField, self).__init__(max_length=10, min_length=7, *args, 
     
    5966            value = value.replace('.', '') 
    6067        if not value.isdigit(): 
    61             raise ValidationError(ugettext("This field requires only numbers.")
     68            raise ValidationError(self.error_messages['invalid']
    6269        if len(value) not in (7, 8): 
    63             raise ValidationError( 
    64                     ugettext("This field requires 7 or 8 digits.")) 
     70            raise ValidationError(self.error_messages['max_digits']) 
    6571 
    6672        return value 
     
    7177    CUIT is of the form XX-XXXXXXXX-V. The last digit is a check digit. 
    7278    """ 
     79    default_error_messages = { 
     80        'invalid': ugettext('Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'), 
     81        'checksum': ugettext("Invalid CUIT."), 
     82    } 
     83 
    7384    def __init__(self, *args, **kwargs): 
    7485        super(ARCUITField, self).__init__(r'^\d{2}-?\d{8}-?\d$', 
    75             error_message=ugettext('Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.'), 
    7686            *args, **kwargs) 
    7787 
     
    8696        value, cd = self._canon(value) 
    8797        if self._calc_cd(value) != cd: 
    88             raise ValidationError(ugettext("Invalid CUIT.")
     98            raise ValidationError(self.error_messages['checksum']
    8999        return self._format(value, cd) 
    90100 
  • django/trunk/django/contrib/localflavor/au/forms.py

    r5876 r6926  
    1313class AUPostCodeField(RegexField): 
    1414    """Australian post code field.""" 
     15    default_error_messages = { 
     16        'invalid': ugettext('Enter a 4 digit post code.'), 
     17    } 
     18 
    1519    def __init__(self, *args, **kwargs): 
    1620        super(AUPostCodeField, self).__init__(r'^\d{4}$', 
    17             max_length=None, min_length=None, 
    18             error_message=ugettext('Enter a 4 digit post code.'), 
    19                     *args, **kwargs) 
     21            max_length=None, min_length=None, *args, **kwargs) 
    2022 
    2123class AUPhoneNumberField(Field): 
    2224    """Australian phone number field.""" 
     25    default_error_messages = { 
     26        'invalid': u'Phone numbers must contain 10 digits.', 
     27    } 
     28 
    2329    def clean(self, value): 
    2430        """ 
     
    3238        if phone_match: 
    3339            return u'%s' % phone_match.group(1) 
    34         raise ValidationError(u'Phone numbers must contain 10 digits.'
     40        raise ValidationError(self.error_messages['invalid']
    3541 
    3642class AUStateSelect(Select): 
  • django/trunk/django/contrib/localflavor/br/forms.py

    r6183 r6926  
    1818 
    1919class BRZipCodeField(RegexField): 
     20    default_error_messages = { 
     21        'invalid': _('Enter a zip code in the format XXXXX-XXX.'), 
     22    } 
     23 
    2024    def __init__(self, *args, **kwargs): 
    2125        super(BRZipCodeField, self).__init__(r'^\d{5}-\d{3}$', 
    22             max_length=None, min_length=None, 
    23             error_message=_('Enter a zip code in the format XXXXX-XXX.'), 
    24                     *args, **kwargs) 
     26            max_length=None, min_length=None, *args, **kwargs) 
    2527 
    2628class BRPhoneNumberField(Field): 
     29    default_error_messages = { 
     30        'invalid': _('Phone numbers must be in XX-XXXX-XXXX format.'), 
     31    } 
     32 
    2733    def clean(self, value): 
    2834        super(BRPhoneNumberField, self).clean(value) 
     
    3339        if m: 
    3440            return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3)) 
    35         raise ValidationError(_('Phone numbers must be in XX-XXXX-XXXX format.')
     41        raise ValidationError(self.error_messages['invalid']
    3642 
    3743class BRStateSelect(Select): 
     
    4955    """ 
    5056    widget = Select 
     57    default_error_messages = { 
     58        'invalid': _(u'Select a valid brazilian state. That state is not one of the available states.'), 
     59    } 
    5160 
    5261    def __init__(self, required=True, widget=None, label=None, 
     
    6675        valid_values = set([smart_unicode(k) for k, v in self.widget.choices]) 
    6776        if value not in valid_values: 
    68             raise ValidationError(_(u'Select a valid brazilian state.' 
    69                                            u' That state is not one' 
    70                                            u' of the available states.')) 
     77            raise ValidationError(self.error_messages['invalid']) 
    7178        return value 
    7279 
     
    8491    http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas 
    8592    """ 
     93    default_error_messages = { 
     94        'invalid': _("Invalid CPF number."), 
     95        'max_digits': _("This field requires at most 11 digits or 14 characters."), 
     96        'digits_only': _("This field requires only numbers."), 
     97    } 
     98 
    8699    def __init__(self, *args, **kwargs): 
    87100        super(BRCPFField, self).__init__(max_length=14, min_length=11, *args, **kwargs) 
     
    101114            int(value) 
    102115        except ValueError: 
    103             raise ValidationError(_("This field requires only numbers.")
     116            raise ValidationError(self.error_messages['digits_only']
    104117        if len(value) != 11: 
    105             raise ValidationError(_("This field requires at most 11 digits or 14 characters.")
     118            raise ValidationError(self.error_messages['max_digits']
    106119        orig_dv = value[-2:] 
    107120 
     
    113126        value = value[:-1] + str(new_2dv) 
    114127        if value[-2:] != orig_dv: 
    115             raise ValidationError(_("Invalid CPF number.")
     128            raise ValidationError(self.error_messages['invalid']
    116129 
    117130        return orig_value 
    118131 
    119132class BRCNPJField(Field): 
     133    default_error_messages = { 
     134        'invalid': _("Invalid CNPJ number."), 
     135        'digits_only': _("This field requires only numbers."), 
     136        'max_digits': _("This field requires at least 14 digits"), 
     137    } 
     138 
    120139    def clean(self, value): 
    121140        """ 
     
    132151            int(value) 
    133152        except ValueError: 
    134             raise ValidationError("This field requires only numbers."
     153            raise ValidationError(self.error_messages['digits_only']
    135154        if len(value) != 14: 
    136             raise ValidationError( 
    137                 _("This field requires at least 14 digits")) 
     155            raise ValidationError(self.error_messages['max_digits']) 
    138156        orig_dv = value[-2:] 
    139157 
     
    145163        value = value[:-1] + str(new_2dv) 
    146164        if value[-2:] != orig_dv: 
    147             raise ValidationError(_("Invalid CNPJ number.")
     165            raise ValidationError(self.error_messages['invalid']
    148166 
    149167        return orig_value 
    150  
  • django/trunk/django/contrib/localflavor/ca/forms.py

    r6203 r6926  
    1 """  
    2 Canada-specific Form helpers  
    3 """  
    4   
    5 from django.newforms import ValidationError  
    6 from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES  
    7 from django.newforms.util import smart_unicode  
     1""" 
     2Canada-specific Form helpers 
     3""" 
     4 
     5from django.newforms import ValidationError 
     6from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES 
     7from django.newforms.util import smart_unicode 
    88from django.utils.translation import gettext, ugettext 
    9 import re  
    10   
     9import re 
     10 
    1111phone_digits_re = re.compile(r'^(?:1-?)?(\d{3})[-\.]?(\d{3})[-\.]?(\d{4})$') 
    1212sin_re = re.compile(r"^(\d{3})-(\d{3})-(\d{3})$") 
    13   
    14 class CAPostalCodeField(RegexField):  
    15     """Canadian postal code field."""  
    16     def __init__(self, *args, **kwargs):  
    17         super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXYZ]\d[A-Z] \d[A-Z]\d$',  
    18             max_length=None, min_length=None,  
    19             error_message=gettext(u'Enter a postal code in the format XXX XXX.'),  
    20             *args, **kwargs)  
    21   
    22 class CAPhoneNumberField(Field):  
    23     """Canadian phone number field."""  
    24     def clean(self, value):  
    25         """Validate a phone number.  
    26         """  
    27         super(CAPhoneNumberField, self).clean(value)  
     13 
     14class CAPostalCodeField(RegexField): 
     15    """Canadian postal code field.""" 
     16    default_error_messages = { 
     17        'invalid': gettext(u'Enter a postal code in the format XXX XXX.'), 
     18    } 
     19 
     20    def __init__(self, *args, **kwargs): 
     21        super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXYZ]\d[A-Z] \d[A-Z]\d$', 
     22            max_length=None, min_length=None, *args, **kwargs) 
     23 
     24class CAPhoneNumberField(Field): 
     25    """Canadian phone number field.""" 
     26    default_error_messages = { 
     27        'invalid': u'Phone numbers must be in XXX-XXX-XXXX format.', 
     28    } 
     29 
     30    def clean(self, value): 
     31        """Validate a phone number. 
     32        """ 
     33        super(CAPhoneNumberField, self).clean(value) 
    2834        if value in EMPTY_VALUES: 
    2935            return u'' 
     
    3238        if m: 
    3339            return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3)) 
    34         raise ValidationError(u'Phone numbers must be in XXX-XXX-XXXX format.')  
     40        raise ValidationError(self.error_messages['invalid']) 
    3541 
    3642class CAProvinceField(Field): 
     
    4046    abbreviation for the given province. 
    4147    """ 
     48    default_error_messages = { 
     49        'invalid': u'Enter a Canadian province or territory.', 
     50    } 
     51 
    4252    def clean(self, value): 
    4353        from ca_provinces import PROVINCES_NORMALIZED 
     
    5464            except KeyError: 
    5565                pass 
    56         raise ValidationError(u'Enter a Canadian province or territory.'
    57   
    58 class CAProvinceSelect(Select):  
    59     """  
    60     A Select widget that uses a list of Canadian provinces and  
    61     territories as its choices.  
    62     """  
    63     def __init__(self, attrs=None):  
    64         from ca_provinces import PROVINCE_CHOICES # relative import  
     66        raise ValidationError(self.error_messages['invalid']
     67 
     68class CAProvinceSelect(Select): 
     69    """ 
     70    A Select widget that uses a list of Canadian provinces and 
     71    territories as its choices. 
     72    """ 
     73    def __init__(self, attrs=None): 
     74        from ca_provinces import PROVINCE_CHOICES # relative import 
    6575        super(CAProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES) 
    66              
     76 
    6777class CASocialInsuranceNumberField(Field): 
    6878    """ 
     
    7585             See: http://en.wikipedia.org/wiki/Social_Insurance_Number 
    7686    """ 
     87    default_error_messages = { 
     88        'invalid': ugettext('Enter a valid Canadian Social Insurance number in XXX-XXX-XXXX format.'), 
     89    } 
     90 
    7791    def clean(self, value): 
    7892        super(CASocialInsuranceNumberField, self).clean(value) 
    7993        if value in EMPTY_VALUES: 
    8094            return u'' 
    81         msg = ugettext('Enter a valid Canadian Social Insurance number in XXX-XXX-XXXX format.') 
     95 
    8296        match = re.match(sin_re, value) 
    8397        if not match: 
    84             raise ValidationError(msg
    85              
    86         number = u'%s-%s-%s' % (match.group(1), match.group(2), match.group(3))     
     98            raise ValidationError(self.error_messages['invalid']
     99 
     100        number = u'%s-%s-%s' % (match.group(1), match.group(2), match.group(3)) 
    87101        check_number = u'%s%s%s' % (match.group(1), match.group(2), match.group(3)) 
    88102        if not self.luhn_checksum_is_valid(check_number): 
    89             raise ValidationError(msg
     103            raise ValidationError(self.error_messages['invalid']
    90104        return number 
    91          
     105 
    92106    def luhn_checksum_is_valid(self, number): 
    93107        """ 
    94         Checks to make sure that the SIN passes a luhn mod-10 checksum  
     108        Checks to make sure that the SIN passes a luhn mod-10 checksum 
    95109        See: http://en.wikipedia.org/wiki/Luhn_algorithm 
    96110        """ 
  • django/trunk/django/contrib/localflavor/ch/forms.py

    r5876 r6926  
    1313 
    1414class CHZipCodeField(RegexField): 
     15    default_error_messages = { 
     16        'invalid': ugettext('Enter a zip code in the format XXXX.'), 
     17    } 
     18 
    1519    def __init__(self, *args, **kwargs): 
    1620        super(CHZipCodeField, self).__init__(r'^\d{4}$', 
    17         max_length=None, min_length=None, 
    18         error_message=ugettext('Enter a zip code in the format XXXX.'), 
    19         *args, **kwargs) 
     21        max_length=None, min_length=None, *args, **kwargs) 
    2022 
    2123class CHPhoneNumberField(Field): 
     
    2628    '0XX XXX XX XX'. 
    2729    """ 
     30    default_error_messages = { 
     31        'invalid': 'Phone numbers must be in 0XX XXX XX XX format.', 
     32    } 
     33 
    2834    def clean(self, value): 
    2935        super(CHPhoneNumberField, self).clean(value) 
     
    3440        if m: 
    3541            return u'%s %s %s %s' % (value[0:3], value[3:6], value[6:8], value[8:10]) 
    36         raise ValidationError('Phone numbers must be in 0XX XXX XX XX format.'
     42        raise ValidationError(self.error_messages['invalid']
    3743 
    3844class CHStateSelect(Select): 
     
    5561    Algorithm is documented at http://adi.kousz.ch/artikel/IDCHE.htm 
    5662    """ 
     63    default_error_messages = { 
     64        'invalid': ugettext('Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.'), 
     65    } 
     66 
    5767    def has_valid_checksum(self, number): 
    5868        given_number, given_checksum = number[:-1], number[-1] 
     
    8898    def clean(self, value): 
    8999        super(CHIdentityCardNumberField, self).clean(value) 
    90         error_msg = ugettext('Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.') 
    91100        if value in EMPTY_VALUES: 
    92101            return u'' 
     
    94103        match = re.match(id_re, value) 
    95104        if not match: 
    96             raise ValidationError(error_msg
     105            raise ValidationError(self.error_messages['invalid']
    97106 
    98107        idnumber, pos9, checksum = match.groupdict()['idnumber'], match.groupdict()['pos9'], match.groupdict()['checksum'] 
     
    100109        if idnumber == '00000000' or \ 
    101110           idnumber == 'A0000000': 
    102             raise ValidationError(error_msg
     111            raise ValidationError(self.error_messages['invalid']
    103112 
    104113        all_digits = "%s%s%s" % (idnumber, pos9, checksum) 
    105114        if not self.has_valid_checksum(all_digits): 
    106             raise ValidationError(error_msg
     115            raise ValidationError(self.error_messages['invalid']
    107116 
    108117        return u'%s%s%s' % (idnumber, pos9, checksum) 
  • django/trunk/django/contrib/localflavor/cl/forms.py

    r5876 r6926  
    2626    https://palena.sii.cl/cvc/dte/ee_empresas_emisoras.html 
    2727    """ 
     28    default_error_messages = { 
     29        'invalid': ugettext('Enter a valid Chilean RUT.'), 
     30        'strict': ugettext('Enter a valid Chilean RUT. The format is XX.XXX.XXX-X.'), 
     31        'checksum': ugettext('The Chilean RUT is not valid.'), 
     32    } 
     33 
    2834    def __init__(self, *args, **kwargs): 
    2935        if 'strict' in kwargs: 
    3036            del kwargs['strict'] 
    3137            super(CLRutField, self).__init__(r'^(\d{1,2}\.)?\d{3}\.\d{3}-[\dkK]$', 
    32                 error_message=ugettext('Enter valid a Chilean RUT. The format is XX.XXX.XXX-X.'), 
    33                         *args, **kwargs) 
     38                error_message=self.default_error_messages['strict'], *args, **kwargs) 
    3439        else: 
    3540            # In non-strict mode, accept RUTs that validate but do not exist in 
    3641            # the real world. 
    37             super(CLRutField, self).__init__(r'^[\d\.]{1,11}-?[\dkK]$', error_message=ugettext('Enter valid a Chilean RUT'), *args, **kwargs) 
     42            super(CLRutField, self).__init__(r'^[\d\.]{1,11}-?[\dkK]$', *args, **kwargs) 
    3843 
    3944    def clean(self, value): 
     
    4853            return self._format(rut, verificador) 
    4954        else: 
    50             raise ValidationError(u'The Chilean RUT is not valid.'
     55            raise ValidationError(self.error_messages['checksum']
    5156 
    5257    def _algorithm(self, rut): 
  • django/trunk/django/contrib/localflavor/de/forms.py

    r5876 r6926  
    1111 
    1212class DEZipCodeField(RegexField): 
     13    default_error_messages = { 
     14        'invalid': ugettext('Enter a zip code in the format XXXXX.'), 
     15    } 
    1316    def __init__(self, *args, **kwargs): 
    1417        super(DEZipCodeField, self).__init__(r'^\d{5}$', 
    15             max_length=None, min_length=None, 
    16             error_message=ugettext('Enter a zip code in the format XXXXX.'), 
    17                     *args, **kwargs) 
     18            max_length=None, min_length=None, *args, **kwargs) 
    1819 
    1920class DEStateSelect(Select): 
     
    3738    Algorithm is documented at http://de.wikipedia.org/wiki/Personalausweis 
    3839    """ 
     40    default_error_messages = { 
     41        'invalid': ugettext('Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.'), 
     42    } 
     43 
    3944    def has_valid_checksum(self, number): 
    4045        given_number, given_checksum = number[:-1], number[-1] 
     
    5863    def clean(self, value): 
    5964        super(DEIdentityCardNumberField, self).clean(value) 
    60         error_msg = ugettext('Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.') 
    6165        if value in EMPTY_VALUES: 
    6266            return u'' 
    6367        match = re.match(id_re, value) 
    6468        if not match: 
    65             raise ValidationError(error_msg
     69            raise ValidationError(self.error_messages['invalid']
    6670 
    6771        gd = match.groupdict() 
     
    7074 
    7175        if residence == '0000000000' or birthday == '0000000' or validity == '0000000': 
    72             raise ValidationError(error_msg
     76            raise ValidationError(self.error_messages['invalid']
    7377 
    7478        all_digits = u"%s%s%s%s" % (residence, birthday, validity, checksum) 
    7579        if not self.has_valid_checksum(residence) or not self.has_valid_checksum(birthday) or \ 
    7680            not self.has_valid_checksum(validity) or not self.has_valid_checksum(all_digits): 
    77                 raise ValidationError(error_msg
     81                raise ValidationError(self.error_messages['invalid']
    7882 
    7983        return u'%s%s-%s-%s-%s' % (residence, origin, birthday, validity, checksum) 
  • django/trunk/django/contrib/localflavor/es/forms.py

    r6555 r6926  
    1616    between 01 and 52, assigned to provinces code. 
    1717    """ 
     18    default_error_messages = { 
     19        'invalid': _('Enter a valid postal code in the range and format 01XXX - 52XXX.'), 
     20    } 
     21 
    1822    def __init__(self, *args, **kwargs): 
    1923        super(ESPostalCodeField, self).__init__( 
    2024                r'^(0[1-9]|[1-4][0-9]|5[0-2])\d{3}$', 
    21                 max_length=None, min_length=None, 
    22                 error_message=_('Enter a valid postal code in the range and format 01XXX - 52XXX.'), 
    23                 *args, **kwargs) 
     25                max_length=None, min_length=None, *args, **kwargs) 
    2426 
    2527class ESPhoneNumberField(RegexField): 
     
    3436    TODO: accept and strip characters like dot, hyphen... in phone number 
    3537    """ 
     38    default_error_messages = { 
     39        'invalid': _('Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX.'), 
     40    } 
     41 
    3642    def __init__(self, *args, **kwargs): 
    3743        super(ESPhoneNumberField, self).__init__(r'^(6|8|9)\d{8}$', 
    38                 max_length=None, min_length=None, 
    39                 error_message=_('Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX.'), 
    40                 *args, **kwargs) 
     44                max_length=None, min_length=None, *args, **kwargs) 
    4145 
    4246class ESIdentityCardNumberField(RegexField): 
     
    5963    letters, so both validations are assumed true for all types. 
    6064    """ 
     65    default_error_messages = { 
     66        'invalid': _('Please enter a valid NIF, NIE, or CIF.'), 
     67        'invalid_only_nif': _('Please enter a valid NIF or NIE.'), 
     68        'invalid_nif': _('Invalid checksum for NIF.'), 
     69        'invalid_nie': _('Invalid checksum for NIE.'), 
     70        'invalid_cif': _('Invalid checksum for CIF.'), 
     71    } 
     72 
    6173    def __init__(self, only_nif=False, *args, **kwargs): 
    6274        self.only_nif = only_nif 
     
    6577        self.cif_types = 'ABCDEFGHKLMNPQS' 
    6678        self.nie_types = 'XT' 
    67         if self.only_nif: 
    68             self.id_types = 'NIF or NIE' 
    69         else: 
    70             self.id_types = 'NIF, NIE, or CIF' 
    7179        super(ESIdentityCardNumberField, self).__init__(r'^([%s]?)[ -]?(\d+)[ -]?([%s]?)$' % (self.cif_types + self.nie_types + self.cif_types.lower() + self.nie_types.lower(), self.nif_control + self.nif_control.lower()), 
    7280                max_length=None, min_length=None, 
    73                 error_message=_('Please enter a valid %s.' % self.id_types)
     81                error_message=self.default_error_messages['invalid%s' % (self.only_nif and '_only_nif' or '')]
    7482                *args, **kwargs) 
    7583 
     
    8997                return value 
    9098            else: 
    91                 raise ValidationError, _('Invalid checksum for NIF.') 
     99                raise ValidationError, self.error_messages['invalid_nif'] 
    92100        elif letter1 in self.nie_types and letter2: 
    93101            # NIE 
     
    95103                return value 
    96104            else: 
    97                 raise ValidationError, _('Invalid checksum for NIE.') 
     105                raise ValidationError, self.error_messages['invalid_nie'] 
    98106        elif not self.only_nif and letter1 in self.cif_types and len(number) in [7, 8]: 
    99107            # CIF 
     
    104112                return value 
    105113            else: 
    106                 raise ValidationError, _('Invalid checksum for CIF.') 
     114                raise ValidationError, self.error_messages['invalid_cif'] 
    107115        else: 
    108             raise ValidationError, _('Please enter a valid %s.' % self.id_types) 
     116            raise ValidationError, self.error_messages['invalid'] 
    109117 
    110118class ESCCCField(RegexField): 
     
    131139        TODO: allow IBAN validation too 
    132140    """ 
     141    default_error_messages = { 
     142        'invalid': _('Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX.'), 
     143        'checksum': _('Invalid checksum for bank account number.'), 
     144    } 
     145 
    133146    def __init__(self, *args, **kwargs): 
    134147        super(ESCCCField, self).__init__(r'^\d{4}[ -]?\d{4}[ -]?\d{2}[ -]?\d{10}$', 
    135             max_length=None, min_length=None, 
    136             error_message=_('Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX.'), 
    137             *args, **kwargs) 
     148            max_length=None, min_length=None, *args, **kwargs) 
    138149 
    139150    def clean(self, value): 
     
    148159            return value 
    149160        else: 
    150             raise ValidationError, _('Invalid checksum for bank account number.') 
     161            raise ValidationError, self.error_messages['checksum'] 
    151162 
    152163class ESRegionSelect(Select): 
  • django/trunk/django/contrib/localflavor/fi/forms.py

    r5876 r6926  
    99 
    1010class FIZipCodeField(RegexField): 
     11    default_error_messages = { 
     12        'invalid': ugettext('Enter a zip code in the format XXXXX.'), 
     13    } 
    1114    def __init__(self, *args, **kwargs): 
    1215        super(FIZipCodeField, self).__init__(r'^\d{5}$', 
    13             max_length=None, min_length=None, 
    14             error_message=ugettext('Enter a zip code in the format XXXXX.'), 
    15                     *args, **kwargs) 
     16            max_length=None, min_length=None, *args, **kwargs) 
    1617 
    1718class FIMunicipalitySelect(Select): 
     
    2425 
    2526class FISocialSecurityNumber(Field): 
     27    default_error_messages = { 
     28        'invalid': ugettext('Enter a valid Finnish social security number.'), 
     29    } 
     30 
    2631    def clean(self, value): 
    2732        super(FISocialSecurityNumber, self).clean(value) 
     
    3843            (?P<checksum>[%s])$""" % checkmarks, value, re.VERBOSE | re.IGNORECASE) 
    3944        if not result: 
    40             raise ValidationError(ugettext('Enter a valid Finnish social security number.')
     45            raise ValidationError(self.error_messages['invalid']
    4146        gd = result.groupdict() 
    4247        checksum = int(gd['date'] + gd['serial']) 
    4348        if checkmarks[checksum % len(checkmarks)] == gd['checksum'].upper(): 
    4449            return u'%s' % value.upper() 
    45         raise ValidationError(ugettext('Enter a valid Finnish social security number.')
     50        raise ValidationError(self.error_messages['invalid']
  • django/trunk/django/contrib/localflavor/fr/forms.py

    r5876 r6926  
    1212 
    1313class FRZipCodeField(RegexField): 
     14    default_error_messages = { 
     15        'invalid': ugettext('Enter a zip code in the format XXXXX.'), 
     16    } 
     17 
    1418    def __init__(self, *args, **kwargs): 
    1519        super(FRZipCodeField, self).__init__(r'^\d{5}$', 
    16             max_length=None, min_length=None, 
    17             error_message=ugettext('Enter a zip code in the format XXXXX.'), 
    18                     *args, **kwargs) 
     20            max_length=None, min_length=None, *args, **kwargs) 
    1921 
    2022class FRPhoneNumberField(Field): 
     
    2527    '0X XX XX XX XX'. 
    2628    """ 
     29    default_error_messages = { 
     30        'invalid': u'Phone numbers must be in 0X XX XX XX XX format.', 
     31    } 
     32 
    2733    def clean(self, value): 
    2834        super(FRPhoneNumberField, self).clean(value) 
     
    3339        if m: 
    3440            return u'%s %s %s %s %s' % (value[0:2], value[2:4], value[4:6], value[6:8], value[8:10]) 
    35         raise ValidationError(u'Phone numbers must be in 0X XX XX XX XX format.'
     41        raise ValidationError(self.error_messages['invalid']
    3642 
    3743class FRDepartmentSelect(Select): 
  • django/trunk/django/contrib/localflavor/in_/forms.py

    r5876 r6926  
    1111 
    1212class INZipCodeField(RegexField): 
     13    default_error_messages = { 
     14        'invalid': gettext(u'Enter a zip code in the format XXXXXXX.'), 
     15    } 
     16 
    1317    def __init__(self, *args, **kwargs): 
    1418        super(INZipCodeField, self).__init__(r'^\d{6}$', 
    15             max_length=None, min_length=None, 
    16             error_message=gettext(u'Enter a zip code in the format XXXXXXX.'), 
    17             *args, **kwargs) 
     19            max_length=None, min_length=None, *args, **kwargs) 
    1820 
    1921class INStateField(Field): 
     
    2325    registration abbreviation for the given state or union territory 
    2426    """ 
     27    default_error_messages = { 
     28        'invalid': u'Enter a Indian state or territory.', 
     29    } 
     30 
    2531    def clean(self, value): 
    2632        from in_states import STATES_NORMALIZED 
     
    3743            except KeyError: 
    3844                pass 
    39         raise ValidationError(u'Enter a Indian state or territory.'
     45        raise ValidationError(self.error_messages['invalid']
    4046 
    4147class INStateSelect(Select): 
  • django/trunk/django/contrib/localflavor/is_/forms.py

    r5876 r6926  
    1414    of Iceland has. 
    1515    """ 
     16    default_error_messages = { 
     17        'invalid': ugettext('Enter a valid Icelandic identification number. The format is XXXXXX-XXXX.'), 
     18        'checksum': ugettext(u'The Icelandic identification number is not valid.'), 
     19    } 
     20 
    1621    def __init__(self, *args, **kwargs): 
    17         error_msg = ugettext('Enter a valid Icelandic identification number. The format is XXXXXX-XXXX.') 
    1822        kwargs['min_length'],kwargs['max_length'] = 10,11 
    19         super(ISIdNumberField, self).__init__(r'^\d{6}(-| )?\d{4}$', error_message=error_msg, *args, **kwargs) 
     23        super(ISIdNumberField, self).__init__(r'^\d{6}(-| )?\d{4}$', *args, **kwargs) 
    2024 
    2125    def clean(self, value): 
     
    2933            return self._format(value) 
    3034        else: 
    31             raise ValidationError(ugettext(u'The Icelandic identification number is not valid.')
     35            raise ValidationError(self.error_messages['checksum']
    3236 
    3337    def _canonify(self, value): 
  • django/trunk/django/contrib/localflavor/it/forms.py

    r5876 r6926  
    1111 
    1212class ITZipCodeField(RegexField): 
     13    default_error_messages = { 
     14        'invalid': ugettext('Enter a valid zip code.'), 
     15    } 
    1316    def __init__(self, *args, **kwargs): 
    1417        super(ITZipCodeField, self).__init__(r'^\d{5}$', 
    15         max_length=None, min_length=None, 
    16         error_message=ugettext('Enter a valid zip code.'), 
    17                 *args, **kwargs) 
     18        max_length=None, min_length=None, *args, **kwargs) 
    1819 
    1920class ITRegionSelect(Select): 
     
    3940    'Informazioni sulla codificazione delle persone fisiche'. 
    4041    """ 
    41     err_msg = ugettext(u'Enter a valid Social Security number.') 
     42    default_error_messages = { 
     43        'invalid': ugettext(u'Enter a valid Social Security number.'), 
     44    } 
     45 
    4246    def __init__(self, *args, **kwargs): 
    4347        super(ITSocialSecurityNumberField, self).__init__(r'^\w{3}\s*\w{3}\s*\w{5}\s*\w{5}$', 
    44         max_length=None, min_length=None, error_message=self.err_msg, 
    45         *args, **kwargs) 
     48        max_length=None, min_length=None, *args, **kwargs) 
    4649 
    4750    def clean(self, value): 
     
    5356            check_digit = ssn_check_digit(value) 
    5457        except ValueError: 
    55             raise ValidationError(self.err_msg
     58            raise ValidationError(self.error_messages['invalid']
    5659        if not value[15] == check_digit: 
    57             raise ValidationError(self.err_msg
     60            raise ValidationError(self.error_messages['invalid']
    5861        return value 
    5962 
     
    6265    A form field that validates Italian VAT numbers (partita IVA). 
    6366    """ 
     67    default_error_messages = { 
     68        'invalid': ugettext(u'Enter a valid VAT number.'), 
     69    } 
     70 
    6471    def clean(self, value): 
    6572        value = super(ITVatNumberField, self).clean(value) 
    6673        if value == u'': 
    6774            return value 
    68         err_msg = ugettext(u'Enter a valid VAT number.') 
    6975        try: 
    7076            vat_number = int(value) 
    7177        except ValueError: 
    72             raise ValidationError(err_msg
     78            raise ValidationError(self.error_messages['invalid']
    7379        vat_number = str(vat_number).zfill(11) 
    7480        check_digit = vat_number_check_digit(vat_number[0:10]) 
    7581        if not vat_number[10] == check_digit: 
    76             raise ValidationError(err_msg
     82            raise ValidationError(self.error_messages['invalid']
    7783        return smart_unicode(vat_number) 
  • django/trunk/django/contrib/localflavor/jp/forms.py

    r5876 r6926  
    1616    Accepts 7 digits, with or without a hyphen. 
    1717    """ 
     18    default_error_messages = { 
     19        'invalid': ugettext('Enter a postal code in the format XXXXXXX or XXX-XXXX.'), 
     20    } 
     21 
    1822    def __init__(self, *args, **kwargs): 
    1923