DaveM@17
|
1 #!/usr/bin/env python
|
DaveM@17
|
2
|
DaveM@17
|
3 import csv
|
DaveM@17
|
4 import time
|
DaveM@17
|
5 import unicodedata
|
DaveM@17
|
6 from geopy.geocoders import Nominatim
|
DaveM@17
|
7 from geopy.exc import GeocoderTimedOut
|
DaveM@17
|
8 import random
|
DaveM@17
|
9 import pdb
|
DaveM@17
|
10
|
DaveM@17
|
11 DEFAULT_TIME_H = 12
|
DaveM@17
|
12 DEFAULT_TIME_M = 00
|
DaveM@17
|
13 DEAULT_LOCATION = 'USA'
|
DaveM@17
|
14
|
DaveM@17
|
15 # def parseCSV(filename):
|
DaveM@17
|
16 # stream = csv.DictReader(open(filename,'rb'))
|
DaveM@17
|
17 # dictList = []
|
DaveM@17
|
18 # people = []
|
DaveM@17
|
19 # for line in stream:
|
DaveM@17
|
20 # people.append(syn.person(line))
|
DaveM@17
|
21 # return people
|
DaveM@17
|
22 # # dictList.append(regulateData(line))
|
DaveM@17
|
23 # # return dictList
|
DaveM@17
|
24
|
DaveM@17
|
25 def regulateData(dataDict):
|
DaveM@17
|
26 print("Parse %s"%(str(dataDict['ID'])))
|
DaveM@17
|
27 p_DOBQ = "What is your partner's date of birth? Please use the format DD/MM/YYYY (for example, 29/03/1981)."
|
DaveM@17
|
28 p_TOBQ = "At what exact time were your partner born? Please use the format HHMM (for example, 2204)."
|
DaveM@17
|
29 DOB_DQ = "Which day (numeric) have you been born?"
|
DaveM@17
|
30 DOB_MQ = "Which month have you been born?"
|
DaveM@17
|
31 DOB_YQ = "Year Of Birth"
|
DaveM@17
|
32 TOB_Q = "At what exact time were you born? Please use the format HHMM (for example, 2204)."
|
DaveM@17
|
33 COB = "What is your place of birth? Please specify city and country (for example, San Francisco, USA)."
|
DaveM@17
|
34 p_COB = "What is your partner's place of birth? Please specify city and country (for example, San Francisco, USA)."
|
DaveM@17
|
35 dataDict['DOB'] = parseDOB(dataDict[DOB_DQ],dataDict[DOB_MQ],dataDict[DOB_YQ])
|
DaveM@17
|
36 # print (dataDict[DOB_DQ],dataDict[DOB_MQ],dataDict[DOB_YQ])
|
DaveM@17
|
37 # print dataDict['DOB']
|
DaveM@17
|
38 dataDict['TOB'] = parseTOB(dataDict[TOB_Q])
|
DaveM@17
|
39 dataDict['pDOB'] = parsePartnerDOB(dataDict[p_DOBQ])
|
DaveM@17
|
40 dataDict['pTOB'] = parseTOB(dataDict[p_TOBQ])
|
DaveM@17
|
41 # MAKE RANDOM PLACE
|
DaveM@17
|
42 # dataDict['COB'] = (random.uniform(-90, 90),random.uniform(-90, 90))
|
DaveM@17
|
43 # dataDict['pCOB'] = (random.uniform(-90, 90),random.uniform(-90, 90))
|
DaveM@17
|
44 dataDict['COB'] = parseBirthTown(dataDict[COB])
|
DaveM@17
|
45 dataDict['pCOB'] = parseBirthTown(dataDict[p_COB])
|
DaveM@17
|
46 return dataDict
|
DaveM@17
|
47
|
DaveM@17
|
48
|
DaveM@17
|
49 def parseBirthTown(s):
|
DaveM@17
|
50 try:
|
DaveM@17
|
51 s = s.encode('ascii')
|
DaveM@17
|
52 except UnicodeDecodeError:
|
DaveM@17
|
53 # pdb.set_trace()
|
DaveM@17
|
54 s = s.decode('latin-1')
|
DaveM@17
|
55 # s = unicodedata.normalize('NFKD',s.decode('utf-8')).encode('ascii','ignore')
|
DaveM@17
|
56 timeoutTime = 2
|
DaveM@17
|
57 geolocator = Nominatim(timeout=timeoutTime)
|
DaveM@17
|
58 while s is not [] and timeoutTime < 60:
|
DaveM@17
|
59 try:
|
DaveM@17
|
60 location = geolocator.geocode(s)
|
DaveM@17
|
61 if location is not None:
|
DaveM@17
|
62 # print(location.raw)
|
DaveM@17
|
63 # print (location.latitude, location.longitude)
|
DaveM@17
|
64 return (location.latitude, location.longitude, location.raw)
|
DaveM@17
|
65 else:
|
DaveM@17
|
66 s = s.split(' ',1)
|
DaveM@17
|
67 if len(s) == 2:
|
DaveM@17
|
68 s = s[1]
|
DaveM@17
|
69 # print s
|
DaveM@17
|
70 else:
|
DaveM@17
|
71 s = DEAULT_LOCATION
|
DaveM@17
|
72 except:
|
DaveM@17
|
73 timeoutTime += 1
|
DaveM@17
|
74 print("Error: geocode failed on input %s, incrementing timeout time to %d"%(s,timeoutTime))
|
DaveM@17
|
75 time.sleep(5)
|
DaveM@17
|
76 geolocator = Nominatim(timeout=timeoutTime)
|
DaveM@17
|
77 # places = geograpy.get_place_context(text=s)
|
DaveM@17
|
78
|
DaveM@17
|
79 def parsePartnerDOB(dob):
|
DaveM@17
|
80 # print dob
|
DaveM@17
|
81 # pdb.set_trace()
|
DaveM@17
|
82 dob = dob.strip()
|
DaveM@17
|
83 if(dob.count('-') == 2):
|
DaveM@17
|
84 dob = dob.replace('-','/')
|
DaveM@17
|
85 if(dob.count(' ') == 2):
|
DaveM@17
|
86 dob = dob.replace(' ','/')
|
DaveM@17
|
87 dob_ = dob.split('/')
|
DaveM@17
|
88 if(len(dob_) != 3):
|
DaveM@17
|
89 dob = dob.replace('/','').strip()
|
DaveM@17
|
90 dob_ = []
|
DaveM@17
|
91 # print dob
|
DaveM@17
|
92 if len(dob) == 8: # ddmmyyyy
|
DaveM@17
|
93 dob_.append(dob[:2])
|
DaveM@17
|
94 dob_.append(dob[2:4])
|
DaveM@17
|
95 dob_.append(dob[4:])
|
DaveM@17
|
96 elif len(dob) == 7 and dob[1] == '1' and (dob[2] == '0' or dob[2] == '1' or dob[2] == '2'): # dmmyyyy
|
DaveM@17
|
97 dob_.append(dob[0])
|
DaveM@17
|
98 dob_.append(dob[1:3])
|
DaveM@17
|
99 dob_.append(dob[3:])
|
DaveM@17
|
100 elif(len(dob) == 7):
|
DaveM@17
|
101 if int(dob[:2]) > 31:# dmmyyyy
|
DaveM@17
|
102 dob_.append(dob[0])
|
DaveM@17
|
103 dob_.append(dob[1:3])
|
DaveM@17
|
104 dob_.append(dob[3:])
|
DaveM@17
|
105 elif len(dob) == 7: # ddmyyyy
|
DaveM@17
|
106 dob_.append(dob[0:2])
|
DaveM@17
|
107 dob_.append(dob[2])
|
DaveM@17
|
108 dob_.append(dob[3:])
|
DaveM@17
|
109 elif len(dob) == 6 and dob[3:4] != '19': # ddmmyy
|
DaveM@17
|
110 dob_.append(dob[:2])
|
DaveM@17
|
111 dob_.append(dob[2:4])
|
DaveM@17
|
112 dob_.append(dob[4:])
|
DaveM@17
|
113 elif len(dob) == 5 and dob[1] == '1' and (dob[2] == '0' or dob[2] == '1' or dob[2] == '2'): # dmmyy
|
DaveM@17
|
114 dob_.append(dob[0])
|
DaveM@17
|
115 dob_.append(dob[1:3])
|
DaveM@17
|
116 dob_.append(dob[3:])
|
DaveM@17
|
117 elif len(dob) == 5: # ddmyy
|
DaveM@17
|
118 dob_.append(dob[:2])
|
DaveM@17
|
119 dob_.append(dob[2])
|
DaveM@17
|
120 dob_.append(dob[3:])
|
DaveM@17
|
121 elif len(dob) == 4: # dmyy
|
DaveM@17
|
122 dob_.append(dob[0])
|
DaveM@17
|
123 dob_.append(dob[1])
|
DaveM@17
|
124 dob_.append(dob[2:])
|
DaveM@17
|
125 else:
|
DaveM@17
|
126 if(len(dob) < 4):
|
DaveM@17
|
127 return None
|
DaveM@17
|
128 # print dob
|
DaveM@17
|
129 # print filter(lambda x: x.isdigit(),dob)
|
DaveM@17
|
130 print 'no / partnerDOB issue'
|
DaveM@17
|
131 # deal with no /'s
|
DaveM@17
|
132 try:
|
DaveM@17
|
133 d = int(filter(lambda x: x.isdigit(),dob_[0]))
|
DaveM@17
|
134 m = int(filter(lambda x: x.isdigit(),dob_[1]))
|
DaveM@17
|
135 y = int(filter(lambda x: x.isdigit(),dob_[2]))
|
DaveM@17
|
136 if y < 100:
|
DaveM@17
|
137 y = y + 1900
|
DaveM@17
|
138 if (m > 12 and d <= 12):
|
DaveM@17
|
139 temp = d
|
DaveM@17
|
140 d = m
|
DaveM@17
|
141 m = temp
|
DaveM@17
|
142 if(d > 31 or d < 1 or m > 12 or m < 1 or y > 2017 or y < 1900):
|
DaveM@17
|
143 print 'error with DOB '+d+'/'+m+'/'+y
|
DaveM@17
|
144 pdb.set_trace()
|
DaveM@17
|
145 except TypeError:
|
DaveM@17
|
146 return None
|
DaveM@17
|
147 # print (d,m,y)
|
DaveM@17
|
148 return (d,m,y)
|
DaveM@17
|
149
|
DaveM@17
|
150 def monthStringToNum(s):
|
DaveM@17
|
151 # print 'inMonthStringToNum'
|
DaveM@17
|
152 m = {'jan':1,'feb':2,'mar':3,
|
DaveM@17
|
153 'apr':4,'may':5,'jun':6,'jul':7,'aug':8,
|
DaveM@17
|
154 'sep':9,'oct':10,'nov':11,'dec':12}
|
DaveM@17
|
155 s_ = s.strip()[:3].lower()
|
DaveM@17
|
156 try:
|
DaveM@17
|
157 out = m[s_]
|
DaveM@17
|
158 return out
|
DaveM@17
|
159 except:
|
DaveM@17
|
160 raise ValueError('Not a month')
|
DaveM@17
|
161
|
DaveM@17
|
162 def checkMonthDay(d,m):
|
DaveM@17
|
163 if d > 31: # take first two digits of day
|
DaveM@17
|
164 d = int(str(d)[:2])
|
DaveM@17
|
165 if d > 31:
|
DaveM@17
|
166 d = int(str(d)[1])
|
DaveM@17
|
167 if m > 12 and d < 12: # Day and month wrong way round - American
|
DaveM@17
|
168 temp = m
|
DaveM@17
|
169 m = d
|
DaveM@17
|
170 d = temp
|
DaveM@17
|
171 if(m == 2):
|
DaveM@17
|
172 if d <= 29:
|
DaveM@17
|
173 return (True,d,m)
|
DaveM@17
|
174 else:
|
DaveM@17
|
175 return (False,d,m)
|
DaveM@17
|
176 elif m in [4,6,9,11]:
|
DaveM@17
|
177 if d <= 30:
|
DaveM@17
|
178 return (True,d,m)
|
DaveM@17
|
179 else:
|
DaveM@17
|
180 return (False,d,m)
|
DaveM@17
|
181 elif m <= 12 and d <= 31:
|
DaveM@17
|
182 return (True,d,m)
|
DaveM@17
|
183 else:
|
DaveM@17
|
184 return (False,d,m)
|
DaveM@17
|
185
|
DaveM@17
|
186 def parseDOB(d,m,y):
|
DaveM@17
|
187 d = int(filter(lambda x: x.isdigit(),d))
|
DaveM@17
|
188 y = int(filter(lambda x: x.isdigit(),y))
|
DaveM@17
|
189 try:
|
DaveM@17
|
190 # print m
|
DaveM@17
|
191 m = monthStringToNum(m.strip())
|
DaveM@17
|
192 except ValueError:
|
DaveM@17
|
193 m = int(m.strip())
|
DaveM@17
|
194 if(y < 100):
|
DaveM@17
|
195 y = y + 1900
|
DaveM@17
|
196 (r,d,m) = checkMonthDay(d,m)
|
DaveM@17
|
197 if not r:
|
DaveM@17
|
198 print 'error with day month'
|
DaveM@17
|
199 print (r,d,m)
|
DaveM@17
|
200 return (d,m,y)
|
DaveM@17
|
201
|
DaveM@17
|
202 def parseTOB(T):
|
DaveM@17
|
203 # pdb.set_trace()
|
DaveM@17
|
204 timeFlag = None
|
DaveM@17
|
205 T_ = T.replace('.','').lower().strip()
|
DaveM@17
|
206 if 'am' in T_:
|
DaveM@17
|
207 timeFlag = 0
|
DaveM@17
|
208 T = T_.replace('am','')
|
DaveM@17
|
209 if 'pm' in T_:
|
DaveM@17
|
210 timeFlag = 1
|
DaveM@17
|
211 T = T_.replace('pm','')
|
DaveM@17
|
212 T = T.strip()
|
DaveM@17
|
213 if T.count('.') == 1:
|
DaveM@17
|
214 T = T.replace('.',':')
|
DaveM@17
|
215 try:
|
DaveM@17
|
216 if ':' in T:
|
DaveM@17
|
217 T_ = T.split(':')
|
DaveM@17
|
218
|
DaveM@17
|
219 H = int(T_[0])
|
DaveM@17
|
220 M = int(T_[1])
|
DaveM@17
|
221 else:
|
DaveM@17
|
222 if len(T) == 4:
|
DaveM@17
|
223 H = int(T[:2])
|
DaveM@17
|
224 M = int(T[2:])
|
DaveM@17
|
225 elif int(T) <= 24 :
|
DaveM@17
|
226 H = int(T)
|
DaveM@17
|
227 M = 0
|
DaveM@17
|
228 elif int(T) > 100:
|
DaveM@17
|
229 H = int(T)/100
|
DaveM@17
|
230 M = int(T)%100
|
DaveM@17
|
231 if timeFlag is not None:
|
DaveM@17
|
232 if timeFlag == 0:
|
DaveM@17
|
233 H = H%12
|
DaveM@17
|
234 else:
|
DaveM@17
|
235 H = H%12 + 12
|
DaveM@17
|
236 except ValueError:
|
DaveM@17
|
237 H = DEFAULT_TIME_H
|
DaveM@17
|
238 M = DEFAULT_TIME_M
|
DaveM@17
|
239 return (H,M)
|
DaveM@17
|
240
|
DaveM@17
|
241 def makePayload(dataDict):
|
DaveM@17
|
242 if type(dataDict['COB']) is str:
|
DaveM@17
|
243 cob_0 = float(dataDict['COB'].split(',')[0][1:])
|
DaveM@17
|
244 cob_1 = float(dataDict['COB'].split(',')[1])
|
DaveM@17
|
245 dataDict['COB'] = (cob_0,cob_1)
|
DaveM@17
|
246 if type(dataDict['pCOB']) is str:
|
DaveM@17
|
247 pcob_0 = float(dataDict['pCOB'].split(',')[0][1:])
|
DaveM@17
|
248 pcob_1 = float(dataDict['pCOB'].split(',')[1])
|
DaveM@17
|
249 dataDict['pCOB'] = (pcob_0,pcob_1)
|
DaveM@17
|
250 if type(dataDict['DOB']) is str:
|
DaveM@17
|
251 dataDict['DOB'] = dataDict['DOB'][1:-1].split(',')
|
DaveM@17
|
252 if type(dataDict['pDOB']) is str:
|
DaveM@17
|
253 dataDict['pDOB'] = dataDict['pDOB'][1:-1].split(',')
|
DaveM@17
|
254 if type(dataDict['TOB']) is str:
|
DaveM@17
|
255 dataDict['TOB'] = dataDict['TOB'][1:-1].split(',')
|
DaveM@17
|
256 if type(dataDict['pTOB']) is str:
|
DaveM@17
|
257 dataDict['pTOB'] = dataDict['pTOB'][1:-1].split(',')
|
DaveM@17
|
258 # pdb.set_trace()
|
DaveM@17
|
259
|
DaveM@17
|
260 print dataDict['pDOB']
|
DaveM@17
|
261
|
DaveM@17
|
262 R = {'send_calculation':'1', #Req
|
DaveM@17
|
263 'muz_narozeni_den':dataDict['DOB'][0],
|
DaveM@17
|
264 'muz_narozeni_mesic':dataDict['DOB'][1],
|
DaveM@17
|
265 'muz_narozeni_rok':dataDict['DOB'][2],
|
DaveM@17
|
266 'muz_narozeni_hodina':dataDict['TOB'][0],
|
DaveM@17
|
267 'muz_narozeni_minuta':dataDict['TOB'][1],
|
DaveM@17
|
268 'muz_narozeni_city':'',
|
DaveM@17
|
269 'muz_narozeni_mesto_hidden':'Manually+place%3A+%C2%B0%27N%2C+%C2%B0%27E',#auto
|
DaveM@17
|
270 'muz_narozeni_stat_hidden':'XX',
|
DaveM@17
|
271 'muz_narozeni_podstat_kratky_hidden':'',
|
DaveM@17
|
272 'muz_narozeni_podstat_hidden':'',
|
DaveM@17
|
273 'muz_narozeni_podstat2_kratky_hidden':'',
|
DaveM@17
|
274 'muz_narozeni_podstat3_kratky_hidden':'',
|
DaveM@17
|
275 'muz_narozeni_input_hidden':'',
|
DaveM@17
|
276 'muz_narozeni_sirka_stupne':str(abs(dataDict['COB'][0])).split('.')[0],
|
DaveM@17
|
277 'muz_narozeni_sirka_minuty':str(float('0.'+str(dataDict['COB'][0]).split('.')[1])*60).split('.')[0],
|
DaveM@17
|
278 'muz_narozeni_sirka_smer': '1' if dataDict['COB'][0]<0 else '0', #address N Dir (0':'N',1':'S)
|
DaveM@17
|
279 'muz_narozeni_delka_stupne':str(abs(dataDict['COB'][1])).split('.')[0], #address E - Main
|
DaveM@17
|
280 'muz_narozeni_delka_minuty':str(float('0.'+str(dataDict['COB'][1]).split('.')[1])*60).split('.')[0],
|
DaveM@17
|
281 'muz_narozeni_delka_smer': '1' if dataDict['COB'][1]<0 else '0', #address E Dir (0':'E',1':'W)
|
DaveM@17
|
282 'muz_narozeni_timezone_form':'auto',
|
DaveM@17
|
283 'muz_narozeni_timezone_dst_form':'auto',
|
DaveM@17
|
284 'send_calculation':'1',
|
DaveM@17
|
285 'zena_narozeni_den':dataDict['pDOB'][0],
|
DaveM@17
|
286 'zena_narozeni_mesic':dataDict['pDOB'][1],
|
DaveM@17
|
287 'zena_narozeni_rok':dataDict['pDOB'][2],
|
DaveM@17
|
288 'zena_narozeni_hodina':dataDict['pTOB'][0],
|
DaveM@17
|
289 'zena_narozeni_minuta':dataDict['pTOB'][1],
|
DaveM@17
|
290 'zena_narozeni_city':'',
|
DaveM@17
|
291 'zena_narozeni_mesto_hidden':'Manually+place%3A+%C2%B0%27N%2C+%C2%B0%27E',
|
DaveM@17
|
292 'zena_narozeni_stat_hidden':'XX',
|
DaveM@17
|
293 'zena_narozeni_podstat_kratky_hidden':'',
|
DaveM@17
|
294 'zena_narozeni_podstat_hidden':'',
|
DaveM@17
|
295 'zena_narozeni_podstat2_kratky_hidden':'',
|
DaveM@17
|
296 'zena_narozeni_podstat3_kratky_hidden':'',
|
DaveM@17
|
297 'zena_narozeni_input_hidden':'',
|
DaveM@17
|
298 'zena_narozeni_sirka_stupne':str(abs(dataDict['pCOB'][0])).split('.')[0],
|
DaveM@17
|
299 'zena_narozeni_sirka_minuty':str(float('0.'+str(dataDict['pCOB'][0]).split('.')[1])*60).split('.')[0],
|
DaveM@17
|
300 'zena_narozeni_sirka_smer': '1' if dataDict['pCOB'][0]<0 else '0',
|
DaveM@17
|
301 'zena_narozeni_delka_stupne':str(abs(dataDict['pCOB'][1])).split('.')[0],
|
DaveM@17
|
302 'zena_narozeni_delka_minuty':str(float('0.'+str(dataDict['pCOB'][1]).split('.')[1])*60).split('.')[0],
|
DaveM@17
|
303 'zena_narozeni_delka_smer': '1' if dataDict['pCOB'][1]<0 else '0',
|
DaveM@17
|
304 'zena_narozeni_timezone_form':'auto',
|
DaveM@17
|
305 'zena_narozeni_timezone_dst_form':'auto',
|
DaveM@17
|
306 'switch_interpretations':'0',
|
DaveM@17
|
307 'house_system':'placidus',
|
DaveM@17
|
308 'uhel_orbis':'#tabs_redraw'}
|
DaveM@17
|
309 return R
|
DaveM@17
|
310
|
DaveM@17
|
311
|
DaveM@17
|
312
|
DaveM@17
|
313
|