--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/localflavor/au/forms.py Fri Jul 18 18:22:23 2008 +0000
@@ -0,0 +1,49 @@
+"""
+Australian-specific Form helpers
+"""
+
+from django.newforms import ValidationError
+from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.newforms.util import smart_unicode
+from django.utils.translation import ugettext
+import re
+
+PHONE_DIGITS_RE = re.compile(r'^(\d{10})$')
+
+class AUPostCodeField(RegexField):
+ """Australian post code field."""
+ default_error_messages = {
+ 'invalid': ugettext('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)