diff -r b758351d191f -r cc9b7e14412b web/lib/django/contrib/localflavor/pt/forms.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/django/contrib/localflavor/pt/forms.py Tue May 25 02:43:45 2010 +0200 @@ -0,0 +1,48 @@ +""" +PT-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{9}|(00|\+)\d*)$') + + +class PTZipCodeField(RegexField): + default_error_messages = { + 'invalid': _('Enter a zip code in the format XXXX-XXX.'), + } + + def __init__(self, *args, **kwargs): + super(PTZipCodeField, self).__init__(r'^(\d{4}-\d{3}|\d{7})$', + max_length=None, min_length=None, *args, **kwargs) + + def clean(self,value): + cleaned = super(PTZipCodeField, self).clean(value) + if len(cleaned) == 7: + return u'%s-%s' % (cleaned[:4],cleaned[4:]) + else: + return cleaned + +class PTPhoneNumberField(Field): + """ + Validate local Portuguese phone number (including international ones) + It should have 9 digits (may include spaces) or start by 00 or + (international) + """ + default_error_messages = { + 'invalid': _('Phone numbers must have 9 digits, or start by + or 00.'), + } + + def clean(self, value): + super(PTPhoneNumberField, self).clean(value) + if value in EMPTY_VALUES: + return u'' + value = re.sub('(\.|\s)', '', smart_unicode(value)) + m = phone_digits_re.search(value) + if m: + return u'%s' % value + raise ValidationError(self.error_messages['invalid'])