annotate smartopen/address.py @ 0:d6fa501af82f

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