Kaydet (Commit) be4acff3 authored tarafından Russell Keith-Magee's avatar Russell Keith-Magee

Reverted r16662 -- There are bunch of problems with this patch, including…

Reverted r16662 -- There are bunch of problems with this patch, including failing tests, that I didn't pick up before committing.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16669 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 7182cd22
"""
Slovenian specific form helpers.
"""
import datetime
import re
from django.forms.fields import CharField, Select, ChoiceField
from django.core.validators import EMPTY_VALUES
from django.forms import ValidationError
from django.utils.translation import ugettext_lazy as _
class SIEMSOField(CharField):
"""A form for validating Slovenian personal identification number.
Additionally stores gender, nationality and birthday to self.info dictionary.
"""
default_error_messages = {
'invalid': _(u'This field should contain exactly 13 digits.'),
'date': _(u'The first 7 digits of the EMSO must represent a valid past date.'),
'checksum': _(u'The EMSO is not valid.'),
}
emso_regex = re.compile('^(\d{2})(\d{2})(\d{3})(\d{2})(\d{3})(\d)$')
def clean(self, value):
super(SIEMSOField, self).clean(value)
if value in EMPTY_VALUES:
return u''
value = value.strip()
m = self.emso_regex.match(value)
if m is None:
raise ValidationError(self.default_error_messages['invalid'])
# Validate EMSO
s = 0
int_values = [int(i) for i in value]
for a, b in zip(int_values, range(7, 1, -1) * 2):
s += a * b
chk = s % 11
if chk == 0:
K = 0
else:
K = 11 - chk
if K == 10 or int_values[-1] != K:
raise ValidationError(self.default_error_messages['checksum'])
# Extract extra info in the identification number
day, month, year, nationality, gender, chksum = [int(i) for i in m.groups()]
if year < 890:
year += 2000
else:
year += 1000
# validate birthday
try:
birthday = datetime.date(year, month, day)
except ValueError:
raise ValidationError(self.error_messages['date'])
if datetime.date.today() < birthday:
raise ValidationError(self.error_messages['date'])
self.info = {
'gender': gender < 500 and 'male' or 'female',
'birthdate': birthday,
'nationality': nationality,
}
return value
class SITaxNumberField(CharField):
"""Slovenian tax number field.
Valid input is SIXXXXXXXX or XXXXXXXX where X is a number.
"""
default_error_messages = {
'invalid': _(u'Enter a valid tax number in form SIXXXXXXXX'),
}
sitax_regex = re.compile('^(?:SI)?([1-9]\d{7})$')
def clean(self, value):
super(SITaxNumberField, self).clean(value)
if value in EMPTY_VALUES:
return u''
value = value.strip()
m = self.sitax_regex.match(value)
if m is None:
raise ValidationError(self.default_error_messages['invalid'])
value = m.groups()[0]
# Validate Tax number
s = 0
int_values = [int(i) for i in value]
for a, b in zip(int_values, range(8, 1, -1)):
s += a * b
chk = 11 - (s % 11)
if chk == 10:
chk = 0
if int_values[-1] != chk:
raise ValidationError(self.default_error_messages['invalid'])
return value
class SIPostalCodeField(ChoiceField):
"""Slovenian post codes field.
"""
def __init__(self, *args, **kwargs):
from si_postalcodes import SI_POSTALCODES_CHOICES
kwargs.setdefault('choices', SI_POSTALCODES_CHOICES)
super(SIPostalCodeField, self).__init__(*args, **kwargs)
class SIPostalCodeSelect(Select):
"""A Select widget that uses Slovenian postal codes as its choices.
"""
def __init__(self, attrs=None):
from si_postalcodes import SI_POSTALCODES_CHOICES
super(SIPostalCodeSelect, self).__init__(attrs,
choices=SI_POSTALCODES_CHOICES)
class SIPhoneNumberField(CharField):
"""Slovenian phone number field.
Phone number must contain at least local area code.
Country code can be present.
Examples:
* +38640XXXXXX
* 0038640XXXXXX
* 040XXXXXX
* 01XXXXXX
* 0590XXXXX
"""
default_error_messages = {
'invalid': _(u'Enter phone number in form +386XXXXXXXX or 0XXXXXXXX.'),
}
phone_regex = re.compile('^(?:(?:00|\+)386|0)(\d{7,8})$')
def clean(self, value):
super(SIPhoneNumberField, self).clean(value)
if value in EMPTY_VALUES:
return u''
value = value.replace(' ', '').replace('-', '').replace('/', '')
m = self.phone_regex.match(value)
if m is None:
raise ValidationError(self.default_error_messages['invalid'])
......@@ -70,7 +70,6 @@ Countries currently supported by :mod:`~django.contrib.localflavor` are:
* Romania_
* Russia_
* Slovakia_
* Slovenia_
* `South Africa`_
* Spain_
* Sweden_
......@@ -127,7 +126,6 @@ Here's an example of how to use them::
.. _Romania: `Romania (ro)`_
.. _Russia: `Russia (ru)`_
.. _Slovakia: `Slovakia (sk)`_
.. _Slovenia: `Slovenia (si)`_
.. _South Africa: `South Africa (za)`_
.. _Spain: `Spain (es)`_
.. _Sweden: `Sweden (se)`_
......@@ -1070,35 +1068,6 @@ Slovakia (``sk``)
A ``Select`` widget that uses a list of Slovak regions as its choices.
Slovenia (``si``)
=================
.. class:: si.forms.SIEMSOField
A form field that validates input as Slovenian personal identification
number and stores gender and birthday to self.info dictionary.
.. class:: si.forms.SITaxNumberField
A form field that validates input as a Slovenian tax number. Valid input
is SIXXXXXXXX or XXXXXXXX.
.. class:: si.forms.SIPhoneNumberField
A form field that validates input as a Slovenian phone number. Phone
number must contain at least local area code with optional country code.
.. class:: si.forms.SIPostalCodeField
A form field that provides a choice field of major Slovenian postal
codes.
.. class:: si.forms.SIPostalCodeSelect
A ``Select`` widget that uses a list of major Slovenian postal codes as
its choices.
South Africa (``za``)
=====================
......
......@@ -235,11 +235,6 @@ filename. For example, the file ``css/styles.css`` would also be saved as
See the :class:`~django.contrib.staticfiles.storage.CachedStaticFilesStorage`
docs for more information.
Localflavor changes
~~~~~~~~~~~~~~~~~~~
* A Slovenian (si) localflavor was added.
Minor features
~~~~~~~~~~~~~~
......
......@@ -34,7 +34,6 @@ from localflavor.py import PYLocalFlavorTests
from localflavor.ro import ROLocalFlavorTests
from localflavor.ru import RULocalFlavorTests
from localflavor.se import SELocalFlavorTests
from localflavor.si import SILocalFlavorTests
from localflavor.sk import SKLocalFlavorTests
from localflavor.tr import TRLocalFlavorTests
from localflavor.us import USLocalFlavorTests
......
......@@ -48,7 +48,6 @@ from regressiontests.forms.localflavortests import (
ROLocalFlavorTests,
RULocalFlavorTests,
SELocalFlavorTests,
SILocalFlavorTests,
SKLocalFlavorTests,
TRLocalFlavorTests,
USLocalFlavorTests,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment