comparison python/address.py @ 0:f3ab51c79813

adding configuration from https://svn.openplans.org/svn/config_jhammel/
author k0s <k0scist@gmail.com>
date Thu, 15 Oct 2009 11:41:26 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f3ab51c79813
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'