Django

Code

Changeset 4887

Show
Ignore:
Timestamp:
03/31/07 23:40:36 (2 years ago)
Author:
mtredinnick
Message:

Moved localflavor form tests into their own file.

Files:

Legend:

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

    r4876 r4887  
    11# -*- coding: utf-8 -*- 
    2 r""" 
     2from localflavor import localflavor_tests 
     3 
     4form_tests = r""" 
    35>>> from django.newforms import * 
    46>>> import datetime 
     
    32693271</select> 
    32703272 
    3271 # USZipCodeField ############################################################## 
    3272  
    3273 USZipCodeField validates that the data is either a five-digit U.S. zip code or 
    3274 a zip+4. 
    3275 >>> from django.contrib.localflavor.usa.forms import USZipCodeField 
    3276 >>> f = USZipCodeField() 
    3277 >>> f.clean('60606') 
    3278 u'60606' 
    3279 >>> f.clean(60606) 
    3280 u'60606' 
    3281 >>> f.clean('04000') 
    3282 u'04000' 
    3283 >>> f.clean('4000') 
    3284 Traceback (most recent call last): 
    3285 ... 
    3286 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    3287 >>> f.clean('60606-1234') 
    3288 u'60606-1234' 
    3289 >>> f.clean('6060-1234') 
    3290 Traceback (most recent call last): 
    3291 ... 
    3292 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    3293 >>> f.clean('60606-') 
    3294 Traceback (most recent call last): 
    3295 ... 
    3296 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    3297 >>> f.clean(None) 
    3298 Traceback (most recent call last): 
    3299 ... 
    3300 ValidationError: [u'This field is required.'] 
    3301 >>> f.clean('') 
    3302 Traceback (most recent call last): 
    3303 ... 
    3304 ValidationError: [u'This field is required.'] 
    3305  
    3306 >>> f = USZipCodeField(required=False) 
    3307 >>> f.clean('60606') 
    3308 u'60606' 
    3309 >>> f.clean(60606) 
    3310 u'60606' 
    3311 >>> f.clean('04000') 
    3312 u'04000' 
    3313 >>> f.clean('4000') 
    3314 Traceback (most recent call last): 
    3315 ... 
    3316 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    3317 >>> f.clean('60606-1234') 
    3318 u'60606-1234' 
    3319 >>> f.clean('6060-1234') 
    3320 Traceback (most recent call last): 
    3321 ... 
    3322 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    3323 >>> f.clean('60606-') 
    3324 Traceback (most recent call last): 
    3325 ... 
    3326 ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] 
    3327 >>> f.clean(None) 
    3328 u'' 
    3329 >>> f.clean('') 
    3330 u'' 
    3331  
    3332 # USPhoneNumberField ########################################################## 
    3333  
    3334 USPhoneNumberField validates that the data is a valid U.S. phone number, 
    3335 including the area code. It's normalized to XXX-XXX-XXXX format. 
    3336 >>> from django.contrib.localflavor.usa.forms import USPhoneNumberField 
    3337 >>> f = USPhoneNumberField() 
    3338 >>> f.clean('312-555-1212') 
    3339 u'312-555-1212' 
    3340 >>> f.clean('3125551212') 
    3341 u'312-555-1212' 
    3342 >>> f.clean('312 555-1212') 
    3343 u'312-555-1212' 
    3344 >>> f.clean('(312) 555-1212') 
    3345 u'312-555-1212' 
    3346 >>> f.clean('312 555 1212') 
    3347 u'312-555-1212' 
    3348 >>> f.clean('312.555.1212') 
    3349 u'312-555-1212' 
    3350 >>> f.clean('312.555-1212') 
    3351 u'312-555-1212' 
    3352 >>> f.clean(' (312) 555.1212 ') 
    3353 u'312-555-1212' 
    3354 >>> f.clean('555-1212') 
    3355 Traceback (most recent call last): 
    3356 ... 
    3357 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    3358 >>> f.clean('312-55-1212') 
    3359 Traceback (most recent call last): 
    3360 ... 
    3361 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    3362 >>> f.clean(None) 
    3363 Traceback (most recent call last): 
    3364 ... 
    3365 ValidationError: [u'This field is required.'] 
    3366 >>> f.clean('') 
    3367 Traceback (most recent call last): 
    3368 ... 
    3369 ValidationError: [u'This field is required.'] 
    3370  
    3371 >>> f = USPhoneNumberField(required=False) 
    3372 >>> f.clean('312-555-1212') 
    3373 u'312-555-1212' 
    3374 >>> f.clean('3125551212') 
    3375 u'312-555-1212' 
    3376 >>> f.clean('312 555-1212') 
    3377 u'312-555-1212' 
    3378 >>> f.clean('(312) 555-1212') 
    3379 u'312-555-1212' 
    3380 >>> f.clean('312 555 1212') 
    3381 u'312-555-1212' 
    3382 >>> f.clean('312.555.1212') 
    3383 u'312-555-1212' 
    3384 >>> f.clean('312.555-1212') 
    3385 u'312-555-1212' 
    3386 >>> f.clean(' (312) 555.1212 ') 
    3387 u'312-555-1212' 
    3388 >>> f.clean('555-1212') 
    3389 Traceback (most recent call last): 
    3390 ... 
    3391 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    3392 >>> f.clean('312-55-1212') 
    3393 Traceback (most recent call last): 
    3394 ... 
    3395 ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] 
    3396 >>> f.clean(None) 
    3397 u'' 
    3398 >>> f.clean('') 
    3399 u'' 
    3400  
    3401 # USStateField ################################################################ 
    3402  
    3403 USStateField validates that the data is either an abbreviation or name of a 
    3404 U.S. state. 
    3405 >>> from django.contrib.localflavor.usa.forms import USStateField 
    3406 >>> f = USStateField() 
    3407 >>> f.clean('il') 
    3408 u'IL' 
    3409 >>> f.clean('IL') 
    3410 u'IL' 
    3411 >>> f.clean('illinois') 
    3412 u'IL' 
    3413 >>> f.clean('  illinois ') 
    3414 u'IL' 
    3415 >>> f.clean(60606) 
    3416 Traceback (most recent call last): 
    3417 ... 
    3418 ValidationError: [u'Enter a U.S. state or territory.'] 
    3419 >>> f.clean(None) 
    3420 Traceback (most recent call last): 
    3421 ... 
    3422 ValidationError: [u'This field is required.'] 
    3423 >>> f.clean('') 
    3424 Traceback (most recent call last): 
    3425 ... 
    3426 ValidationError: [u'This field is required.'] 
    3427  
    3428 >>> f = USStateField(required=False) 
    3429 >>> f.clean('il') 
    3430 u'IL' 
    3431 >>> f.clean('IL') 
    3432 u'IL' 
    3433 >>> f.clean('illinois') 
    3434 u'IL' 
    3435 >>> f.clean('  illinois ') 
    3436 u'IL' 
    3437 >>> f.clean(60606) 
    3438 Traceback (most recent call last): 
    3439 ... 
    3440 ValidationError: [u'Enter a U.S. state or territory.'] 
    3441 >>> f.clean(None) 
    3442 u'' 
    3443 >>> f.clean('') 
    3444 u'' 
    3445  
    3446 # USStateSelect ############################################################### 
    3447  
    3448 USStateSelect is a Select widget that uses a list of U.S. states/territories 
    3449 as its choices. 
    3450 >>> from django.contrib.localflavor.usa.forms import USStateSelect 
    3451 >>> w = USStateSelect() 
    3452 >>> print w.render('state', 'IL') 
    3453 <select name="state"> 
    3454 <option value="AL">Alabama</option> 
    3455 <option value="AK">Alaska</option> 
    3456 <option value="AS">American Samoa</option> 
    3457 <option value="AZ">Arizona</option> 
    3458 <option value="AR">Arkansas</option> 
    3459 <option value="CA">California</option> 
    3460 <option value="CO">Colorado</option> 
    3461 <option value="CT">Connecticut</option> 
    3462 <option value="DE">Deleware</option> 
    3463 <option value="DC">District of Columbia</option> 
    3464 <option value="FM">Federated States of Micronesia</option> 
    3465 <option value="FL">Florida</option> 
    3466 <option value="GA">Georgia</option> 
    3467 <option value="GU">Guam</option> 
    3468 <option value="HI">Hawaii</option> 
    3469 <option value="ID">Idaho</option> 
    3470 <option value="IL" selected="selected">Illinois</option> 
    3471 <option value="IN">Indiana</option> 
    3472 <option value="IA">Iowa</option> 
    3473 <option value="KS">Kansas</option> 
    3474 <option value="KY">Kentucky</option> 
    3475 <option value="LA">Louisiana</option> 
    3476 <option value="ME">Maine</option> 
    3477 <option value="MH">Marshall Islands</option> 
    3478 <option value="MD">Maryland</option> 
    3479 <option value="MA">Massachusetts</option> 
    3480 <option value="MI">Michigan</option> 
    3481 <option value="MN">Minnesota</option> 
    3482 <option value="MS">Mississippi</option> 
    3483 <option value="MO">Missouri</option> 
    3484 <option value="MT">Montana</option> 
    3485 <option value="NE">Nebraska</option> 
    3486 <option value="NV">Nevada</option> 
    3487 <option value="NH">New Hampshire</option> 
    3488 <option value="NJ">New Jersey</option> 
    3489 <option value="NM">New Mexico</option> 
    3490 <option value="NY">New York</option> 
    3491 <option value="NC">North Carolina</option> 
    3492 <option value="ND">North Dakota</option> 
    3493 <option value="MP">Northern Mariana Islands</option> 
    3494 <option value="OH">Ohio</option> 
    3495 <option value="OK">Oklahoma</option> 
    3496 <option value="OR">Oregon</option> 
    3497 <option value="PW">Palau</option> 
    3498 <option value="PA">Pennsylvania</option> 
    3499 <option value="PR">Puerto Rico</option> 
    3500 <option value="RI">Rhode Island</option> 
    3501 <option value="SC">South Carolina</option> 
    3502 <option value="SD">South Dakota</option> 
    3503 <option value="TN">Tennessee</option> 
    3504 <option value="TX">Texas</option> 
    3505 <option value="UT">Utah</option> 
    3506 <option value="VT">Vermont</option> 
    3507 <option value="VI">Virgin Islands</option> 
    3508 <option value="VA">Virginia</option> 
    3509 <option value="WA">Washington</option> 
    3510 <option value="WV">West Virginia</option> 
    3511 <option value="WI">Wisconsin</option> 
    3512 <option value="WY">Wyoming</option> 
    3513 </select> 
    3514  
    3515 # UKPostcodeField ############################################################# 
    3516  
    3517 UKPostcodeField validates that the data is a valid UK postcode. 
    3518 >>> from django.contrib.localflavor.uk.forms import UKPostcodeField 
    3519 >>> f = UKPostcodeField() 
    3520 >>> f.clean('BT32 4PX') 
    3521 u'BT32 4PX' 
    3522 >>> f.clean('GIR 0AA') 
    3523 u'GIR 0AA' 
    3524 >>> f.clean('BT324PX') 
    3525 Traceback (most recent call last): 
    3526 ... 
    3527 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    3528 >>> f.clean('1NV 4L1D') 
    3529 Traceback (most recent call last): 
    3530 ... 
    3531 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    3532 >>> f.clean(None) 
    3533 Traceback (most recent call last): 
    3534 ... 
    3535 ValidationError: [u'This field is required.'] 
    3536 >>> f.clean('') 
    3537 Traceback (most recent call last): 
    3538 ... 
    3539 ValidationError: [u'This field is required.'] 
    3540  
    3541 >>> f = UKPostcodeField(required=False) 
    3542 >>> f.clean('BT32 4PX') 
    3543 u'BT32 4PX' 
    3544 >>> f.clean('GIR 0AA') 
    3545 u'GIR 0AA' 
    3546 >>> f.clean('1NV 4L1D') 
    3547 Traceback (most recent call last): 
    3548 ... 
    3549 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    3550 >>> f.clean('BT324PX') 
    3551 Traceback (most recent call last): 
    3552 ... 
    3553 ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] 
    3554 >>> f.clean(None) 
    3555 u'' 
    3556 >>> f.clean('') 
    3557 u'' 
    3558  
    3559 # FRZipCodeField ############################################################# 
    3560  
    3561 FRZipCodeField validates that the data is a valid FR zipcode. 
    3562 >>> from django.contrib.localflavor.fr.forms import FRZipCodeField 
    3563 >>> f = FRZipCodeField() 
    3564 >>> f.clean('75001') 
    3565 u'75001' 
    3566 >>> f.clean('93200') 
    3567 u'93200' 
    3568 >>> f.clean('2A200') 
    3569 Traceback (most recent call last): 
    3570 ... 
    3571 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3572 >>> f.clean('980001') 
    3573 Traceback (most recent call last): 
    3574 ... 
    3575 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3576 >>> f.clean(None) 
    3577 Traceback (most recent call last): 
    3578 ... 
    3579 ValidationError: [u'This field is required.'] 
    3580 >>> f.clean('') 
    3581 Traceback (most recent call last): 
    3582 ... 
    3583 ValidationError: [u'This field is required.'] 
    3584  
    3585 >>> f = FRZipCodeField(required=False) 
    3586 >>> f.clean('75001') 
    3587 u'75001' 
    3588 >>> f.clean('93200') 
    3589 u'93200' 
    3590 >>> f.clean('2A200') 
    3591 Traceback (most recent call last): 
    3592 ... 
    3593 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3594 >>> f.clean('980001') 
    3595 Traceback (most recent call last): 
    3596 ... 
    3597 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3598 >>> f.clean(None) 
    3599 u'' 
    3600 >>> f.clean('') 
    3601 u'' 
    3602  
    3603  
    3604 # FRPhoneNumberField ########################################################## 
    3605  
    3606 FRPhoneNumberField validates that the data is a valid french phone number. 
    3607 It's normalized to 0X XX XX XX XX format. Dots are valid too. 
    3608 >>> from django.contrib.localflavor.fr.forms import FRPhoneNumberField 
    3609 >>> f = FRPhoneNumberField() 
    3610 >>> f.clean('01 55 44 58 64') 
    3611 u'01 55 44 58 64' 
    3612 >>> f.clean('0155445864') 
    3613 u'01 55 44 58 64' 
    3614 >>> f.clean('01 5544 5864') 
    3615 u'01 55 44 58 64' 
    3616 >>> f.clean('01 55.44.58.64') 
    3617 u'01 55 44 58 64' 
    3618 >>> f.clean('01.55.44.58.64') 
    3619 u'01 55 44 58 64' 
    3620 >>> f.clean('01,55,44,58,64') 
    3621 Traceback (most recent call last): 
    3622 ... 
    3623 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    3624 >>> f.clean('555 015 544') 
    3625 Traceback (most recent call last): 
    3626 ... 
    3627 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    3628 >>> f.clean(None) 
    3629 Traceback (most recent call last): 
    3630 ... 
    3631 ValidationError: [u'This field is required.'] 
    3632 >>> f.clean('') 
    3633 Traceback (most recent call last): 
    3634 ... 
    3635 ValidationError: [u'This field is required.'] 
    3636  
    3637 >>> f = FRPhoneNumberField(required=False) 
    3638 >>> f.clean('01 55 44 58 64') 
    3639 u'01 55 44 58 64' 
    3640 >>> f.clean('0155445864') 
    3641 u'01 55 44 58 64' 
    3642 >>> f.clean('01 5544 5864') 
    3643 u'01 55 44 58 64' 
    3644 >>> f.clean('01 55.44.58.64') 
    3645 u'01 55 44 58 64' 
    3646 >>> f.clean('01.55.44.58.64') 
    3647 u'01 55 44 58 64' 
    3648 >>> f.clean('01,55,44,58,64') 
    3649 Traceback (most recent call last): 
    3650 ... 
    3651 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    3652 >>> f.clean('555 015 544') 
    3653 Traceback (most recent call last): 
    3654 ... 
    3655 ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] 
    3656 >>> f.clean(None) 
    3657 u'' 
    3658 >>> f.clean('') 
    3659 u'' 
    3660  
    3661 # FRDepartmentSelect ############################################################### 
    3662  
    3663 FRDepartmentSelect is a Select widget that uses a list of french departments  
    3664 including DOM TOM 
    3665 >>> from django.contrib.localflavor.fr.forms import FRDepartmentSelect 
    3666 >>> w = FRDepartmentSelect() 
    3667 >>> print w.render('dep', 'Paris') 
    3668 <select name="dep"> 
    3669 <option value="01">01 - Ain</option> 
    3670 <option value="02">02 - Aisne</option> 
    3671 <option value="03">03 - Allier</option> 
    3672 <option value="04">04 - Alpes-de-Haute-Provence</option> 
    3673 <option value="05">05 - Hautes-Alpes</option> 
    3674 <option value="06">06 - Alpes-Maritimes</option> 
    3675 <option value="07">07 - Ardeche</option> 
    3676 <option value="08">08 - Ardennes</option> 
    3677 <option value="09">09 - Ariege</option> 
    3678 <option value="10">10 - Aube</option> 
    3679 <option value="11">11 - Aude</option> 
    3680 <option value="12">12 - Aveyron</option> 
    3681 <option value="13">13 - Bouches-du-Rhone</option> 
    3682 <option value="14">14 - Calvados</option> 
    3683 <option value="15">15 - Cantal</option> 
    3684 <option value="16">16 - Charente</option> 
    3685 <option value="17">17 - Charente-Maritime</option> 
    3686 <option value="18">18 - Cher</option> 
    3687 <option value="19">19 - Correze</option> 
    3688 <option value="21">21 - Cote-d&#39;Or</option> 
    3689 <option value="22">22 - Cotes-d&#39;Armor</option> 
    3690 <option value="23">23 - Creuse</option> 
    3691 <option value="24">24 - Dordogne</option> 
    3692 <option value="25">25 - Doubs</option> 
    3693 <option value="26">26 - Drome</option> 
    3694 <option value="27">27 - Eure</option> 
    3695 <option value="28">28 - Eure-et-Loire</option> 
    3696 <option value="29">29 - Finistere</option> 
    3697 <option value="2A">2A - Corse-du-Sud</option> 
    3698 <option value="2B">2B - Haute-Corse</option> 
    3699 <option value="30">30 - Gard</option> 
    3700 <option value="31">31 - Haute-Garonne</option> 
    3701 <option value="32">32 - Gers</option> 
    3702 <option value="33">33 - Gironde</option> 
    3703 <option value="34">34 - Herault</option> 
    3704 <option value="35">35 - Ille-et-Vilaine</option> 
    3705 <option value="36">36 - Indre</option> 
    3706 <option value="37">37 - Indre-et-Loire</option> 
    3707 <option value="38">38 - Isere</option> 
    3708 <option value="39">39 - Jura</option> 
    3709 <option value="40">40 - Landes</option> 
    3710 <option value="41">41 - Loir-et-Cher</option> 
    3711 <option value="42">42 - Loire</option> 
    3712 <option value="43">43 - Haute-Loire</option> 
    3713 <option value="44">44 - Loire-Atlantique</option> 
    3714 <option value="45">45 - Loiret</option> 
    3715 <option value="46">46 - Lot</option> 
    3716 <option value="47">47 - Lot-et-Garonne</option> 
    3717 <option value="48">48 - Lozere</option> 
    3718 <option value="49">49 - Maine-et-Loire</option> 
    3719 <option value="50">50 - Manche</option> 
    3720 <option value="51">51 - Marne</option> 
    3721 <option value="52">52 - Haute-Marne</option> 
    3722 <option value="53">53 - Mayenne</option> 
    3723 <option value="54">54 - Meurthe-et-Moselle</option> 
    3724 <option value="55">55 - Meuse</option> 
    3725 <option value="56">56 - Morbihan</option> 
    3726 <option value="57">57 - Moselle</option> 
    3727 <option value="58">58 - Nievre</option> 
    3728 <option value="59">59 - Nord</option> 
    3729 <option value="60">60 - Oise</option> 
    3730 <option value="61">61 - Orne</option> 
    3731 <option value="62">62 - Pas-de-Calais</option> 
    3732 <option value="63">63 - Puy-de-Dome</option> 
    3733 <option value="64">64 - Pyrenees-Atlantiques</option> 
    3734 <option value="65">65 - Hautes-Pyrenees</option> 
    3735 <option value="66">66 - Pyrenees-Orientales</option> 
    3736 <option value="67">67 - Bas-Rhin</option> 
    3737 <option value="68">68 - Haut-Rhin</option> 
    3738 <option value="69">69 - Rhone</option> 
    3739 <option value="70">70 - Haute-Saone</option> 
    3740 <option value="71">71 - Saone-et-Loire</option> 
    3741 <option value="72">72 - Sarthe</option> 
    3742 <option value="73">73 - Savoie</option> 
    3743 <option value="74">74 - Haute-Savoie</option> 
    3744 <option value="75">75 - Paris</option> 
    3745 <option value="76">76 - Seine-Maritime</option> 
    3746 <option value="77">77 - Seine-et-Marne</option> 
    3747 <option value="78">78 - Yvelines</option> 
    3748 <option value="79">79 - Deux-Sevres</option> 
    3749 <option value="80">80 - Somme</option> 
    3750 <option value="81">81 - Tarn</option> 
    3751 <option value="82">82 - Tarn-et-Garonne</option> 
    3752 <option value="83">83 - Var</option> 
    3753 <option value="84">84 - Vaucluse</option> 
    3754 <option value="85">85 - Vendee</option> 
    3755 <option value="86">86 - Vienne</option> 
    3756 <option value="87">87 - Haute-Vienne</option> 
    3757 <option value="88">88 - Vosges</option> 
    3758 <option value="89">89 - Yonne</option> 
    3759 <option value="90">90 - Territoire de Belfort</option> 
    3760 <option value="91">91 - Essonne</option> 
    3761 <option value="92">92 - Hauts-de-Seine</option> 
    3762 <option value="93">93 - Seine-Saint-Denis</option> 
    3763 <option value="94">94 - Val-de-Marne</option> 
    3764 <option value="95">95 - Val-d&#39;Oise</option> 
    3765 <option value="2A">2A - Corse du sud</option> 
    3766 <option value="2B">2B - Haute Corse</option> 
    3767 <option value="971">971 - Guadeloupe</option> 
    3768 <option value="972">972 - Martinique</option> 
    3769 <option value="973">973 - Guyane</option> 
    3770 <option value="974">974 - La Reunion</option> 
    3771 <option value="975">975 - Saint-Pierre-et-Miquelon</option> 
    3772 <option value="976">976 - Mayotte</option> 
    3773 <option value="984">984 - Terres Australes et Antarctiques</option> 
    3774 <option value="986">986 - Wallis et Futuna</option> 
    3775 <option value="987">987 - Polynesie Francaise</option> 
    3776 <option value="988">988 - Nouvelle-Caledonie</option> 
    3777 </select> 
    3778  
    3779 # JPPostalCodeField ############################################################### 
    3780  
    3781 A form field that validates its input is a Japanese postcode. 
    3782  
    3783 Accepts 7 digits(with/out hyphen). 
    3784 >>> from django.contrib.localflavor.jp.forms import JPPostalCodeField 
    3785 >>> f = JPPostalCodeField() 
    3786 >>> f.clean('251-0032') 
    3787 u'2510032' 
    3788 >>> f.clean('2510032') 
    3789 u'2510032' 
    3790 >>> f.clean('2510-032') 
    3791 Traceback (most recent call last): 
    3792 ... 
    3793 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    3794 >>> f.clean('251a0032') 
    3795 Traceback (most recent call last): 
    3796 ... 
    3797 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    3798 >>> f.clean('a51-0032') 
    3799 Traceback (most recent call last): 
    3800 ... 
    3801 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    3802 >>> f.clean('25100321') 
    3803 Traceback (most recent call last): 
    3804 ... 
    3805 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    3806 >>> f.clean('') 
    3807 Traceback (most recent call last): 
    3808 ... 
    3809 ValidationError: [u'This field is required.'] 
    3810  
    3811 >>> f = JPPostalCodeField(required=False) 
    3812 >>> f.clean('251-0032') 
    3813 u'2510032' 
    3814 >>> f.clean('2510032') 
    3815 u'2510032' 
    3816 >>> f.clean('2510-032') 
    3817 Traceback (most recent call last): 
    3818 ... 
    3819 ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] 
    3820 >>> f.clean('') 
    3821 u'' 
    3822 >>> f.clean(None) 
    3823 u'' 
    3824  
    3825 # JPPrefectureSelect ############################################################### 
    3826  
    3827 A Select widget that uses a list of Japanese prefectures as its choices. 
    3828 >>> from django.contrib.localflavor.jp.forms import JPPrefectureSelect 
    3829 >>> w = JPPrefectureSelect() 
    3830 >>> print w.render('prefecture', 'kanagawa') 
    3831 <select name="prefecture"> 
    3832 <option value="hokkaido">Hokkaido</option> 
    3833 <option value="aomori">Aomori</option> 
    3834 <option value="iwate">Iwate</option> 
    3835 <option value="miyagi">Miyagi</option> 
    3836 <option value="akita">Akita</option> 
    3837 <option value="yamagata">Yamagata</option> 
    3838 <option value="fukushima">Fukushima</option> 
    3839 <option value="ibaraki">Ibaraki</option> 
    3840 <option value="tochigi">Tochigi</option> 
    3841 <option value="gunma">Gunma</option> 
    3842 <option value="saitama">Saitama</option> 
    3843 <option value="chiba">Chiba</option> 
    3844 <option value="tokyo">Tokyo</option> 
    3845 <option value="kanagawa" selected="selected">Kanagawa</option> 
    3846 <option value="yamanashi">Yamanashi</option> 
    3847 <option value="nagano">Nagano</option> 
    3848 <option value="niigata">Niigata</option> 
    3849 <option value="toyama">Toyama</option> 
    3850 <option value="ishikawa">Ishikawa</option> 
    3851 <option value="fukui">Fukui</option> 
    3852 <option value="gifu">Gifu</option> 
    3853 <option value="shizuoka">Shizuoka</option> 
    3854 <option value="aichi">Aichi</option> 
    3855 <option value="mie">Mie</option> 
    3856 <option value="shiga">Shiga</option> 
    3857 <option value="kyoto">Kyoto</option> 
    3858 <option value="osaka">Osaka</option> 
    3859 <option value="hyogo">Hyogo</option> 
    3860 <option value="nara">Nara</option> 
    3861 <option value="wakayama">Wakayama</option> 
    3862 <option value="tottori">Tottori</option> 
    3863 <option value="shimane">Shimane</option> 
    3864 <option value="okayama">Okayama</option> 
    3865 <option value="hiroshima">Hiroshima</option> 
    3866 <option value="yamaguchi">Yamaguchi</option> 
    3867 <option value="tokushima">Tokushima</option> 
    3868 <option value="kagawa">Kagawa</option> 
    3869 <option value="ehime">Ehime</option> 
    3870 <option value="kochi">Kochi</option> 
    3871 <option value="fukuoka">Fukuoka</option> 
    3872 <option value="saga">Saga</option> 
    3873 <option value="nagasaki">Nagasaki</option> 
    3874 <option value="kumamoto">Kumamoto</option> 
    3875 <option value="oita">Oita</option> 
    3876 <option value="miyazaki">Miyazaki</option> 
    3877 <option value="kagoshima">Kagoshima</option> 
    3878 <option value="okinawa">Okinawa</option> 
    3879 </select> 
    3880  
    3881 # ITZipCodeField ############################################################# 
    3882  
    3883 >>> from django.contrib.localflavor.it.forms import ITZipCodeField 
    3884 >>> f = ITZipCodeField() 
    3885 >>> f.clean('00100') 
    3886 u'00100' 
    3887 >>> f.clean(' 00100') 
    3888 Traceback (most recent call last): 
    3889 ... 
    3890 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3891  
    3892 # ITRegionSelect ############################################################# 
    3893  
    3894 >>> from django.contrib.localflavor.it.forms import ITRegionSelect 
    3895 >>> w = ITRegionSelect() 
    3896 >>> w.render('regions', 'PMN') 
    3897 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>' 
    3898  
    3899 # FIZipCodeField ############################################################# 
    3900  
    3901 FIZipCodeField validates that the data is a valid FI zipcode. 
    3902 >>> from django.contrib.localflavor.fi.forms import FIZipCodeField 
    3903 >>> f = FIZipCodeField() 
    3904 >>> f.clean('20540') 
    3905 u'20540' 
    3906 >>> f.clean('20101') 
    3907 u'20101' 
    3908 >>> f.clean('20s40') 
    3909 Traceback (most recent call last): 
    3910 ... 
    3911 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3912 >>> f.clean('205401') 
    3913 Traceback (most recent call last): 
    3914 ... 
    3915 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3916 >>> f.clean(None) 
    3917 Traceback (most recent call last): 
    3918 ... 
    3919 ValidationError: [u'This field is required.'] 
    3920 >>> f.clean('') 
    3921 Traceback (most recent call last): 
    3922 ... 
    3923 ValidationError: [u'This field is required.'] 
    3924  
    3925 >>> f = FIZipCodeField(required=False) 
    3926 >>> f.clean('20540') 
    3927 u'20540' 
    3928 >>> f.clean('20101') 
    3929 u'20101' 
    3930 >>> f.clean('20s40') 
    3931 Traceback (most recent call last): 
    3932 ... 
    3933 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3934 >>> f.clean('205401') 
    3935 Traceback (most recent call last): 
    3936 ... 
    3937 ValidationError: [u'Enter a zip code in the format XXXXX.'] 
    3938 >>> f.clean(None) 
    3939 u'' 
    3940 >>> f.clean('') 
    3941 u'' 
    3942  
    3943 # FIMunicipalitySelect ###############################################################  
    3944  
    3945 A Select widget that uses a list of Finnish municipalities as its choices.  
    3946 >>> from django.contrib.localflavor.fi.forms import FIMunicipalitySelect  
    3947 >>> w = FIMunicipalitySelect()  
    3948 >>> unicode(w.render('municipalities', 'turku')) 
    3949 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>' 
    3950  
    3951 # FISocialSecurityNumber 
    3952 ############################################################## 
    3953  
    3954 >>> from django.contrib.localflavor.fi.forms import FISocialSecurityNumber 
    3955 >>> f = FISocialSecurityNumber() 
    3956 >>> f.clean('010101-0101') 
    3957 u'010101-0101' 
    3958 >>> f.clean('010101+0101') 
    3959 u'010101+0101' 
    3960 >>> f.clean('010101A0101') 
    3961 u'010101A0101' 
    3962 >>> f.clean('101010-0102') 
    3963 Traceback (most recent call last): 
    3964 ... 
    3965 ValidationError: [u'Enter a valid Finnish social security number.'] 
    3966 >>> f.clean('10a010-0101') 
    3967 Traceback (most recent call last): 
    3968 ... 
    3969 ValidationError: [u'Enter a valid Finnish social security number.'] 
    3970 >>> f.clean('101010-0\xe401') 
    3971 Traceback (most recent call last): 
    3972 ... 
    3973 ValidationError: [u'Enter a valid Finnish social security number.'] 
    3974 >>> f.clean('101010b0101') 
    3975 Traceback (most recent call last): 
    3976 ... 
    3977 ValidationError: [u'Enter a valid Finnish social security number.'] 
    3978 >>> f.clean('') 
    3979 Traceback (most recent call last): 
    3980 ... 
    3981 ValidationError: [u'This field is required.'] 
    3982  
    3983 >>> f.clean(None) 
    3984 Traceback (most recent call last): 
    3985 ... 
    3986 ValidationError: [u'This field is required.'] 
    3987 >>> f = FISocialSecurityNumber(required=False) 
    3988 >>> f.clean('010101-0101') 
    3989 u'010101-0101' 
    3990 >>> f.clean(None) 
    3991 u'' 
    3992 >>> f.clean('') 
    3993 u'' 
    3994  
    3995 # BRZipCodeField ############################################################ 
    3996 >>> from django.contrib.localflavor.br.forms import BRZipCodeField 
    3997 >>> f = BRZipCodeField() 
    3998 >>> f.clean('12345-123') 
    3999 u'12345-123' 
    4000 >>> f.clean('12345_123') 
    4001 Traceback (most recent call last): 
    4002 ... 
    4003 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4004 >>> f.clean('1234-123') 
    4005 Traceback (most recent call last): 
    4006 ... 
    4007 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4008 >>> f.clean('abcde-abc') 
    4009 Traceback (most recent call last): 
    4010 ... 
    4011 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4012 >>> f.clean('12345-') 
    4013 Traceback (most recent call last): 
    4014 ... 
    4015 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4016 >>> f.clean('-123') 
    4017 Traceback (most recent call last): 
    4018 ... 
    4019 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4020 >>> f.clean('') 
    4021 Traceback (most recent call last): 
    4022 ... 
    4023 ValidationError: [u'This field is required.'] 
    4024 >>> f.clean(None) 
    4025 Traceback (most recent call last): 
    4026 ... 
    4027 ValidationError: [u'This field is required.'] 
    4028  
    4029 >>> f = BRZipCodeField(required=False) 
    4030 >>> f.clean(None) 
    4031 u'' 
    4032 >>> f.clean('') 
    4033 u'' 
    4034 >>> f.clean('-123') 
    4035 Traceback (most recent call last): 
    4036 ... 
    4037 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4038 >>> f.clean('12345-') 
    4039 Traceback (most recent call last): 
    4040 ... 
    4041 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4042 >>> f.clean('abcde-abc') 
    4043 Traceback (most recent call last): 
    4044 ... 
    4045 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4046 >>> f.clean('1234-123') 
    4047 Traceback (most recent call last): 
    4048 ... 
    4049 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4050 >>> f.clean('12345_123') 
    4051 Traceback (most recent call last): 
    4052 ... 
    4053 ValidationError: [u'Informe um c\xf3digo postal no formato XXXXX-XXX.'] 
    4054 >>> f.clean('12345-123') 
    4055 u'12345-123' 
    4056  
    4057 # BRPhoneNumberField ######################################################### 
    4058  
    4059 >>> from django.contrib.localflavor.br.forms import BRPhoneNumberField 
    4060 >>> f = BRPhoneNumberField() 
    4061 >>> f.clean('41-3562-3464') 
    4062 u'41-3562-3464' 
    4063 >>> f.clean('4135623464') 
    4064 u'41-3562-3464' 
    4065 >>> f.clean('41 3562-3464') 
    4066 u'41-3562-3464' 
    4067 >>> f.clean('41 3562 3464') 
    4068 u'41-3562-3464' 
    4069 >>> f.clean('(41) 3562 3464') 
    4070 u'41-3562-3464' 
    4071 >>> f.clean('41.3562.3464') 
    4072 u'41-3562-3464' 
    4073 >>> f.clean('41.3562-3464') 
    4074 u'41-3562-3464' 
    4075 >>> f.clean(' (41) 3562.3464') 
    4076 u'41-3562-3464' 
    4077 >>> f.clean(None) 
    4078 Traceback (most recent call last): 
    4079 ... 
    4080 ValidationError: [u'This field is required.'] 
    4081 >>> f.clean('') 
    4082 Traceback (most recent call last): 
    4083 ... 
    4084 ValidationError: [u'This field is required.'] 
    4085  
    4086 >>> f = BRPhoneNumberField(required=False) 
    4087 >>> f.clean('') 
    4088 u'' 
    4089 >>> f.clean(None) 
    4090 u'' 
    4091 >>> f.clean(' (41) 3562.3464') 
    4092 u'41-3562-3464' 
    4093 >>> f.clean('41.3562-3464') 
    4094 u'41-3562-3464' 
    4095 >>> f.clean('(41) 3562 3464') 
    4096 u'41-3562-3464' 
    4097 >>> f.clean('4135623464') 
    4098 u'41-3562-3464' 
    4099 >>> f.clean('41 3562-3464') 
    4100 u'41-3562-3464' 
    4101  
    4102 # BRStateSelect ############################################################## 
    4103  
    4104 >>> from django.contrib.localflavor.br.forms import BRStateSelect 
    4105 >>> w = BRStateSelect() 
    4106 >>> w.render('states', 'PR') 
    4107 u'<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>' 
    4108  
    41093273################################# 
    41103274# Tests of underlying functions # 
     
    41313295""" 
    4132