Fixed #4143 -- Added Icelandic localflavor. Note that we use the is_/ directory
name because "is" is a reserved word in Python. Patch from django@einaregilsson.com. git-svn-id: http://code.djangoproject.com/svn/django/trunk@5080 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
37e4842661
commit
a738f3a4ff
|
@ -0,0 +1,81 @@
|
||||||
|
"""
|
||||||
|
Iceland specific form helpers.
|
||||||
|
"""
|
||||||
|
from django.newforms import ValidationError
|
||||||
|
from django.newforms.fields import RegexField, EMPTY_VALUES
|
||||||
|
from django.newforms.widgets import Select
|
||||||
|
from django.utils.translation import gettext
|
||||||
|
|
||||||
|
|
||||||
|
class ISIdNumberField(RegexField):
|
||||||
|
"""
|
||||||
|
Icelandic identification number (kennitala). This is a number every citizen
|
||||||
|
of Iceland has.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
error_msg = gettext(u'Enter a valid Icelandic identification number. The format is XXXXXX-XXXX.')
|
||||||
|
kwargs['min_length'],kwargs['max_length'] = 10,11
|
||||||
|
|
||||||
|
super(ISIdNumberField, self).__init__(r'^\d{6}(-| )?\d{4}$', error_message=error_msg, *args, **kwargs)
|
||||||
|
|
||||||
|
def clean(self, value):
|
||||||
|
value = super(ISIdNumberField, self).clean(value)
|
||||||
|
|
||||||
|
if value in EMPTY_VALUES:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
value = self._canonify(value)
|
||||||
|
if self._validate(value):
|
||||||
|
return self._format(value)
|
||||||
|
else:
|
||||||
|
raise ValidationError(gettext(u'The Icelandic identification number is not valid.'))
|
||||||
|
|
||||||
|
|
||||||
|
def _canonify(self, value):
|
||||||
|
"""
|
||||||
|
Returns the value as only digits.
|
||||||
|
"""
|
||||||
|
return value.replace('-', '').replace(' ', '')
|
||||||
|
|
||||||
|
def _validate(self, value):
|
||||||
|
"""
|
||||||
|
Takes in the value in canonical form and checks the verifier digit. The
|
||||||
|
method is modulo 11.
|
||||||
|
"""
|
||||||
|
check = [3, 2, 7, 6, 5, 4, 3, 2, 1, 0]
|
||||||
|
return sum(int(value[i]) * check[i] for i in range(10)) % 11 == 0
|
||||||
|
|
||||||
|
def _format(self, value):
|
||||||
|
"""
|
||||||
|
Takes in the value in canonical form and returns it in the common
|
||||||
|
display format.
|
||||||
|
"""
|
||||||
|
return value[:6]+'-'+value[6:]
|
||||||
|
|
||||||
|
|
||||||
|
class ISPhoneNumberField(RegexField):
|
||||||
|
"""
|
||||||
|
Icelandic phone number. Seven digits with an optional hyphen or space after
|
||||||
|
the first three digits.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['min_length'], kwargs['max_length'] = 7,8
|
||||||
|
super(ISPhoneNumberField, self).__init__(r'^\d{3}(-| )?\d{4}$', *args, **kwargs)
|
||||||
|
|
||||||
|
def clean(self, value):
|
||||||
|
value = super(ISPhoneNumberField, self).clean(value)
|
||||||
|
|
||||||
|
if value in EMPTY_VALUES:
|
||||||
|
return u''
|
||||||
|
|
||||||
|
return value.replace('-', '').replace(' ', '')
|
||||||
|
|
||||||
|
|
||||||
|
class ISPostalCodeSelect(Select):
|
||||||
|
"""
|
||||||
|
A Select widget that uses a list of Icelandic postal codes as its choices.
|
||||||
|
"""
|
||||||
|
def __init__(self, attrs=None):
|
||||||
|
from is_postalcodes import IS_POSTALCODES
|
||||||
|
super(ISPostalCodeSelect, self).__init__(attrs, choices=IS_POSTALCODES)
|
||||||
|
|
|
@ -0,0 +1,151 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
IS_POSTALCODES = (
|
||||||
|
('101', u'101 Reykjavík'),
|
||||||
|
('103', u'103 Reykjavík'),
|
||||||
|
('104', u'104 Reykjavík'),
|
||||||
|
('105', u'105 Reykjavík'),
|
||||||
|
('107', u'107 Reykjavík'),
|
||||||
|
('108', u'108 Reykjavík'),
|
||||||
|
('109', u'109 Reykjavík'),
|
||||||
|
('110', u'110 Reykjavík'),
|
||||||
|
('111', u'111 Reykjavík'),
|
||||||
|
('112', u'112 Reykjavík'),
|
||||||
|
('113', u'113 Reykjavík'),
|
||||||
|
('116', u'116 Kjalarnes'),
|
||||||
|
('121', u'121 Reykjavík'),
|
||||||
|
('123', u'123 Reykjavík'),
|
||||||
|
('124', u'124 Reykjavík'),
|
||||||
|
('125', u'125 Reykjavík'),
|
||||||
|
('127', u'127 Reykjavík'),
|
||||||
|
('128', u'128 Reykjavík'),
|
||||||
|
('129', u'129 Reykjavík'),
|
||||||
|
('130', u'130 Reykjavík'),
|
||||||
|
('132', u'132 Reykjavík'),
|
||||||
|
('150', u'150 Reykjavík'),
|
||||||
|
('155', u'155 Reykjavík'),
|
||||||
|
('170', u'170 Seltjarnarnes'),
|
||||||
|
('172', u'172 Seltjarnarnes'),
|
||||||
|
('190', u'190 Vogar'),
|
||||||
|
('200', u'200 Kópavogur'),
|
||||||
|
('201', u'201 Kópavogur'),
|
||||||
|
('202', u'202 Kópavogur'),
|
||||||
|
('203', u'203 Kópavogur'),
|
||||||
|
('210', u'210 Garðabær'),
|
||||||
|
('212', u'212 Garðabær'),
|
||||||
|
('220', u'220 Hafnarfjörður'),
|
||||||
|
('221', u'221 Hafnarfjörður'),
|
||||||
|
('222', u'222 Hafnarfjörður'),
|
||||||
|
('225', u'225 Álftanes'),
|
||||||
|
('230', u'230 Reykjanesbær'),
|
||||||
|
('232', u'232 Reykjanesbær'),
|
||||||
|
('233', u'233 Reykjanesbær'),
|
||||||
|
('235', u'235 Keflavíkurflugvöllur'),
|
||||||
|
('240', u'240 Grindavík'),
|
||||||
|
('245', u'245 Sandgerði'),
|
||||||
|
('250', u'250 Garður'),
|
||||||
|
('260', u'260 Reykjanesbær'),
|
||||||
|
('270', u'270 Mosfellsbær'),
|
||||||
|
('300', u'300 Akranes'),
|
||||||
|
('301', u'301 Akranes'),
|
||||||
|
('302', u'302 Akranes'),
|
||||||
|
('310', u'310 Borgarnes'),
|
||||||
|
('311', u'311 Borgarnes'),
|
||||||
|
('320', u'320 Reykholt í Borgarfirði'),
|
||||||
|
('340', u'340 Stykkishólmur'),
|
||||||
|
('345', u'345 Flatey á Breiðafirði'),
|
||||||
|
('350', u'350 Grundarfjörður'),
|
||||||
|
('355', u'355 Ólafsvík'),
|
||||||
|
('356', u'356 Snæfellsbær'),
|
||||||
|
('360', u'360 Hellissandur'),
|
||||||
|
('370', u'370 Búðardalur'),
|
||||||
|
('371', u'371 Búðardalur'),
|
||||||
|
('380', u'380 Reykhólahreppur'),
|
||||||
|
('400', u'400 Ísafjörður'),
|
||||||
|
('401', u'401 Ísafjörður'),
|
||||||
|
('410', u'410 Hnífsdalur'),
|
||||||
|
('415', u'415 Bolungarvík'),
|
||||||
|
('420', u'420 Súðavík'),
|
||||||
|
('425', u'425 Flateyri'),
|
||||||
|
('430', u'430 Suðureyri'),
|
||||||
|
('450', u'450 Patreksfjörður'),
|
||||||
|
('451', u'451 Patreksfjörður'),
|
||||||
|
('460', u'460 Tálknafjörður'),
|
||||||
|
('465', u'465 Bíldudalur'),
|
||||||
|
('470', u'470 Þingeyri'),
|
||||||
|
('471', u'471 Þingeyri'),
|
||||||
|
('500', u'500 Staður'),
|
||||||
|
('510', u'510 Hólmavík'),
|
||||||
|
('512', u'512 Hólmavík'),
|
||||||
|
('520', u'520 Drangsnes'),
|
||||||
|
('522', u'522 Kjörvogur'),
|
||||||
|
('523', u'523 Bær'),
|
||||||
|
('524', u'524 Norðurfjörður'),
|
||||||
|
('530', u'530 Hvammstangi'),
|
||||||
|
('531', u'531 Hvammstangi'),
|
||||||
|
('540', u'540 Blönduós'),
|
||||||
|
('541', u'541 Blönduós'),
|
||||||
|
('545', u'545 Skagaströnd'),
|
||||||
|
('550', u'550 Sauðárkrókur'),
|
||||||
|
('551', u'551 Sauðárkrókur'),
|
||||||
|
('560', u'560 Varmahlíð'),
|
||||||
|
('565', u'565 Hofsós'),
|
||||||
|
('566', u'566 Hofsós'),
|
||||||
|
('570', u'570 Fljót'),
|
||||||
|
('580', u'580 Siglufjörður'),
|
||||||
|
('600', u'600 Akureyri'),
|
||||||
|
('601', u'601 Akureyri'),
|
||||||
|
('602', u'602 Akureyri'),
|
||||||
|
('603', u'603 Akureyri'),
|
||||||
|
('610', u'610 Grenivík'),
|
||||||
|
('611', u'611 Grímsey'),
|
||||||
|
('620', u'620 Dalvík'),
|
||||||
|
('621', u'621 Dalvík'),
|
||||||
|
('625', u'625 Ólafsfjörður'),
|
||||||
|
('630', u'630 Hrísey'),
|
||||||
|
('640', u'640 Húsavík'),
|
||||||
|
('641', u'641 Húsavík'),
|
||||||
|
('645', u'645 Fosshóll'),
|
||||||
|
('650', u'650 Laugar'),
|
||||||
|
('660', u'660 Mývatn'),
|
||||||
|
('670', u'670 Kópasker'),
|
||||||
|
('671', u'671 Kópasker'),
|
||||||
|
('675', u'675 Raufarhöfn'),
|
||||||
|
('680', u'680 Þórshöfn'),
|
||||||
|
('681', u'681 Þórshöfn'),
|
||||||
|
('685', u'685 Bakkafjörður'),
|
||||||
|
('690', u'690 Vopnafjörður'),
|
||||||
|
('700', u'700 Egilsstaðir'),
|
||||||
|
('701', u'701 Egilsstaðir'),
|
||||||
|
('710', u'710 Seyðisfjörður'),
|
||||||
|
('715', u'715 Mjóifjörður'),
|
||||||
|
('720', u'720 Borgarfjörður eystri'),
|
||||||
|
('730', u'730 Reyðarfjörður'),
|
||||||
|
('735', u'735 Eskifjörður'),
|
||||||
|
('740', u'740 Neskaupstaður'),
|
||||||
|
('750', u'750 Fáskrúðsfjörður'),
|
||||||
|
('755', u'755 Stöðvarfjörður'),
|
||||||
|
('760', u'760 Breiðdalsvík'),
|
||||||
|
('765', u'765 Djúpivogur'),
|
||||||
|
('780', u'780 Höfn í Hornafirði'),
|
||||||
|
('781', u'781 Höfn í Hornafirði'),
|
||||||
|
('785', u'785 Öræfi'),
|
||||||
|
('800', u'800 Selfoss'),
|
||||||
|
('801', u'801 Selfoss'),
|
||||||
|
('802', u'802 Selfoss'),
|
||||||
|
('810', u'810 Hveragerði'),
|
||||||
|
('815', u'815 Þorlákshöfn'),
|
||||||
|
('820', u'820 Eyrarbakki'),
|
||||||
|
('825', u'825 Stokkseyri'),
|
||||||
|
('840', u'840 Laugarvatn'),
|
||||||
|
('845', u'845 Flúðir'),
|
||||||
|
('850', u'850 Hella'),
|
||||||
|
('851', u'851 Hella'),
|
||||||
|
('860', u'860 Hvolsvöllur'),
|
||||||
|
('861', u'861 Hvolsvöllur'),
|
||||||
|
('870', u'870 Vík'),
|
||||||
|
('871', u'871 Vík'),
|
||||||
|
('880', u'880 Kirkjubæjarklaustur'),
|
||||||
|
('900', u'900 Vestmannaeyjar'),
|
||||||
|
('902', u'902 Vestmannaeyjar')
|
||||||
|
)
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue