/django/contrib/localflavor/au/forms.py
Python | 50 lines | 36 code | 6 blank | 8 comment | 1 complexity | e902bf5e49af557b33eb4c74ac404110 MD5 | raw file
Possible License(s): BSD-3-Clause
- """
- Australian-specific Form helpers
- """
- from django.core.validators import EMPTY_VALUES
- from django.forms import ValidationError
- from django.forms.fields import Field, RegexField, Select
- from django.utils.encoding import smart_unicode
- from django.utils.translation import ugettext_lazy as _
- import re
- PHONE_DIGITS_RE = re.compile(r'^(\d{10})$')
- class AUPostCodeField(RegexField):
- """Australian post code field."""
- default_error_messages = {
- 'invalid': _('Enter a 4 digit post code.'),
- }
- def __init__(self, *args, **kwargs):
- super(AUPostCodeField, self).__init__(r'^\d{4}$',
- max_length=None, min_length=None, *args, **kwargs)
- class AUPhoneNumberField(Field):
- """Australian phone number field."""
- default_error_messages = {
- 'invalid': u'Phone numbers must contain 10 digits.',
- }
- def clean(self, value):
- """
- Validate a phone number. Strips parentheses, whitespace and hyphens.
- """
- super(AUPhoneNumberField, self).clean(value)
- if value in EMPTY_VALUES:
- return u''
- value = re.sub('(\(|\)|\s+|-)', '', smart_unicode(value))
- phone_match = PHONE_DIGITS_RE.search(value)
- if phone_match:
- return u'%s' % phone_match.group(1)
- raise ValidationError(self.error_messages['invalid'])
- class AUStateSelect(Select):
- """
- A Select widget that uses a list of Australian states/territories as its
- choices.
- """
- def __init__(self, attrs=None):
- from au_states import STATE_CHOICES
- super(AUStateSelect, self).__init__(attrs, choices=STATE_CHOICES)