Django

Code

Changeset 6176

Show
Ignore:
Timestamp:
09/14/07 02:19:38 (10 months ago)
Author:
mtredinnick
Message:

Fixed #4964 -- Added Brazilian state field to localflavors. Thanks, William Alves de Souza.

Files:

Legend:

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

    r5876 r6176  
    77from django.newforms.fields import Field, RegexField, CharField, Select, EMPTY_VALUES 
    88from django.utils.encoding import smart_unicode 
    9 from django.utils.translation import ugettext 
     9from django.utils.translation import ugettext as _ 
    1010import re 
    1111 
     
    1616        super(BRZipCodeField, self).__init__(r'^\d{5}-\d{3}$', 
    1717            max_length=None, min_length=None, 
    18             error_message=ugettext('Enter a zip code in the format XXXXX-XXX.'), 
     18            error_message=_('Enter a zip code in the format XXXXX-XXX.'), 
    1919                    *args, **kwargs) 
    2020 
     
    2828        if m: 
    2929            return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3)) 
    30         raise ValidationError(ugettext('Phone numbers must be in XX-XXXX-XXXX format.')) 
     30        raise ValidationError(_('Phone numbers must be in XX-XXXX-XXXX format.')) 
    3131 
    3232class BRStateSelect(Select): 
     
    3939        super(BRStateSelect, self).__init__(attrs, choices=STATE_CHOICES) 
    4040 
     41class BRStateChoiceField(Field): 
     42    """ 
     43    A choice field that uses a list of Brazilian states as its choices. 
     44    """ 
     45    widget = Select 
     46 
     47    def __init__(self, required=True, widget=None, label=None, 
     48                 initial=None, help_text=None): 
     49        super(BRStateChoiceField, self).__init__(required, widget, label, 
     50                                                 initial, help_text) 
     51        from br_states import STATE_CHOICES 
     52        self.widget.choices = STATE_CHOICES 
     53 
     54    def clean(self, value): 
     55        value = super(BRStateChoiceField, self).clean(value) 
     56        if value in EMPTY_VALUES: 
     57            value = u'' 
     58        value = smart_unicode(value) 
     59        if value == u'': 
     60            return value 
     61        valid_values = set([smart_unicode(k) for k, v in self.widget.choices]) 
     62        if value not in valid_values: 
     63            raise ValidationError(_(u'Select a valid brazilian state.' 
     64                                           u' That state is not one' 
     65                                           u' of the available states.')) 
     66        return value 
    4167 
    4268def DV_maker(v): 
     
    7096            int(value) 
    7197        except ValueError: 
    72             raise ValidationError(ugettext("This field requires only numbers.")) 
     98            raise ValidationError(_("This field requires only numbers.")) 
    7399        if len(value) != 11: 
    74             raise ValidationError(ugettext("This field requires at most 11 digits or 14 characters.")) 
     100            raise ValidationError(_("This field requires at most 11 digits or 14 characters.")) 
    75101        orig_dv = value[-2:] 
    76102 
     
    82108        value = value[:-1] + str(new_2dv) 
    83109        if value[-2:] != orig_dv: 
    84             raise ValidationError(ugettext("Invalid CPF number.")) 
     110            raise ValidationError(_("Invalid CPF number.")) 
    85111 
    86112        return orig_value 
     
    104130        if len(value) != 14: 
    105131            raise ValidationError( 
    106                 ugettext("This field requires at least 14 digits")) 
     132                _("This field requires at least 14 digits")) 
    107133        orig_dv = value[-2:] 
    108134 
     
    114140        value = value[:-1] + str(new_2dv) 
    115141        if value[-2:] != orig_dv: 
    116             raise ValidationError(ugettext("Invalid CNPJ number.")) 
     142            raise ValidationError(_("Invalid CNPJ number.")) 
    117143 
    118144        return orig_value 
  • django/trunk/tests/regressiontests/forms/localflavor.py

    r6145 r6176  
    981981u'<select name="states">\n<option value="AC">Acre</option>\n<option value="AL">Alagoas</option>\n<option value="AP">Amap\xe1</option>\n<option value="AM">Amazonas</option>\n<option value="BA">Bahia</option>\n<option value="CE">Cear\xe1</option>\n<option value="DF">Distrito Federal</option>\n<option value="ES">Esp\xedrito Santo</option>\n<option value="GO">Goi\xe1s</option>\n<option value="MA">Maranh\xe3o</option>\n<option value="MT">Mato Grosso</option>\n<option value="MS">Mato Grosso do Sul</option>\n<option value="MG">Minas Gerais</option>\n<option value="PA">Par\xe1</option>\n<option value="PB">Para\xedba</option>\n<option value="PR" selected="selected">Paran\xe1</option>\n<option value="PE">Pernambuco</option>\n<option value="PI">Piau\xed</option>\n<option value="RJ">Rio de Janeiro</option>\n<option value="RN">Rio Grande do Norte</option>\n<option value="RS">Rio Grande do Sul</option>\n<option value="RO">Rond\xf4nia</option>\n<option value="RR">Roraima</option>\n<option value="SC">Santa Catarina</option>\n<option value="SP">S\xe3o Paulo</option>\n<option value="SE">Sergipe</option>\n<option value="TO">Tocantins</option>\n</select>' 
    982982 
     983# BRStateChoiceField ######################################################### 
     984>>> from django.contrib.localflavor.br.forms import BRStateChoiceField 
     985>>> f = BRStateChoiceField() 
     986>>> ', '.join([f.clean(s) for s, _ in f.widget.choices]) 
     987u'AC, AL, AP, AM, BA, CE, DF, ES, GO, MA, MT, MS, MG, PA, PB, PR, PE, PI, RJ, RN, RS, RO, RR, SC, SP, SE, TO' 
     988>>> f.clean('') 
     989Traceback (most recent call last): 
     990... 
     991ValidationError: [u'This field is required.'] 
     992>>> f.clean('pr') 
     993Traceback (most recent call last): 
     994... 
     995ValidationError: [u'Select a valid brazilian state. That state is not one of the available states.'] 
     996 
    983997# DEZipCodeField ############################################################## 
    984998