Implented newforms USStateField in django.contrib.localflavor.usa. Refs #2455
git-svn-id: http://code.djangoproject.com/svn/django/trunk@4525 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
27b28616b4
commit
1ce1442d95
|
@ -2,7 +2,8 @@
|
||||||
USA-specific Form helpers
|
USA-specific Form helpers
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.newforms.fields import RegexField
|
from django.newforms import ValidationError
|
||||||
|
from django.newforms.fields import Field, RegexField, EMPTY_VALUES
|
||||||
from django.utils.translation import gettext
|
from django.utils.translation import gettext
|
||||||
|
|
||||||
class USZipCodeField(RegexField):
|
class USZipCodeField(RegexField):
|
||||||
|
@ -11,3 +12,25 @@ class USZipCodeField(RegexField):
|
||||||
max_length=None, min_length=None,
|
max_length=None, min_length=None,
|
||||||
error_message=gettext(u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'),
|
error_message=gettext(u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'),
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
|
|
||||||
|
class USStateField(Field):
|
||||||
|
"""
|
||||||
|
A form field that validates its input is a U.S. state name or abbreviation.
|
||||||
|
It normalizes the input to the standard two-leter postal service
|
||||||
|
abbreviation for the given state.
|
||||||
|
"""
|
||||||
|
def clean(self, value):
|
||||||
|
from us_states import STATES_NORMALIZED # relative import
|
||||||
|
super(USStateField, self).clean(value)
|
||||||
|
if value in EMPTY_VALUES:
|
||||||
|
return u''
|
||||||
|
try:
|
||||||
|
value = value.strip().lower()
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
return STATES_NORMALIZED[value.strip().lower()].decode('ascii')
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
raise ValidationError(u'Enter a U.S. state or territory.')
|
||||||
|
|
|
@ -0,0 +1,176 @@
|
||||||
|
"""
|
||||||
|
A mapping of state misspellings/abbreviations to normalized abbreviations.
|
||||||
|
|
||||||
|
This exists in this standalone file so that it's only imported into memory
|
||||||
|
when explicitly needed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
STATES_NORMALIZED = {
|
||||||
|
'ak': 'AK',
|
||||||
|
'al': 'AL',
|
||||||
|
'ala': 'AL',
|
||||||
|
'alabama': 'AL',
|
||||||
|
'alaska': 'AK',
|
||||||
|
'american samao': 'AS',
|
||||||
|
'american samoa': 'AS',
|
||||||
|
'ar': 'AR',
|
||||||
|
'ariz': 'AZ',
|
||||||
|
'arizona': 'AZ',
|
||||||
|
'ark': 'AR',
|
||||||
|
'arkansas': 'AR',
|
||||||
|
'as': 'AS',
|
||||||
|
'az': 'AZ',
|
||||||
|
'ca': 'CA',
|
||||||
|
'calf': 'CA',
|
||||||
|
'calif': 'CA',
|
||||||
|
'california': 'CA',
|
||||||
|
'co': 'CO',
|
||||||
|
'colo': 'CO',
|
||||||
|
'colorado': 'CO',
|
||||||
|
'conn': 'CT',
|
||||||
|
'connecticut': 'CT',
|
||||||
|
'ct': 'CT',
|
||||||
|
'dc': 'DC',
|
||||||
|
'de': 'DE',
|
||||||
|
'del': 'DE',
|
||||||
|
'delaware': 'DE',
|
||||||
|
'district of columbia': 'DC',
|
||||||
|
'federated states of micronesia': 'FM',
|
||||||
|
'fl': 'FL',
|
||||||
|
'fla': 'FL',
|
||||||
|
'florida': 'FL',
|
||||||
|
'fm': 'FM',
|
||||||
|
'ga': 'GA',
|
||||||
|
'georgia': 'GA',
|
||||||
|
'gu': 'GU',
|
||||||
|
'guam': 'GU',
|
||||||
|
'hawaii': 'HI',
|
||||||
|
'hi': 'HI',
|
||||||
|
'ia': 'IA',
|
||||||
|
'id': 'ID',
|
||||||
|
'idaho': 'ID',
|
||||||
|
'il': 'IL',
|
||||||
|
'ill': 'IL',
|
||||||
|
'illinois': 'IL',
|
||||||
|
'in': 'IN',
|
||||||
|
'ind': 'IN',
|
||||||
|
'indiana': 'IN',
|
||||||
|
'iowa': 'IA',
|
||||||
|
'kan': 'KS',
|
||||||
|
'kans': 'KS',
|
||||||
|
'kansas': 'KS',
|
||||||
|
'kentucky': 'KY',
|
||||||
|
'ks': 'KS',
|
||||||
|
'ky': 'KY',
|
||||||
|
'la': 'LA',
|
||||||
|
'louisiana': 'LA',
|
||||||
|
'ma': 'MA',
|
||||||
|
'maine': 'ME',
|
||||||
|
'marianas islands': 'MP',
|
||||||
|
'marianas islands of the pacific': 'MP',
|
||||||
|
'marinas islands of the pacific': 'MP',
|
||||||
|
'maryland': 'MD',
|
||||||
|
'mass': 'MA',
|
||||||
|
'massachusetts': 'MA',
|
||||||
|
'massachussetts': 'MA',
|
||||||
|
'md': 'MD',
|
||||||
|
'me': 'ME',
|
||||||
|
'mi': 'MI',
|
||||||
|
'mich': 'MI',
|
||||||
|
'michigan': 'MI',
|
||||||
|
'micronesia': 'FM',
|
||||||
|
'minn': 'MN',
|
||||||
|
'minnesota': 'MN',
|
||||||
|
'miss': 'MS',
|
||||||
|
'mississippi': 'MS',
|
||||||
|
'missouri': 'MO',
|
||||||
|
'mn': 'MN',
|
||||||
|
'mo': 'MO',
|
||||||
|
'mont': 'MT',
|
||||||
|
'montana': 'MT',
|
||||||
|
'mp': 'MP',
|
||||||
|
'ms': 'MS',
|
||||||
|
'mt': 'MT',
|
||||||
|
'n d': 'ND',
|
||||||
|
'n dak': 'ND',
|
||||||
|
'n h': 'NH',
|
||||||
|
'n j': 'NJ',
|
||||||
|
'n m': 'NM',
|
||||||
|
'n mex': 'NM',
|
||||||
|
'nc': 'NC',
|
||||||
|
'nd': 'ND',
|
||||||
|
'ne': 'NE',
|
||||||
|
'neb': 'NE',
|
||||||
|
'nebr': 'NE',
|
||||||
|
'nebraska': 'NE',
|
||||||
|
'nev': 'NV',
|
||||||
|
'nevada': 'NV',
|
||||||
|
'new hampshire': 'NH',
|
||||||
|
'new jersey': 'NJ',
|
||||||
|
'new mexico': 'NM',
|
||||||
|
'new york': 'NY',
|
||||||
|
'nh': 'NH',
|
||||||
|
'nj': 'NJ',
|
||||||
|
'nm': 'NM',
|
||||||
|
'nmex': 'NM',
|
||||||
|
'north carolina': 'NC',
|
||||||
|
'north dakota': 'ND',
|
||||||
|
'northern mariana islands': 'MP',
|
||||||
|
'nv': 'NV',
|
||||||
|
'ny': 'NY',
|
||||||
|
'oh': 'OH',
|
||||||
|
'ohio': 'OH',
|
||||||
|
'ok': 'OK',
|
||||||
|
'okla': 'OK',
|
||||||
|
'oklahoma': 'OK',
|
||||||
|
'or': 'OR',
|
||||||
|
'ore': 'OR',
|
||||||
|
'oreg': 'OR',
|
||||||
|
'oregon': 'OR',
|
||||||
|
'pa': 'PA',
|
||||||
|
'penn': 'PA',
|
||||||
|
'pennsylvania': 'PA',
|
||||||
|
'pr': 'PR',
|
||||||
|
'puerto rico': 'PR',
|
||||||
|
'rhode island': 'RI',
|
||||||
|
'ri': 'RI',
|
||||||
|
's dak': 'SD',
|
||||||
|
'sc': 'SC',
|
||||||
|
'sd': 'SD',
|
||||||
|
'sdak': 'SD',
|
||||||
|
'south carolina': 'SC',
|
||||||
|
'south dakota': 'SD',
|
||||||
|
'tenn': 'TN',
|
||||||
|
'tennessee': 'TN',
|
||||||
|
'territory of hawaii': 'HI',
|
||||||
|
'tex': 'TX',
|
||||||
|
'texas': 'TX',
|
||||||
|
'tn': 'TN',
|
||||||
|
'tx': 'TX',
|
||||||
|
'us virgin islands': 'VI',
|
||||||
|
'usvi': 'VI',
|
||||||
|
'ut': 'UT',
|
||||||
|
'utah': 'UT',
|
||||||
|
'va': 'VA',
|
||||||
|
'vermont': 'VT',
|
||||||
|
'vi': 'VI',
|
||||||
|
'viginia': 'VA',
|
||||||
|
'virgin islands': 'VI',
|
||||||
|
'virgina': 'VA',
|
||||||
|
'virginia': 'VA',
|
||||||
|
'vt': 'VT',
|
||||||
|
'w va': 'WV',
|
||||||
|
'wa': 'WA',
|
||||||
|
'wash': 'WA',
|
||||||
|
'washington': 'WA',
|
||||||
|
'west virginia': 'WV',
|
||||||
|
'wi': 'WI',
|
||||||
|
'wis': 'WI',
|
||||||
|
'wisc': 'WI',
|
||||||
|
'wisconsin': 'WI',
|
||||||
|
'wv': 'WV',
|
||||||
|
'wva': 'WV',
|
||||||
|
'wy': 'WY',
|
||||||
|
'wyo': 'WY',
|
||||||
|
'wyoming': 'WY',
|
||||||
|
}
|
|
@ -3282,6 +3282,51 @@ u''
|
||||||
>>> f.clean('')
|
>>> f.clean('')
|
||||||
u''
|
u''
|
||||||
|
|
||||||
|
# USStateField ################################################################
|
||||||
|
|
||||||
|
USStateField validates that the data is either an abbreviation or name of a
|
||||||
|
U.S. state.
|
||||||
|
>>> from django.contrib.localflavor.usa.forms import USStateField
|
||||||
|
>>> f = USStateField()
|
||||||
|
>>> f.clean('il')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean('IL')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean('illinois')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean(' illinois ')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean(60606)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValidationError: [u'Enter a U.S. state or territory.']
|
||||||
|
>>> f.clean(None)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValidationError: [u'This field is required.']
|
||||||
|
>>> f.clean('')
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValidationError: [u'This field is required.']
|
||||||
|
|
||||||
|
>>> f = USStateField(required=False)
|
||||||
|
>>> f.clean('il')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean('IL')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean('illinois')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean(' illinois ')
|
||||||
|
u'IL'
|
||||||
|
>>> f.clean(60606)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValidationError: [u'Enter a U.S. state or territory.']
|
||||||
|
>>> f.clean(None)
|
||||||
|
u''
|
||||||
|
>>> f.clean('')
|
||||||
|
u''
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Tests of underlying functions #
|
# Tests of underlying functions #
|
||||||
#################################
|
#################################
|
||||||
|
|
Loading…
Reference in New Issue