0
|
1 #!/usr/bin/python
|
|
2
|
|
3 import sys
|
|
4 from states import *
|
|
5
|
|
6 def validate_zipcode(zip, zip4=None):
|
|
7 """ validate a zipcode"""
|
|
8
|
|
9 if not zip:
|
|
10 # a non-existant zip-code is a valid zipcode
|
|
11 # ... i think....
|
|
12 return True
|
|
13
|
|
14 if '-' in zip: # in this case, split zip into zip5 + zip4
|
|
15 zip, zip4 = zip.split('-')
|
|
16
|
|
17 zdict = { 'zip5': zip, 'zip4': zip4 }
|
|
18
|
|
19 # if the 4-digit extension exists, add it to zip
|
|
20 if zip4:
|
|
21 zip += '-' + zip4
|
|
22
|
|
23 # validate zip code format
|
|
24 for i in 5, 4:
|
|
25 zstring = 'zip' + str(i)
|
|
26 z = zdict.get(zstring, '')
|
|
27 if z:
|
|
28 if (not z.isdigit()) or (len(z) != i):
|
|
29 return False
|
|
30
|
|
31 return zip
|
|
32
|
|
33 def normalizeaddress(query):
|
|
34 """ returns normalize address, if it is an address """
|
|
35
|
|
36 # normalize the address
|
|
37 query = ','.join([i.strip() for i in query.split('\n')])
|
|
38 querylist = [i.strip() for i in query.split(',')]
|
|
39
|
|
40 lastentry = querylist[-1]
|
|
41
|
|
42 if lastentry[-1].isdigit():
|
|
43 # it must be a zip code
|
|
44 if lastentry[1].isalpha():
|
|
45 querylist = querylist[:-1] + lastentry.split()
|
|
46 if not validate_zipcode(querylist[-1]):
|
|
47 return False
|
|
48 state = querylist[-2]
|
|
49 else:
|
|
50 state = querylist[-1]
|
|
51
|
|
52 if not getstate(state):
|
|
53 return False
|
|
54
|
|
55 return ', '.join(querylist)
|
|
56
|
|
57 def address(query):
|
|
58 """
|
|
59 format an address
|
|
60 -- query should be a string
|
|
61 """
|
|
62
|
|
63 if __name__ == '__main__':
|
|
64 i = normalizeaddress(' '.join(sys.argv[1:]))
|
|
65 if i:
|
|
66 print i
|
|
67 else:
|
|
68 print 'Not an address'
|
|
69 sys.exit(1)
|