Django

Code

Changeset 6379

Show
Ignore:
Timestamp:
09/19/07 18:40:47 (1 year ago)
Author:
jacob
Message:

Fixed #5546: split form unit tests into manageable chunks. This isn't a perfect fix since the chunks aren't yet autodiscovered, but that shouldn't prevent checking this in. Thanks, Leo Soto.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/tests/regressiontests/forms/localflavor.py

    r6208 r6379  
    1 # -*- coding: utf-8 -*- 
    2 # Tests for the different contrib/localflavor/ form fields. 
    3  
    4 localflavor_tests = r""" 
    5 # USZipCodeField ############################################################## 
    6  
    7 USZipCodeField validates that the data is either a five-digit U.S. zip code or 
    8 a zip+4. 
    9 >>> from django.contrib.localflavor.us.forms import USZipCodeField 
    10 >>> f = USZipCodeField() 
    11 >>> f.clean('60606') 
    12 u'60606' 
    13 >>> f.clean(60606) 
    14 u'60606' 
    15 >>> f.clean('04000') 
    16 u'04000' 
    17 >>> f.clean('4000') 
    18 Traceback (most recent call last): 
    19 ... 
    20 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    21 >>> f.clean('60606-1234') 
    22 u'60606-1234' 
    23 >>> f.clean('6060-1234') 
    24 Traceback (most recent call last): 
    25 ... 
    26 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    27 >>> f.clean('60606-') 
    28 Traceback (most recent call last): 
    29 ... 
    30 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    31 >>> f.clean(None) 
    32 Traceback (most recent call last): 
    33 ... 
    34 ValidationError: [u'This field is required.'] 
    35 >>> f.clean('') 
    36 Traceback (most recent call last): 
    37 ... 
    38 ValidationError: [u'This field is required.'] 
    39  
    40 >>> f = USZipCodeField(required=False) 
    41 >>> f.clean('60606') 
    42 u'60606' 
    43 >>> f.clean(60606) 
    44 u'60606' 
    45 >>> f.clean('04000') 
    46 u'04000' 
    47 >>> f.clean('4000') 
    48 Traceback (most recent call last): 
    49 ... 
    50 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    51 >>> f.clean('60606-1234') 
    52 u'60606-1234' 
    53 >>> f.clean('6060-1234') 
    54 Traceback (most recent call last): 
    55 ... 
    56 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    57 >>> f.clean('60606-') 
    58 Traceback (most recent call last): 
    59 ... 
    60 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    61 >>> f.clean(None) 
    62 u'' 
    63 >>> f.clean('') 
    64 u'' 
    65  
    66 # USPhoneNumberField ########################################################## 
    67  
    68 USPhoneNumberField validates that the data is a valid U.S. phone number, 
    69 including the area code. It's normalized to XXX-XXX-XXXX format. 
    70 >>> from django.contrib.localflavor.us.forms import USPhoneNumberField 
    71 >>> f = USPhoneNumberField() 
    72 >>> f.clean('312-555-1212') 
    73 u'312-555-1212' 
    74 >>> f.clean('3125551212') 
    75 u'312-555-1212' 
    76 >>> f.clean('312 555-1212') 
    77 u'312-555-1212' 
    78 >>> f.clean('(312) 555-1212') 
    79 u'312-555-1212' 
    80 >>> f.clean('312 555 1212') 
    81 u'312-555-1212' 
    82 >>> f.clean('312.555.1212') 
    83 u'312-555-1212' 
    84 >>> f.clean('312.555-1212') 
    85 u'312-555-1212' 
    86 >>> f.clean(' (312) 555.1212 ') 
    87 u'312-555-1212' 
    88 >>> f.clean('555-1212') 
    89 Traceback (most recent call last): 
    90 ... 
    91 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    92 >>> f.clean('312-55-1212') 
    93 Traceback (most recent call last): 
    94 ... 
    95 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    96 >>> f.clean(None) 
    97 Traceback (most recent call last): 
    98 ... 
    99 ValidationError: [u'This field is required.'] 
    100 >>> f.clean('') 
    101 Traceback (most recent call last): 
    102 ... 
    103 ValidationError: [u'This field is required.'] 
    104  
    105 >>> f = USPhoneNumberField(required=False) 
    106 >>> f.clean('312-555-1212') 
    107 u'312-555-1212' 
    108 >>> f.clean('3125551212') 
    109 u'312-555-1212' 
    110 >>> f.clean('312 555-1212') 
    111 u'312-555-1212' 
    112 >>> f.clean('(312) 555-1212') 
    113 u'312-555-1212' 
    114 >>> f.clean('312 555 1212') 
    115 u'312-555-1212' 
    116 >>> f.clean('312.555.1212') 
    117 u'312-555-1212' 
    118 >>> f.clean('312.555-1212') 
    119 u'312-555-1212' 
    120 >>> f.clean(' (312) 555.1212 ') 
    121 u'312-555-1212' 
    122 >>> f.clean('555-1212') 
    123 Traceback (most recent call last): 
    124 ... 
    125 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    126 >>> f.clean('312-55-1212') 
    127 Traceback (most recent call last): 
    128 ... 
    129 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    130 >>> f.clean(None) 
    131 u'' 
    132 >>> f.clean('') 
    133 u'' 
    134  
    135 # USStateField ################################################################ 
    136  
    137 USStateField validates that the data is either an abbreviation or name of a 
    138 U.S. state. 
    139 >>> from django.contrib.localflavor.us.forms import USStateField 
    140 >>> f = USStateField() 
    141 >>> f.clean('il') 
    142 u'IL' 
    143 >>> f.clean('IL') 
    144 u'IL' 
    145 >>> f.clean('illinois') 
    146 u'IL' 
    147 >>> f.clean('  illinois ') 
    148 u'IL' 
    149 >>> f.clean(60606) 
    150 Traceback (most recent call last): 
    151 ... 
    152 ValidationError: [u'Enter a U.S. state or territory.'] 
    153 >>> f.clean(None) 
    154 Traceback (most recent call last): 
    155 ... 
    156 ValidationError: [u'This field is required.'] 
    157 >>> f.clean('') 
    158 Traceback (most recent call last): 
    159 ... 
    160 ValidationError: [u'This field is required.'] 
    161  
    162 >>> f = USStateField(required=False) 
    163 >>> f.clean('il') 
    164 u'IL' 
    165 >>> f.clean('IL') 
    166 u'IL' 
    167 >>> f.clean('illinois') 
    168 u'IL' 
    169 >>> f.clean('  illinois ') 
    170 u'IL' 
    171 >>> f.clean(60606) 
    172 Traceback (most recent call last): 
    173 ... 
    174 ValidationError: [u'Enter a U.S. state or territory.'] 
    175 >>> f.clean(None) 
    176 u'' 
    177 >>> f.clean('') 
    178 u'' 
    179  
    180 # USStateSelect ############################################################### 
    181  
    182 USStateSelect is a Select widget that uses a list of U.S. states/territories 
    183 as its choices. 
    184 >>> from django.contrib.localflavor.us.forms import USStateSelect 
    185 >>> w = USStateSelect() 
    186 >>> print w.render('state', 'IL') 
    187 <select name="state"> 
    188 <option value="AL">Alabama</option> 
    189 <option value="AK">Alaska</option> 
    190 <option value="AS">American Samoa</option> 
    191 <option value="AZ">Arizona</option> 
    192 <option value="AR">Arkansas</option> 
    193 <option value="CA">California</option> 
    194 <option value="CO">Colorado</option> 
    195 <option value="CT">Connecticut</option> 
    196 <option value="DE">Delaware</option> 
    197 <option value="DC">District of Columbia</option> 
    198 <option value="FM">Federated States of Micronesia</option> 
    199 <option value="FL">Florida</option> 
    200 <option value="GA">Georgia</option> 
    201 <option value="GU">Guam</option> 
    202 <option value="HI">Hawaii</option> 
    203 <option value="ID">Idaho</option> 
    204 <option value="IL" selected="selected">Illinois</option> 
    205 <option value="IN">Indiana</option> 
    206 <option value="IA">Iowa</option> 
    207 <option value="KS">Kansas</option> 
    208 <option value="KY">Kentucky</option> 
    209 <option value="LA">Louisiana</option> 
    210 <option value="ME">Maine</option> 
    211 <option value="MH">Marshall Islands</option> 
    212 <option value="MD">Maryland</option> 
    213 <option value="MA">Massachusetts</option> 
    214 <option value="MI">Michigan</option> 
    215 <option value="MN">Minnesota</option> 
    216 <option value="MS">Mississippi</option> 
    217 <option value="MO">Missouri</option> 
    218 <option value="MT">Montana</option> 
    219 <option value="NE">Nebraska</option> 
    220 <option value="NV">Nevada</option> 
    221 <option value="NH">New Hampshire</option> 
    222 <option value="NJ">New Jersey</option> 
    223 <option value="NM">New Mexico</option> 
    224 <option value="NY">New York</option> 
    225 <option value="NC">North Carolina</option> 
    226 <option value="ND">North Dakota</option> 
    227 <option value="MP">Northern Mariana Islands</option> 
    228 <option value="OH">Ohio</option> 
    229 <option value="OK">Oklahoma</option> 
    230 <option value="OR">Oregon</option> 
    231 <option value="PW">Palau</option> 
    232 <option value="PA">Pennsylvania</option> 
    233 <option value="PR">Puerto Rico</option> 
    234 <option value="RI">Rhode Island</option> 
    235 <option value="SC">South Carolina</option> 
    236 <option value="SD">South Dakota</option> 
    237 <option value="TN">Tennessee</option> 
    238 <option value="TX">Texas</option> 
    239 <option value="UT">Utah</option> 
    240 <option value="VT">Vermont</option> 
    241 <option value="VI">Virgin Islands</option> 
    242 <option value="VA">Virginia</option> 
    243 <option value="WA">Washington</option> 
    244 <option value="WV">West Virginia</option> 
    245 <option value="WI">Wisconsin</option> 
    246 <option value="WY">Wyoming</option> 
    247 </select> 
    248  
    249 # USSocialSecurityNumberField ################################################# 
    250 >>> from django.contrib.localflavor.us.forms import USSocialSecurityNumberField 
    251 >>> f = USSocialSecurityNumberField() 
    252 >>> f.clean('987-65-4330') 
    253 u'987-65-4330' 
    254 >>> f.clean('987654330') 
    255 u'987-65-4330' 
    256 >>> f.clean('078-05-1120') 
    257 Traceback (most recent call last): 
    258 ... 
    259 ValidationError: [u'Enter a valid U.S. Social Security number in XXX-XX-XXXX format.'] 
    260  
    261 # UKPostcodeField ############################################################# 
    262  
    263 UKPostcodeField validates that the data is a valid UK postcode. 
    264 >>> from django.contrib.localflavor.uk.forms import UKPostcodeField 
    265 >>> f = UKPostcodeField() 
    266 >>> f.clean('BT32 4PX') 
    267 u'BT32 4PX' 
    268 >>> f.clean('GIR 0AA') 
    269 u'GIR 0AA' 
    270 >>> f.clean('BT324PX') 
    271 Traceback (most recent call last): 
    272 ... 
    273 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    274 >>> f.clean('1NV 4L1D') 
    275 Traceback (most recent call last): 
    276 ... 
    277 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    278 >>> f.clean(None) 
    279 Traceback (most recent call last): 
    280 ... 
    281 ValidationError: [u'This field is required.'] 
    282 >>> f.clean('') 
    283 Traceback (most recent call last): 
    284 ... 
    285 ValidationError: [u'This field is required.'] 
    286  
    287 >>> f = UKPostcodeField(required=False) 
    288 >>> f.clean('BT32 4PX') 
    289 u'BT32 4PX' 
    290 >>> f.clean('GIR 0AA') 
    291 u'GIR 0AA' 
    292 >>> f.clean('1NV 4L1D') 
    293 Traceback (most recent call last): 
    294 ... 
    295 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    296 >>> f.clean('BT324PX') 
    297 Traceback (most recent call last): 
    298 ... 
    299 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    300 >>> f.clean(None) 
    301 u'' 
    302 >>> f.clean('') 
    303 u'' 
    304  
    305 # FRZipCodeField ############################################################# 
    306  
    307 FRZipCodeField validates that the data is a valid FR zipcode. 
    308 >>> from django.contrib.localflavor.fr.forms import FRZipCodeField 
    309 >>> f = FRZipCodeField() 
    310 >>> f.clean('75001') 
    311 u'75001' 
    312 >>> f.clean('93200') 
    313 u'93200' 
    314 >>> f.clean('2A200') 
    315 Traceback (most recent call last): 
    316 ... 
    317 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    318 >>> f.clean('980001') 
    319 Traceback (most recent call last): 
    320 ... 
    321 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    322 >>> f.clean(None) 
    323 Traceback (most recent call last): 
    324 ... 
    325 ValidationError: [u'This field is required.'] 
    326 >>> f.clean('') 
    327 Traceback (most recent call last): 
    328 ... 
    329 ValidationError: [u'This field is required.'] 
    330  
    331 >>> f = FRZipCodeField(required=False) 
    332 >>> f.clean('75001') 
    333 u'75001' 
    334 >>> f.clean('93200') 
    335 u'93200' 
    336 >>> f.clean('2A200') 
    337 Traceback (most recent call last): 
    338 ... 
    339 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    340 >>> f.clean('980001') 
    341 Traceback (most recent call last): 
    342 ... 
    343 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    344 >>> f.clean(None) 
    345 u'' 
    346 >>> f.clean('') 
    347 u'' 
    348  
    349  
    350 # FRPhoneNumberField ########################################################## 
    351  
    352 FRPhoneNumberField validates that the data is a valid french phone number. 
    353 It's normalized to 0X XX XX XX XX format. Dots are valid too. 
    354 >>> from django.contrib.localflavor.fr.forms import FRPhoneNumberField 
    355 >>> f = FRPhoneNumberField() 
    356 >>> f.clean('01 55 44 58 64') 
    357 u'01 55 44 58 64' 
    358 >>> f.clean('0155445864') 
    359 u'01 55 44 58 64' 
    360 >>> f.clean('01 5544 5864') 
    361 u'01 55 44 58 64' 
    362 >>> f.clean('01 55.44.58.64') 
    363 u'01 55 44 58 64' 
    364 >>> f.clean('01.55.44.58.64') 
    365 u'01 55 44 58 64' 
    366 >>> f.clean('01,55,44,58,64') 
    367 Traceback (most recent call last): 
    368 ... 
    369 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    370 >>> f.clean('555 015 544') 
    371 Traceback (most recent call last): 
    372 ... 
    373 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    374 >>> f.clean(None) 
    375 Traceback (most recent call last): 
    376 ... 
    377 ValidationError: [u'This field is required.'] 
    378 >>> f.clean('') 
    379 Traceback (most recent call last): 
    380 ... 
    381 ValidationError: [u'This field is required.'] 
    382  
    383 >>> f = FRPhoneNumberField(required=False) 
    384 >>> f.clean('01 55 44 58 64') 
    385 u'01 55 44 58 64' 
    386 >>> f.clean('0155445864') 
    387 u'01 55 44 58 64' 
    388 >>> f.clean('01 5544 5864') 
    389 u'01 55 44 58 64' 
    390 >>> f.clean('01 55.44.58.64') 
    391 u'01 55 44 58 64' 
    392 >>> f.clean('01.55.44.58.64') 
    393 u'01 55 44 58 64' 
    394 >>> f.clean('01,55,44,58,64') 
    395 Traceback (most recent call last): 
    396 ... 
    397 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    398 >>> f.clean('555 015 544') 
    399 Traceback (most recent call last): 
    400 ... 
    401 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    402 >>> f.clean(None) 
    403 u'' 
    404 >>> f.clean('') 
    405 u'' 
    406  
    407 # FRDepartmentSelect ############################################################### 
    408  
    409 FRDepartmentSelect is a Select widget that uses a list of french departments 
    410 including DOM TOM 
    411 >>> from django.contrib.localflavor.fr.forms import FRDepartmentSelect 
    412 >>> w = FRDepartmentSelect() 
    413 >>> print w.render('dep', 'Paris') 
    414 <select name="dep"> 
    415 <option value="01">01 - Ain</option> 
    416 <option value="02">02 - Aisne</option> 
    417 <option value="03">03 - Allier</option> 
    418 <option value="04">04 - Alpes-de-Haute-Provence</option> 
    419 <option value="05">05 - Hautes-Alpes</option> 
    420 <option value="06">06 - Alpes-Maritimes</option> 
    421 <option value="07">07 - Ardeche</option> 
    422 <option value="08">08 - Ardennes</option> 
    423 <option value="09">09 - Ariege</option> 
    424 <option value="10">10 - Aube</option> 
    425 <option value="11">11 - Aude</option> 
    426 <option value="12">12 - Aveyron</option> 
    427 <option value="13">13 - Bouches-du-Rhone</option> 
    428 <option value="14">14 - Calvados</option> 
    429 <option value="15">15 - Cantal</option> 
    430 <option value="16">16 - Charente</option> 
    431 <option value="17">17 - Charente-Maritime</option> 
    432 <option value="18">18 - Cher</option> 
    433 <option value="19">19 - Correze</option> 
    434 <option value="21">21 - Cote-d&#39;Or</option> 
    435 <option value="22">22 - Cotes-d&#39;Armor</option> 
    436 <option value="23">23 - Creuse</option> 
    437 <option value="24">24 - Dordogne</option> 
    438 <option value="25">25 - Doubs</option> 
    439 <option value="26">26 - Drome</option> 
    440 <option value="27">27 - Eure</option> 
    441 <option value="28">28 - Eure-et-Loire</option> 
    442 <option value="29">29 - Finistere</option> 
    443 <option value="2A">2A - Corse-du-Sud</option> 
    444 <option value="2B">2B - Haute-Corse</option> 
    445 <option value="30">30 - Gard</option> 
    446 <option value="31">31 - Haute-Garonne</option> 
    447 <option value="32">32 - Gers</option> 
    448 <option value="33">33 - Gironde</option> 
    449 <option value="34">34 - Herault</option> 
    450 <option value="35">35 - Ille-et-Vilaine</option> 
    451 <option value="36">36 - Indre</option> 
    452 <option value="37">37 - Indre-et-Loire</option> 
    453 <option value="38">38 - Isere</option> 
    454 <option value="39">39 - Jura</option> 
    455 <option value="40">40 - Landes</option> 
    456 <option value="41">41 - Loir-et-Cher</option> 
    457 <option value="42">42 - Loire</option> 
    458 <option value="43">43 - Haute-Loire</option> 
    459 <option value="44">44 - Loire-Atlantique</option> 
    460 <option value="45">45 - Loiret</option> 
    461 <option value="46">46 - Lot</option> 
    462 <option value="47">47 - Lot-et-Garonne</option> 
    463 <option value="48">48 - Lozere</option> 
    464 <option value="49">49 - Maine-et-Loire</option> 
    465 <option value="50">50 - Manche</option> 
    466 <option value="51">51 - Marne</option> 
    467 <option value="52">52 - Haute-Marne</option> 
    468 <option value="53">53 - Mayenne</option> 
    469 <option value="54">54 - Meurthe-et-Moselle</option> 
    470 <option value="55">55 - Meuse</option> 
    471 <option value="56">56 - Morbihan</option> 
    472 <option value="57">57 - Moselle</option> 
    473 <option value="58">58 - Nievre</option> 
    474 <option value="59">59 - Nord</option> 
    475 <option value="60">60 - Oise</option> 
    476 <option value="61">61 - Orne</option> 
    477 <option value="62">62 - Pas-de-Calais</option> 
    478 <option value="63">63 - Puy-de-Dome</option> 
    479 <option value="64">64 - Pyrenees-Atlantiques</option> 
    480 <option value="65">65 - Hautes-Pyrenees</option> 
    481 <option value="66">66 - Pyrenees-Orientales</option> 
    482 <option value="67">67 - Bas-Rhin</option> 
    483 <option value="68">68 - Haut-Rhin</option> 
    484 <option value="69">69 - Rhone</option> 
    485 <option value="70">70 - Haute-Saone</option> 
    486 <option value="71">71 - Saone-et-Loire</option> 
    487 <option value="72">72 - Sarthe</option> 
    488 <option value="73">73 - Savoie</option> 
    489 <option value="74">74 - Haute-Savoie</option> 
    490 <option value="75">75 - Paris</option> 
    491 <option value="76">76 - Seine-Maritime</option> 
    492 <option value="77">77 - Seine-et-Marne</option> 
    493 <option value="78">78 - Yvelines</option> 
    494 <option value="79">79 - Deux-Sevres</option> 
    495 <option value="80">80 - Somme</option> 
    496 <option value="81">81 - Tarn</option> 
    497 <option value="82">82 - Tarn-et-Garonne</option> 
    498 <option value="83">83 - Var</option> 
    499 <option value="84">84 - Vaucluse</option> 
    500 <option value="85">85 - Vendee</option> 
    501 <option value="86">86 - Vienne</option> 
    502 <option value="87">87 - Haute-Vienne</option> 
    503 <option value="88">88 - Vosges</option> 
    504 <option value="89">89 - Yonne</option> 
    505 <option value="90">90 - Territoire de Belfort</option> 
    506 <option value="91">91 - Essonne</option> 
    507 <option value="92">92 - Hauts-de-Seine</option> 
    508 <option value="93">93 - Seine-Saint-Denis</option> 
    509 <option value="94">94 - Val-de-Marne</option> 
    510 <option value="95">95 - Val-d&#39;Oise</option> 
    511 <option value="2A">2A - Corse du sud</option> 
    512 <option value="2B">2B - Haute Corse</option> 
    513 <option value="971">971 - Guadeloupe</option> 
    514 <option value="972">972 - Martinique</option> 
    515 <option value="973">973 - Guyane</option> 
    516 <option value="974">974 - La Reunion</option> 
    517 <option value="975">975 - Saint-Pierre-et-Miquelon</option> 
    518 <option value="976">976 - Mayotte</option> 
    519 <option value="984">984 - Terres Australes et Antarctiques</option> 
    520 <option value="986">986 - Wallis et Futuna</option> 
    521 <option value="987">987 - Polynesie Francaise</option> 
    522 <option value="988">988 - Nouvelle-Caledonie</option> 
    523 </select> 
    524  
    525 # JPPostalCodeField ############################################################### 
    526  
    527 A form field that validates its input is a Japanese postcode. 
    528  
    529 Accepts 7 digits(with/out hyphen). 
    530 >>> from django.contrib.localflavor.jp.forms import JPPostalCodeField 
    531 >>> f = JPPostalCodeField() 
    532 >>> f.clean('251-0032') 
    533 u'2510032' 
    534 >>> f.clean('2510032') 
    535 u'2510032' 
    536 >>> f.clean('2510-032') 
    537 Traceback (most recent call last): 
    538 ... 
    539 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    540 >>> f.clean('251a0032') 
    541 Traceback (most recent call last): 
    542 ... 
    543 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    544 >>> f.clean('a51-0032') 
    545 Traceback (most recent call last): 
    546 ... 
    547 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    548 >>> f.clean('25100321') 
    549 Traceback (most recent call last): 
    550 ... 
    551 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    552 >>> f.clean('') 
    553 Traceback (most recent call last): 
    554 ... 
    555 ValidationError: [u'This field is required.'] 
    556  
    557 >>> f = JPPostalCodeField(required=False) 
    558 >>> f.clean('251-0032') 
    559 u'2510032' 
    560 >>> f.clean('2510032') 
    561 u'2510032' 
    562 >>> f.clean('2510-032') 
    563 Traceback (most recent call last): 
    564 ... 
    565 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    566 >>> f.clean('') 
    567 u'' 
    568 >>> f.clean(None) 
    569 u'' 
    570  
    571 # JPPrefectureSelect ############################################################### 
    572  
    573 A Select widget that uses a list of Japanese prefectures as its choices. 
    574 >>> from django.contrib.localflavor.jp.forms import JPPrefectureSelect 
    575 >>> w = JPPrefectureSelect() 
    576 >>> print w.render('prefecture', 'kanagawa') 
    577 <select name="prefecture"> 
    578 <option value="hokkaido">Hokkaido</option> 
    579 <option value="aomori">Aomori</option> 
    580 <option value="iwate">Iwate</option> 
    581 <option value="miyagi">Miyagi</option> 
    582 <option value="akita">Akita</option> 
    583 <option value="yamagata">Yamagata</option> 
    584 <option value="fukushima">Fukushima</option> 
    585 <option value="ibaraki">Ibaraki</option> 
    586 <option value="tochigi">Tochigi</option> 
    587 <option value="gunma">Gunma</option> 
    588 <option value="saitama">Saitama</option> 
    589 <option value="chiba">Chiba</option> 
    590 <option value="tokyo">Tokyo</option> 
    591 <option value="kanagawa" selected="selected">Kanagawa</option> 
    592 <option value="yamanashi">Yamanashi</option> 
    593 <option value="nagano">Nagano</option> 
    594 <option value="niigata">Niigata</option> 
    595 <option value="toyama">Toyama</option> 
    596 <option value="ishikawa">Ishikawa</option> 
    597 <option value="fukui">Fukui</option> 
    598 <option value="gifu">Gifu</option> 
    599 <option value="shizuoka">Shizuoka</option> 
    600 <option value="aichi">Aichi</option> 
    601 <option value="mie">Mie</option> 
    602 <option value="shiga">Shiga</option> 
    603 <option value="kyoto">Kyoto</option> 
    604 <option value="osaka">Osaka</option> 
    605 <option value="hyogo">Hyogo</option> 
    606 <option value="nara">Nara</option> 
    607 <option value="wakayama">Wakayama</option> 
    608 <option value="tottori">Tottori</option> 
    609 <option value="shimane">Shimane</option> 
    610 <option value="okayama">Okayama</option> 
    611 <option value="hiroshima">Hiroshima</option> 
    612 <option value="yamaguchi">Yamaguchi</option> 
    613 <option value="tokushima">Tokushima</option> 
    614 <option value="kagawa">Kagawa</option> 
    615 <option value="ehime">Ehime</option> 
    616 <option value="kochi">Kochi</option> 
    617 <option value="fukuoka">Fukuoka</option> 
    618 <option value="saga">Saga</option> 
    619 <option value="nagasaki">Nagasaki</option> 
    620 <option value="kumamoto">Kumamoto</option> 
    621 <option value="oita">Oita</option> 
    622 <option value="miyazaki">Miyazaki</option> 
    623 <option value="kagoshima">Kagoshima</option> 
    624 <option value="okinawa">Okinawa</option> 
    625 </select> 
    626  
    627 # ITZipCodeField ############################################################# 
    628  
    629 >>> from django.contrib.localflavor.it.forms import ITZipCodeField 
    630 >>> f = ITZipCodeField() 
    631 >>> f.clean('00100') 
    632 u'00100' 
    633 >>> f.clean(' 00100') 
    634 Traceback (most recent call last): 
    635 ... 
    636 ValidationError: [u'Enter a valid zip code.'] 
    637  
    638 # ITRegionSelect ############################################################# 
    639  
    640 >>> from django.contrib.localflavor.it.forms import ITRegionSelect 
    641 >>> w = ITRegionSelect() 
    642 >>> w.render('regions', 'PMN') 
    643 u'<select name="regions">\n<option value="ABR">Abruzzo</option>\n<option value="BAS">Basilicata</option>\n<option value="CAL">Calabria</option>\n<option value="CAM">Campania</option>\n<option value="EMR">Emilia-Romagna</option>\n<option value="FVG">Friuli-Venezia Giulia</option>\n<option value="LAZ">Lazio</option>\n<option value="LIG">Liguria</option>\n<option value="LOM">Lombardia</option>\n<option value="MAR">Marche</option>\n<option value="MOL">Molise</option>\n<option value="PMN" selected="selected">Piemonte</option>\n<option value="PUG">Puglia</option>\n<option value="SAR">Sardegna</option>\n<option value="SIC">Sicilia</option>\n<option value="TOS">Toscana</option>\n<option value="TAA">Trentino-Alto Adige</option>\n<option value="UMB">Umbria</option>\n<option value="VAO">Valle d\u2019Aosta</option>\n<option value="VEN">Veneto</option>\n</select>' 
    644  
    645 # ITSocialSecurityNumberField ################################################# 
    646  
    647 >>> from django.contrib.localflavor.it.forms import ITSocialSecurityNumberField 
    648 >>> f = ITSocialSecurityNumberField() 
    649 >>> f.clean('LVSGDU99T71H501L') 
    650 u'LVSGDU99T71H501L' 
    651 >>> f.clean('LBRRME11A01L736W') 
    652 u'LBRRME11A01L736W' 
    653 >>> f.clean('lbrrme11a01l736w') 
    654 u'LBRRME11A01L736W' 
    655 >>> f.clean('LBR RME 11A01 L736W') 
    656 u'LBRRME11A01L736W' 
    657 >>> f.clean('LBRRME11A01L736A') 
    658 Traceback (most recent call last): 
    659 ... 
    660 ValidationError: [u'Enter a valid Social Security number.'] 
    661 >>> f.clean('%BRRME11A01L736W') 
    662 Traceback (most recent call last): 
    663 ... 
    664 ValidationError: [u'Enter a valid Social Security number.'] 
    665  
    666 # ITVatNumberField ########################################################### 
    667  
    668 >>> from django.contrib.localflavor.it.forms import ITVatNumberField 
    669 >>> f = ITVatNumberField() 
    670 >>> f.clean('07973780013') 
    671 u'07973780013' 
    672 >>> f.clean('7973780013') 
    673 u'07973780013' 
    674 >>> f.clean(7973780013) 
    675 u'07973780013' 
    676 >>> f.clean('07973780014') 
    677 Traceback (most recent call last): 
    678 ... 
    679 ValidationError: [u'Enter a valid VAT number.'] 
    680 >>> f.clean('A7973780013') 
    681 Traceback (most recent call last): 
    682 ... 
    683 ValidationError: [u'Enter a valid VAT number.'] 
    684  
    685 # FIZipCodeField ############################################################# 
    686  
    687 FIZipCodeField validates that the data is a valid FI zipcode. 
    688 >>> from django.contrib.localflavor.fi.forms import FIZipCodeField 
    689 >>> f = FIZipCodeField() 
    690 >>> f.clean('20540') 
    691 u'20540' 
    692 >>> f.clean('20101') 
    693 u'20101' 
    694 >>> f.clean('20s40') 
    695 Traceback (most recent call last): 
    696 ... 
    697 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    698 >>> f.clean('205401') 
    699 Traceback (most recent call last): 
    700 ... 
    701 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    702 >>> f.clean(None) 
    703 Traceback (most recent call last): 
    704 ... 
    705 ValidationError: [u'This field is required.'] 
    706 >>> f.clean('') 
    707 Traceback (most recent call last): 
    708 ... 
    709 ValidationError: [u'This field is required.'] 
    710  
    711 >>> f = FIZipCodeField(required=False) 
    712 >>> f.clean('20540') 
    713 u'20540' 
    714 >>> f.clean('20101') 
    715 u'20101' 
    716 >>> f.clean('20s40') 
    717 Traceback (most recent call last): 
    718 ... 
    719 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    720 >>> f.clean('205401') 
    721 Traceback (most recent call last): 
    722 ... 
    723 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    724 >>> f.clean(None) 
    725 u'' 
    726 >>> f.clean('') 
    727 u'' 
    728  
    729 # FIMunicipalitySelect ############################################################### 
    730  
    731 A Select widget that uses a list of Finnish municipalities as its choices. 
    732 >>> from django.contrib.localflavor.fi.forms import FIMunicipalitySelect 
    733 >>> w = FIMunicipalitySelect() 
    734 >>> unicode(w.render('municipalities', 'turku')) 
    735 u'<select name="municipalities">\n<option value="akaa">Akaa</option>\n<option value="alaharma">Alah\xe4rm\xe4</option>\n<option value="alajarvi">Alaj\xe4rvi</option>\n<option value="alastaro">Alastaro</option>\n<option value="alavieska">Alavieska</option>\n<option value="alavus">Alavus</option>\n<option value="anjalankoski">Anjalankoski</option>\n<option value="artjarvi">Artj\xe4rvi</option>\n<option value="asikkala">Asikkala</option>\n<option value="askainen">Askainen</option>\n<option value="askola">Askola</option>\n<option value="aura">Aura</option>\n<option value="brando">Br\xe4nd\xf6</option>\n<option value="dragsfjard">Dragsfj\xe4rd</option>\n<option value="eckero">Ecker\xf6</option>\n<option value="elimaki">Elim\xe4ki</option>\n<option value="eno">Eno</option>\n<option value="enonkoski">Enonkoski</option>\n<option value="enontekio">Enonteki\xf6</option>\n<option value="espoo">Espoo</option>\n<option value="eura">Eura</option>\n<option value="eurajoki">Eurajoki</option>\n<option value="evijarvi">Evij\xe4rvi</option>\n<option value="finstrom">Finstr\xf6m</option>\n<option value="forssa">Forssa</option>\n<option value="foglo">F\xf6gl\xf6</option>\n<option value="geta">Geta</option>\n<option value="haapajarvi">Haapaj\xe4rvi</option>\n<option value="haapavesi">Haapavesi</option>\n<option value="hailuoto">Hailuoto</option>\n<option value="halikko">Halikko</option>\n<option value="halsua">Halsua</option>\n<option value="hamina">Hamina</option>\n<option value="hammarland">Hammarland</option>\n<option value="hankasalmi">Hankasalmi</option>\n<option value="hanko">Hanko</option>\n<option value="harjavalta">Harjavalta</option>\n<option value="hartola">Hartola</option>\n<option value="hattula">Hattula</option>\n<option value="hauho">Hauho</option>\n<option value="haukipudas">Haukipudas</option>\n<option value="hausjarvi">Hausj\xe4rvi</option>\n<option value="heinola">Heinola</option>\n<option value="heinavesi">Hein\xe4vesi</option>\n<option value="helsinki">Helsinki</option>\n<option value="himanka">Himanka</option>\n<option value="hirvensalmi">Hirvensalmi</option>\n<option value="hollola">Hollola</option>\n<option value="honkajoki">Honkajoki</option>\n<option value="houtskari">Houtskari</option>\n<option value="huittinen">Huittinen</option>\n<option value="humppila">Humppila</option>\n<option value="hyrynsalmi">Hyrynsalmi</option>\n<option value="hyvinkaa">Hyvink\xe4\xe4</option>\n<option value="hameenkoski">H\xe4meenkoski</option>\n<option value="hameenkyro">H\xe4meenkyr\xf6</option>\n<option value="hameenlinna">H\xe4meenlinna</option>\n<option value="ii">Ii</option>\n<option value="iisalmi">Iisalmi</option>\n<option value="iitti">Iitti</option>\n<option value="ikaalinen">Ikaalinen</option>\n<option value="ilmajoki">Ilmajoki</option>\n<option value="ilomantsi">Ilomantsi</option>\n<option value="imatra">Imatra</option>\n<option value="inari">Inari</option>\n<option value="inio">Ini\xf6</option>\n<option value="inkoo">Inkoo</option>\n<option value="isojoki">Isojoki</option>\n<option value="isokyro">Isokyr\xf6</option>\n<option value="jaala">Jaala</option>\n<option value="jalasjarvi">Jalasj\xe4rvi</option>\n<option value="janakkala">Janakkala</option>\n<option value="joensuu">Joensuu</option>\n<option value="jokioinen">Jokioinen</option>\n<option value="jomala">Jomala</option>\n<option value="joroinen">Joroinen</option>\n<option value="joutsa">Joutsa</option>\n<option value="joutseno">Joutseno</option>\n<option value="juankoski">Juankoski</option>\n<option value="jurva">Jurva</option>\n<option value="juuka">Juuka</option>\n<option value="juupajoki">Juupajoki</option>\n<option value="juva">Juva</option>\n<option value="jyvaskyla">Jyv\xe4skyl\xe4</option>\n<option value="jyvaskylan_mlk">Jyv\xe4skyl\xe4n maalaiskunta</option>\n<option value="jamijarvi">J\xe4mij\xe4rvi</option>\n<option value="jamsa">J\xe4ms\xe4</option>\n<option value="jamsankoski">J\xe4ms\xe4nkoski</option>\n<option value="jarvenpaa">J\xe4rvenp\xe4\xe4</option>\n<option value="kaarina">Kaarina</option>\n<option value="kaavi">Kaavi</option>\n<option value="kajaani">Kajaani</option>\n<option value="kalajoki">Kalajoki</option>\n<option value="kalvola">Kalvola</option>\n<option value="kangasala">Kangasala</option>\n<option value="kangasniemi">Kangasniemi</option>\n<option value="kankaanpaa">Kankaanp\xe4\xe4</option>\n<option value="kannonkoski">Kannonkoski</option>\n<option value="kannus">Kannus</option>\n<option value="karijoki">Karijoki</option>\n<option value="karjaa">Karjaa</option>\n<option value="karjalohja">Karjalohja</option>\n<option value="karkkila">Karkkila</option>\n<option value="karstula">Karstula</option>\n<option value="karttula">Karttula</option>\n<option value="karvia">Karvia</option>\n<option value="kaskinen">Kaskinen</option>\n<option value="kauhajoki">Kauhajoki</option>\n<option value="kauhava">Kauhava</option>\n<option value="kauniainen">Kauniainen</option>\n<option value="kaustinen">Kaustinen</option>\n<option value="keitele">Keitele</option>\n<option value="kemi">Kemi</option>\n<option value="kemijarvi">Kemij\xe4rvi</option>\n<option value="keminmaa">Keminmaa</option>\n<option value="kemio">Kemi\xf6</option>\n<option value="kempele">Kempele</option>\n<option value="kerava">Kerava</option>\n<option value="kerimaki">Kerim\xe4ki</option>\n<option value="kestila">Kestil\xe4</option>\n<option value="kesalahti">Kes\xe4lahti</option>\n<option value="keuruu">Keuruu</option>\n<option value="kihnio">Kihni\xf6</option>\n<option value="kiikala">Kiikala</option>\n<option value="kiikoinen">Kiikoinen</option>\n<option value="kiiminki">Kiiminki</option>\n<option value="kinnula">Kinnula</option>\n<option value="kirkkonummi">Kirkkonummi</option>\n<option value="kisko">Kisko</option>\n<option value="kitee">Kitee</option>\n<option value="kittila">Kittil\xe4</option>\n<option value="kiukainen">Kiukainen</option>\n<option value="kiuruvesi">Kiuruvesi</option>\n<option value="kivijarvi">Kivij\xe4rvi</option>\n<option value="kokemaki">Kokem\xe4ki</option>\n<option value="kokkola">Kokkola</option>\n<option value="kolari">Kolari</option>\n<option value="konnevesi">Konnevesi</option>\n<option value="kontiolahti">Kontiolahti</option>\n<option value="korpilahti">Korpilahti</option>\n<option value="korppoo">Korppoo</option>\n<option value="korsnas">Korsn\xe4s</option>\n<option value="kortesjarvi">Kortesj\xe4rvi</option>\n<option value="koskitl">KoskiTl</option>\n<option value="kotka">Kotka</option>\n<option value="kouvola">Kouvola</option>\n<option value="kristiinankaupunki">Kristiinankaupunki</option>\n<option value="kruunupyy">Kruunupyy</option>\n<option value="kuhmalahti">Kuhmalahti</option>\n<option value="kuhmo">Kuhmo</option>\n<option value="kuhmoinen">Kuhmoinen</option>\n<option value="kumlinge">Kumlinge</option>\n<option value="kuopio">Kuopio</option>\n<option value="kuortane">Kuortane</option>\n<option value="kurikka">Kurikka</option>\n<option value="kuru">Kuru</option>\n<option value="kustavi">Kustavi</option>\n<option value="kuusamo">Kuusamo</option>\n<option value="kuusankoski">Kuusankoski</option>\n<option value="kuusjoki">Kuusjoki</option>\n<option value="kylmakoski">Kylm\xe4koski</option>\n<option value="kyyjarvi">Kyyj\xe4rvi</option>\n<option value="kalvia">K\xe4lvi\xe4</option>\n<option value="karkola">K\xe4rk\xf6l\xe4</option>\n<option value="karsamaki">K\xe4rs\xe4m\xe4ki</option>\n<option value="kokar">K\xf6kar</option>\n<option value="koylio">K\xf6yli\xf6</option>\n<option value="lahti">Lahti</option>\n<option value="laihia">Laihia</option>\n<option value="laitila">Laitila</option>\n<option value="lammi">Lammi</option>\n<option value="lapinjarvi">Lapinj\xe4rvi</option>\n<option value="lapinlahti">Lapinlahti</option>\n<option value="lappajarvi">Lappaj\xe4rvi</option>\n<option value="lappeenranta">Lappeenranta</option>\n<option value="lappi">Lappi</option>\n<option value="lapua">Lapua</option>\n<option value="laukaa">Laukaa</option>\n<option value="lavia">Lavia</option>\n<option value="lehtimaki">Lehtim\xe4ki</option>\n<option value="leivonmaki">Leivonm\xe4ki</option>\n<option value="lemi">Lemi</option>\n<option value="lemland">Lemland</option>\n<option value="lempaala">Lemp\xe4\xe4l\xe4</option>\n<option value="lemu">Lemu</option>\n<option value="leppavirta">Lepp\xe4virta</option>\n<option value="lestijarvi">Lestij\xe4rvi</option>\n<option value="lieksa">Lieksa</option>\n<option value="lieto">Lieto</option>\n<option value="liljendal">Liljendal</option>\n<option value="liminka">Liminka</option>\n<option value="liperi">Liperi</option>\n<option value="lohja">Lohja</option>\n<option value="lohtaja">Lohtaja</option>\n<option value="loimaa">Loimaa</option>\n<option value="loppi">Loppi</option>\n<option value="loviisa">Loviisa</option>\n<option value="luhanka">Luhanka</option>\n<option value="lumijoki">Lumijoki</option>\n<option value="lumparland">Lumparland</option>\n<option value="luoto">Luoto</option>\n<option value="luumaki">Luum\xe4ki</option>\n<option value="luvia">Luvia</option>\n<option value="maalahti">Maalahti</option>\n<option value="maaninka">Maaninka</option>\n<option value="maarianhamina">Maarianhamina</option>\n<option value="marttila">Marttila</option>\n<option value="masku">Masku</option>\n<option value="mellila">Mellil\xe4</option>\n<option value="merijarvi">Merij\xe4rvi</option>\n<option value="merikarvia">Merikarvia</option>\n<option value="merimasku">Merimasku</option>\n<option value="miehikkala">Miehikk\xe4l\xe4</option>\n<option value="mikkeli">Mikkeli</option>\n<option value="mouhijarvi">Mouhij\xe4rvi</option>\n<option value="muhos">Muhos</option>\n<option value="multia">Multia</option>\n<option value="muonio">Muonio</option>\n<option value="mustasaari">Mustasaari</option>\n<option value="muurame">Muurame</option>\n<option value="muurla">Muurla</option>\n<option value="mynamaki">Myn\xe4m\xe4ki</option>\n<option value="myrskyla">Myrskyl\xe4</option>\n<option value="mantsala">M\xe4nts\xe4l\xe4</option>\n<option value="mantta">M\xe4ntt\xe4</option>\n<option value="mantyharju">M\xe4ntyharju</option>\n<option value="naantali">Naantali</option>\n<option value="nakkila">Nakkila</option>\n<option value="nastola">Nastola</option>\n<option value="nauvo">Nauvo</option>\n<option value="nilsia">Nilsi\xe4</option>\n<option value="nivala">Nivala</option>\n<option value="nokia">Nokia</option>\n<option value="noormarkku">Noormarkku</option>\n<option value="nousiainen">Nousiainen</option>\n<option value="nummi-pusula">Nummi-Pusula</option>\n<option value="nurmes">Nurmes</option>\n<option value="nurmijarvi">Nurmij\xe4rvi</option>\n<option value="nurmo">Nurmo</option>\n<option value="narpio">N\xe4rpi\xf6</option>\n<option value="oravainen">Oravainen</option>\n<option value="orimattila">Orimattila</option>\n<option value="oripaa">Orip\xe4\xe4</option>\n<option value="orivesi">Orivesi</option>\n<option value="oulainen">Oulainen</option>\n<option value="oulu">Oulu</option>\n<option value="oulunsalo">Oulunsalo</option>\n<option value="outokumpu">Outokumpu</option>\n<option value="padasjoki">Padasjoki</option>\n<option value="paimio">Paimio</option>\n<option value="paltamo">Paltamo</option>\n<option value="parainen">Parainen</option>\n<option value="parikkala">Parikkala</option>\n<option value="parkano">Parkano</option>\n<option value="pedersore">Peders\xf6re</option>\n<option value="pelkosenniemi">Pelkosenniemi</option>\n<option value="pello">Pello</option>\n<option value="perho">Perho</option>\n<option value="pernaja">Pernaja</option>\n<option value="pernio">Perni\xf6</option>\n<option value="pertteli">Pertteli</option>\n<option value="pertunmaa">Pertunmaa</option>\n<option value="petajavesi">Pet\xe4j\xe4vesi</option>\n<option value="pieksamaki">Pieks\xe4m\xe4ki</option>\n<option value="pielavesi">Pielavesi</option>\n<option value="pietarsaari">Pietarsaari</option>\n<option value="pihtipudas">Pihtipudas</option>\n<option value="piikkio">Piikki\xf6</option>\n<option value="piippola">Piippola</option>\n<option value="pirkkala">Pirkkala</option>\n<option value="pohja">Pohja</option>\n<option value="polvijarvi">Polvij\xe4rvi</option>\n<option value="pomarkku">Pomarkku</option>\n<option value="pori">Pori</option>\n<option value="pornainen">Pornainen</option>\n<option value="porvoo">Porvoo</option>\n<option value="posio">Posio</option>\n<option value="pudasjarvi">Pudasj\xe4rvi</option>\n<option value="pukkila">Pukkila</option>\n<option value="pulkkila">Pulkkila</option>\n<option value="punkaharju">Punkaharju</option>\n<option value="punkalaidun">Punkalaidun</option>\n<option value="puolanka">Puolanka</option>\n<option value="puumala">Puumala</option>\n<option value="pyhtaa">Pyht\xe4\xe4</option>\n<option value="pyhajoki">Pyh\xe4joki</option>\n<option value="pyhajarvi">Pyh\xe4j\xe4rvi</option>\n<option value="pyhanta">Pyh\xe4nt\xe4</option>\n<option value="pyharanta">Pyh\xe4ranta</option>\n<option value="pyhaselka">Pyh\xe4selk\xe4</option>\n<option value="pylkonmaki">Pylk\xf6nm\xe4ki</option>\n<option value="palkane">P\xe4lk\xe4ne</option>\n<option value="poytya">P\xf6yty\xe4</option>\n<option value="raahe">Raahe</option>\n<option value="raisio">Raisio</option>\n<option value="rantasalmi">Rantasalmi</option>\n<option value="rantsila">Rantsila</option>\n<option value="ranua">Ranua</option>\n<option value="rauma">Rauma</option>\n<option value="rautalampi">Rautalampi</option>\n<option value="rautavaara">Rautavaara</option>\n<option value="rautjarvi">Rautj\xe4rvi</option>\n<option value="reisjarvi">Reisj\xe4rvi</option>\n<option value="renko">Renko</option>\n<option value="riihimaki">Riihim\xe4ki</option>\n<option value="ristiina">Ristiina</option>\n<option value="ristijarvi">Ristij\xe4rvi</option>\n<option value="rovaniemi">Rovaniemi</option>\n<option value="ruokolahti">Ruokolahti</option>\n<option value="ruotsinpyhtaa">Ruotsinpyht\xe4\xe4</option>\n<option value="ruovesi">Ruovesi</option>\n<option value="rusko">Rusko</option>\n<option value="rymattyla">Rym\xe4ttyl\xe4</option>\n<option value="raakkyla">R\xe4\xe4kkyl\xe4</option>\n<option value="saarijarvi">Saarij\xe4rvi</option>\n<option value="salla">Salla</option>\n<option value="salo">Salo</option>\n<option value="saltvik">Saltvik</option>\n<option value="sammatti">Sammatti</option>\n<option value="sauvo">Sauvo</option>\n<option value="savitaipale">Savitaipale</option>\n<option value="savonlinna">Savonlinna</option>\n<option value="savonranta">Savonranta</option>\n<option value="savukoski">Savukoski</option>\n<option value="seinajoki">Sein\xe4joki</option>\n<option value="sievi">Sievi</option>\n<option value="siikainen">Siikainen</option>\n<option value="siikajoki">Siikajoki</option>\n<option value="siilinjarvi">Siilinj\xe4rvi</option>\n<option value="simo">Simo</option>\n<option value="sipoo">Sipoo</option>\n<option value="siuntio">Siuntio</option>\n<option value="sodankyla">Sodankyl\xe4</option>\n<option value="soini">Soini</option>\n<option value="somero">Somero</option>\n<option value="sonkajarvi">Sonkaj\xe4rvi</option>\n<option value="sotkamo">Sotkamo</option>\n<option value="sottunga">Sottunga</option>\n<option value="sulkava">Sulkava</option>\n<option value="sund">Sund</option>\n<option value="suomenniemi">Suomenniemi</option>\n<option value="suomusjarvi">Suomusj\xe4rvi</option>\n<option value="suomussalmi">Suomussalmi</option>\n<option value="suonenjoki">Suonenjoki</option>\n<option value="sysma">Sysm\xe4</option>\n<option value="sakyla">S\xe4kyl\xe4</option>\n<option value="sarkisalo">S\xe4rkisalo</option>\n<option value="taipalsaari">Taipalsaari</option>\n<option value="taivalkoski">Taivalkoski</option>\n<option value="taivassalo">Taivassalo</option>\n<option value="tammela">Tammela</option>\n<option value="tammisaari">Tammisaari</option>\n<option value="tampere">Tampere</option>\n<option value="tarvasjoki">Tarvasjoki</option>\n<option value="tervo">Tervo</option>\n<option value="tervola">Tervola</option>\n<option value="teuva">Teuva</option>\n<option value="tohmajarvi">Tohmaj\xe4rvi</option>\n<option value="toholampi">Toholampi</option>\n<option value="toivakka">Toivakka</option>\n<option value="tornio">Tornio</option>\n<option value="turku" selected="selected">Turku</option>\n<option value="tuulos">Tuulos</option>\n<option value="tuusniemi">Tuusniemi</option>\n<option value="tuusula">Tuusula</option>\n<option value="tyrnava">Tyrn\xe4v\xe4</option>\n<option value="toysa">T\xf6ys\xe4</option>\n<option value="ullava">Ullava</option>\n<option value="ulvila">Ulvila</option>\n<option value="urjala">Urjala</option>\n<option value="utajarvi">Utaj\xe4rvi</option>\n<option value="utsjoki">Utsjoki</option>\n<option value="uurainen">Uurainen</option>\n<option value="uusikaarlepyy">Uusikaarlepyy</option>\n<option value="uusikaupunki">Uusikaupunki</option>\n<option value="vaala">Vaala</option>\n<option value="vaasa">Vaasa</option>\n<option value="vahto">Vahto</option>\n<option value="valkeakoski">Valkeakoski</option>\n<option value="valkeala">Valkeala</option>\n<option value="valtimo">Valtimo</option>\n<option value="vammala">Vammala</option>\n<option value="vampula">Vampula</option>\n<option value="vantaa">Vantaa</option>\n<option value="varkaus">Varkaus</option>\n<option value="varpaisjarvi">Varpaisj\xe4rvi</option>\n<option value="vehmaa">Vehmaa</option>\n<option value="velkua">Velkua</option>\n<option value="vesanto">Vesanto</option>\n<option value="vesilahti">Vesilahti</option>\n<option value="veteli">Veteli</option>\n<option value="vierema">Vierem\xe4</option>\n<option value="vihanti">Vihanti</option>\n<option value="vihti">Vihti</option>\n<option value="viitasaari">Viitasaari</option>\n<option value="vilppula">Vilppula</option>\n<option value="vimpeli">Vimpeli</option>\n<option value="virolahti">Virolahti</option>\n<option value="virrat">Virrat</option>\n<option value="vardo">V\xe5rd\xf6</option>\n<option value="vahakyro">V\xe4h\xe4kyr\xf6</option>\n<option value="vastanfjard">V\xe4stanfj\xe4rd</option>\n<option value="voyri-maksamaa">V\xf6yri-Maksamaa</option>\n<option value="yliharma">Ylih\xe4rm\xe4</option>\n<option value="yli-ii">Yli-Ii</option>\n<option value="ylikiiminki">Ylikiiminki</option>\n<option value="ylistaro">Ylistaro</option>\n<option value="ylitornio">Ylitornio</option>\n<option value="ylivieska">Ylivieska</option>\n<option value="ylamaa">Yl\xe4maa</option>\n<option value="ylane">Yl\xe4ne</option>\n<option value="ylojarvi">Yl\xf6j\xe4rvi</option>\n<option value="ypaja">Yp\xe4j\xe4</option>\n<option value="aetsa">\xc4ets\xe4</option>\n<option value="ahtari">\xc4ht\xe4ri</option>\n<option value="aanekoski">\xc4\xe4nekoski</option>\n</select>' 
    736  
    737 # FISocialSecurityNumber 
    738 ############################################################## 
    739  
    740 >>> from django.contrib.localflavor.fi.forms import FISocialSecurityNumber 
    741 >>> f = FISocialSecurityNumber() 
    742 >>> f.clean('010101-0101') 
    743 u'010101-0101' 
    744 >>> f.clean('010101+0101') 
    745 u'010101+0101' 
    746 >>> f.clean('010101A0101') 
    747 u'010101A0101' 
    748 >>> f.clean('101010-0102') 
    749 Traceback (most recent call last): 
    750 ... 
    751 ValidationError: [u'Enter a valid Finnish social security number.'] 
    752 >>> f.clean('10a010-0101') 
    753 Traceback (most recent call last): 
    754 ... 
    755 ValidationError: [u'Enter a valid Finnish social security number.'] 
    756 >>> f.clean('101010-0\xe401') 
    757 Traceback (most recent call last): 
    758 ... 
    759 ValidationError: [u'Enter a valid Finnish social security number.'] 
    760 >>> f.clean('101010b0101') 
    761 Traceback (most recent call last): 
    762 ... 
    763 ValidationError: [u'Enter a valid Finnish social security number.'] 
    764 >>> f.clean('') 
    765 Traceback (most recent call last): 
    766 ... 
    767 ValidationError: [u'This field is required.'] 
    768  
    769 >>> f.clean(None) 
    770 Traceback (most recent call last): 
    771 ... 
    772 ValidationError: [u'This field is required.'] 
    773 >>> f = FISocialSecurityNumber(required=False) 
    774 >>> f.clean('010101-0101') 
    775 u'010101-0101' 
    776 >>> f.clean(None) 
    777 u'' 
    778 >>> f.clean('') 
    779 u'' 
    780  
    781 # BRZipCodeField ############################################################ 
    782 >>> from django.contrib.localflavor.br.forms import BRZipCodeField 
    783 >>> f = BRZipCodeField() 
    784 >>> f.clean('12345-123') 
    785 u'12345-123' 
    786 >>> f.clean('12345_123') 
    787 Traceback (most recent call last): 
    788 ... 
    789 ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] 
    790 >>> f.clean('1234-123') 
    791 Traceback (most recent call last): 
    792 ... 
    793 ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] 
    794 >>> f.clean('abcde-abc') 
    795 Traceback (most recent call last): 
    796 ... 
    797 ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] 
    798 >>> f.clean('12345-') 
    799 Traceback (most recent call last): 
    800 ... 
    801 Valid