Mercurial > hg > horiscopes
changeset 17:e7a3fb5b9473
adding new compat rules
author | DaveM |
---|---|
date | Mon, 05 Mar 2018 14:23:17 +0000 |
parents | b11cff4b7f83 |
children | 155126861c07 |
files | V3/dParse.py V4/compatibilityRules.csv |
diffstat | 2 files changed, 501 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/V3/dParse.py Mon Mar 05 14:23:17 2018 +0000 @@ -0,0 +1,313 @@ +#!/usr/bin/env python + +import csv +import time +import unicodedata +from geopy.geocoders import Nominatim +from geopy.exc import GeocoderTimedOut +import random +import pdb + +DEFAULT_TIME_H = 12 +DEFAULT_TIME_M = 00 +DEAULT_LOCATION = 'USA' + +# def parseCSV(filename): +# stream = csv.DictReader(open(filename,'rb')) +# dictList = [] +# people = [] +# for line in stream: +# people.append(syn.person(line)) +# return people +# # dictList.append(regulateData(line)) +# # return dictList + +def regulateData(dataDict): + print("Parse %s"%(str(dataDict['ID']))) + p_DOBQ = "What is your partner's date of birth? Please use the format DD/MM/YYYY (for example, 29/03/1981)." + p_TOBQ = "At what exact time were your partner born? Please use the format HHMM (for example, 2204)." + DOB_DQ = "Which day (numeric) have you been born?" + DOB_MQ = "Which month have you been born?" + DOB_YQ = "Year Of Birth" + TOB_Q = "At what exact time were you born? Please use the format HHMM (for example, 2204)." + COB = "What is your place of birth? Please specify city and country (for example, San Francisco, USA)." + p_COB = "What is your partner's place of birth? Please specify city and country (for example, San Francisco, USA)." + dataDict['DOB'] = parseDOB(dataDict[DOB_DQ],dataDict[DOB_MQ],dataDict[DOB_YQ]) + # print (dataDict[DOB_DQ],dataDict[DOB_MQ],dataDict[DOB_YQ]) + # print dataDict['DOB'] + dataDict['TOB'] = parseTOB(dataDict[TOB_Q]) + dataDict['pDOB'] = parsePartnerDOB(dataDict[p_DOBQ]) + dataDict['pTOB'] = parseTOB(dataDict[p_TOBQ]) + # MAKE RANDOM PLACE + # dataDict['COB'] = (random.uniform(-90, 90),random.uniform(-90, 90)) + # dataDict['pCOB'] = (random.uniform(-90, 90),random.uniform(-90, 90)) + dataDict['COB'] = parseBirthTown(dataDict[COB]) + dataDict['pCOB'] = parseBirthTown(dataDict[p_COB]) + return dataDict + + +def parseBirthTown(s): + try: + s = s.encode('ascii') + except UnicodeDecodeError: + # pdb.set_trace() + s = s.decode('latin-1') + # s = unicodedata.normalize('NFKD',s.decode('utf-8')).encode('ascii','ignore') + timeoutTime = 2 + geolocator = Nominatim(timeout=timeoutTime) + while s is not [] and timeoutTime < 60: + try: + location = geolocator.geocode(s) + if location is not None: + # print(location.raw) + # print (location.latitude, location.longitude) + return (location.latitude, location.longitude, location.raw) + else: + s = s.split(' ',1) + if len(s) == 2: + s = s[1] + # print s + else: + s = DEAULT_LOCATION + except: + timeoutTime += 1 + print("Error: geocode failed on input %s, incrementing timeout time to %d"%(s,timeoutTime)) + time.sleep(5) + geolocator = Nominatim(timeout=timeoutTime) + # places = geograpy.get_place_context(text=s) + +def parsePartnerDOB(dob): + # print dob + # pdb.set_trace() + dob = dob.strip() + if(dob.count('-') == 2): + dob = dob.replace('-','/') + if(dob.count(' ') == 2): + dob = dob.replace(' ','/') + dob_ = dob.split('/') + if(len(dob_) != 3): + dob = dob.replace('/','').strip() + dob_ = [] + # print dob + if len(dob) == 8: # ddmmyyyy + dob_.append(dob[:2]) + dob_.append(dob[2:4]) + dob_.append(dob[4:]) + elif len(dob) == 7 and dob[1] == '1' and (dob[2] == '0' or dob[2] == '1' or dob[2] == '2'): # dmmyyyy + dob_.append(dob[0]) + dob_.append(dob[1:3]) + dob_.append(dob[3:]) + elif(len(dob) == 7): + if int(dob[:2]) > 31:# dmmyyyy + dob_.append(dob[0]) + dob_.append(dob[1:3]) + dob_.append(dob[3:]) + elif len(dob) == 7: # ddmyyyy + dob_.append(dob[0:2]) + dob_.append(dob[2]) + dob_.append(dob[3:]) + elif len(dob) == 6 and dob[3:4] != '19': # ddmmyy + dob_.append(dob[:2]) + dob_.append(dob[2:4]) + dob_.append(dob[4:]) + elif len(dob) == 5 and dob[1] == '1' and (dob[2] == '0' or dob[2] == '1' or dob[2] == '2'): # dmmyy + dob_.append(dob[0]) + dob_.append(dob[1:3]) + dob_.append(dob[3:]) + elif len(dob) == 5: # ddmyy + dob_.append(dob[:2]) + dob_.append(dob[2]) + dob_.append(dob[3:]) + elif len(dob) == 4: # dmyy + dob_.append(dob[0]) + dob_.append(dob[1]) + dob_.append(dob[2:]) + else: + if(len(dob) < 4): + return None + # print dob + # print filter(lambda x: x.isdigit(),dob) + print 'no / partnerDOB issue' + # deal with no /'s + try: + d = int(filter(lambda x: x.isdigit(),dob_[0])) + m = int(filter(lambda x: x.isdigit(),dob_[1])) + y = int(filter(lambda x: x.isdigit(),dob_[2])) + if y < 100: + y = y + 1900 + if (m > 12 and d <= 12): + temp = d + d = m + m = temp + if(d > 31 or d < 1 or m > 12 or m < 1 or y > 2017 or y < 1900): + print 'error with DOB '+d+'/'+m+'/'+y + pdb.set_trace() + except TypeError: + return None + # print (d,m,y) + return (d,m,y) + +def monthStringToNum(s): + # print 'inMonthStringToNum' + m = {'jan':1,'feb':2,'mar':3, + 'apr':4,'may':5,'jun':6,'jul':7,'aug':8, + 'sep':9,'oct':10,'nov':11,'dec':12} + s_ = s.strip()[:3].lower() + try: + out = m[s_] + return out + except: + raise ValueError('Not a month') + +def checkMonthDay(d,m): + if d > 31: # take first two digits of day + d = int(str(d)[:2]) + if d > 31: + d = int(str(d)[1]) + if m > 12 and d < 12: # Day and month wrong way round - American + temp = m + m = d + d = temp + if(m == 2): + if d <= 29: + return (True,d,m) + else: + return (False,d,m) + elif m in [4,6,9,11]: + if d <= 30: + return (True,d,m) + else: + return (False,d,m) + elif m <= 12 and d <= 31: + return (True,d,m) + else: + return (False,d,m) + +def parseDOB(d,m,y): + d = int(filter(lambda x: x.isdigit(),d)) + y = int(filter(lambda x: x.isdigit(),y)) + try: + # print m + m = monthStringToNum(m.strip()) + except ValueError: + m = int(m.strip()) + if(y < 100): + y = y + 1900 + (r,d,m) = checkMonthDay(d,m) + if not r: + print 'error with day month' + print (r,d,m) + return (d,m,y) + +def parseTOB(T): + # pdb.set_trace() + timeFlag = None + T_ = T.replace('.','').lower().strip() + if 'am' in T_: + timeFlag = 0 + T = T_.replace('am','') + if 'pm' in T_: + timeFlag = 1 + T = T_.replace('pm','') + T = T.strip() + if T.count('.') == 1: + T = T.replace('.',':') + try: + if ':' in T: + T_ = T.split(':') + + H = int(T_[0]) + M = int(T_[1]) + else: + if len(T) == 4: + H = int(T[:2]) + M = int(T[2:]) + elif int(T) <= 24 : + H = int(T) + M = 0 + elif int(T) > 100: + H = int(T)/100 + M = int(T)%100 + if timeFlag is not None: + if timeFlag == 0: + H = H%12 + else: + H = H%12 + 12 + except ValueError: + H = DEFAULT_TIME_H + M = DEFAULT_TIME_M + return (H,M) + +def makePayload(dataDict): + if type(dataDict['COB']) is str: + cob_0 = float(dataDict['COB'].split(',')[0][1:]) + cob_1 = float(dataDict['COB'].split(',')[1]) + dataDict['COB'] = (cob_0,cob_1) + if type(dataDict['pCOB']) is str: + pcob_0 = float(dataDict['pCOB'].split(',')[0][1:]) + pcob_1 = float(dataDict['pCOB'].split(',')[1]) + dataDict['pCOB'] = (pcob_0,pcob_1) + if type(dataDict['DOB']) is str: + dataDict['DOB'] = dataDict['DOB'][1:-1].split(',') + if type(dataDict['pDOB']) is str: + dataDict['pDOB'] = dataDict['pDOB'][1:-1].split(',') + if type(dataDict['TOB']) is str: + dataDict['TOB'] = dataDict['TOB'][1:-1].split(',') + if type(dataDict['pTOB']) is str: + dataDict['pTOB'] = dataDict['pTOB'][1:-1].split(',') + # pdb.set_trace() + + print dataDict['pDOB'] + + R = {'send_calculation':'1', #Req + 'muz_narozeni_den':dataDict['DOB'][0], + 'muz_narozeni_mesic':dataDict['DOB'][1], + 'muz_narozeni_rok':dataDict['DOB'][2], + 'muz_narozeni_hodina':dataDict['TOB'][0], + 'muz_narozeni_minuta':dataDict['TOB'][1], + 'muz_narozeni_city':'', + 'muz_narozeni_mesto_hidden':'Manually+place%3A+%C2%B0%27N%2C+%C2%B0%27E',#auto + 'muz_narozeni_stat_hidden':'XX', + 'muz_narozeni_podstat_kratky_hidden':'', + 'muz_narozeni_podstat_hidden':'', + 'muz_narozeni_podstat2_kratky_hidden':'', + 'muz_narozeni_podstat3_kratky_hidden':'', + 'muz_narozeni_input_hidden':'', + 'muz_narozeni_sirka_stupne':str(abs(dataDict['COB'][0])).split('.')[0], + 'muz_narozeni_sirka_minuty':str(float('0.'+str(dataDict['COB'][0]).split('.')[1])*60).split('.')[0], + 'muz_narozeni_sirka_smer': '1' if dataDict['COB'][0]<0 else '0', #address N Dir (0':'N',1':'S) + 'muz_narozeni_delka_stupne':str(abs(dataDict['COB'][1])).split('.')[0], #address E - Main + 'muz_narozeni_delka_minuty':str(float('0.'+str(dataDict['COB'][1]).split('.')[1])*60).split('.')[0], + 'muz_narozeni_delka_smer': '1' if dataDict['COB'][1]<0 else '0', #address E Dir (0':'E',1':'W) + 'muz_narozeni_timezone_form':'auto', + 'muz_narozeni_timezone_dst_form':'auto', + 'send_calculation':'1', + 'zena_narozeni_den':dataDict['pDOB'][0], + 'zena_narozeni_mesic':dataDict['pDOB'][1], + 'zena_narozeni_rok':dataDict['pDOB'][2], + 'zena_narozeni_hodina':dataDict['pTOB'][0], + 'zena_narozeni_minuta':dataDict['pTOB'][1], + 'zena_narozeni_city':'', + 'zena_narozeni_mesto_hidden':'Manually+place%3A+%C2%B0%27N%2C+%C2%B0%27E', + 'zena_narozeni_stat_hidden':'XX', + 'zena_narozeni_podstat_kratky_hidden':'', + 'zena_narozeni_podstat_hidden':'', + 'zena_narozeni_podstat2_kratky_hidden':'', + 'zena_narozeni_podstat3_kratky_hidden':'', + 'zena_narozeni_input_hidden':'', + 'zena_narozeni_sirka_stupne':str(abs(dataDict['pCOB'][0])).split('.')[0], + 'zena_narozeni_sirka_minuty':str(float('0.'+str(dataDict['pCOB'][0]).split('.')[1])*60).split('.')[0], + 'zena_narozeni_sirka_smer': '1' if dataDict['pCOB'][0]<0 else '0', + 'zena_narozeni_delka_stupne':str(abs(dataDict['pCOB'][1])).split('.')[0], + 'zena_narozeni_delka_minuty':str(float('0.'+str(dataDict['pCOB'][1]).split('.')[1])*60).split('.')[0], + 'zena_narozeni_delka_smer': '1' if dataDict['pCOB'][1]<0 else '0', + 'zena_narozeni_timezone_form':'auto', + 'zena_narozeni_timezone_dst_form':'auto', + 'switch_interpretations':'0', + 'house_system':'placidus', + 'uhel_orbis':'#tabs_redraw'} + return R + + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/V4/compatibilityRules.csv Mon Mar 05 14:23:17 2018 +0000 @@ -0,0 +1,188 @@ +Sun,Conjunction,asc,4 +Sun,Conjunction Opposite,Vertex,4 +Sun,Conjunction,Node,4 +Sun,Conjunction semi-Square Square Opposite,Sun/Moon,4 +Sun,,7th house,4 +Moon,Conjunction,asc,4 +Moon,Conjunction Opposite,Vertex,4 +Moon,Conjunction,Node,4 +Moon,Conjunction semi-Square Square Opposite,Sun/Moon,4 +asc,Conjunction,Node,4 +Sun,Trine Sextile,Sun,3 +Sun,Conjunction Trine Sextile,Moon,3 +Sun,Conjunction,Venus,3 +Sun,Trine,Venus,3 +Sun,Trine Sextile,Mars,3 +Sun,Conjunction Sextile Trine,Jupiter,3 +Sun,Sextile Trine,Saturn,3 +Sun,Conjunction Trine Sextile,Chiron,3 +Sun,Conjunction,asc,3 +Sun,Conjunction,Node,3 +Sun,,1st house,3 +Moon,Conjunction Sextile Trine,Moon,3 +Moon,Conjunction Sextile Trine,Venus,3 +Moon,Sextile Trine,Mars,3 +Moon,Conjunction Sextile Trine,Jupiter,3 +Moon,Sextile Trine,Saturn,3 +Moon,Conjunction Trine Sextile,Chiron,3 +Moon,Conjunction,asc,3 +Moon,Sextile Trine,asc,3 +Moon,Conjunction,IC,3 +Moon,Conjunction,Node,3 +Moon,,7th house,3 +Moon,,1st house,3 +Mercury,Conjunction Sextile Trine,Jupiter,3 +Venus,Conjunction Sextile sex Opposite,Venus,3 +Venus,Conjunction Sextile Trine,Mars,3 +Venus,Conjunction,Jupiter,3 +Venus,Sextile Trine,Saturn,3 +Venus,Conjunction Trine Sextile,Chiron,3 +Venus,Conjunction,asc,3 +Venus,Conjunction semi-Square Square Opposite,Sun/Moon,3 +Venus,,7th house,3 +Mars,Conjunction semi-Square Square Opposite,Sun/Moon,3 +asc,Conjunction,Node,3 +asc,Conjunction semi-Square Square Opposite,Sun/Moon,3 +asc,,7th house,3 +Vertex,Conjunction semi-Square Square Opposite,Sun/Moon,3 +Node,Conjunction,MC,3 +Node,Conjunction,IC,3 +Sun,Opposite,Sun,2 +Sun,Opposite,Moon,2 +Sun,Conjunction,Mercury,2 +Sun,Sextile Trine,Mercury,2 +Sun,Sextile,Venus,2 +Sun,Conjunction,Mars,2 +Sun,Sextile Trine,Uranus,2 +Sun,Sextile Trine,asc,2 +Sun,Conjunction,IC,2 +Sun,Sextile Trine,Node,2 +Sun,Square,Node,2 +Moon,Conjunction Sextile Trine,Mercury,2 +Moon,Sextile Trine,Uranus,2 +Moon,Sextile Trine,Neptune,2 +Moon,Sextile Trine,Pluto,2 +Moon,Trine Sextile,Node,2 +Moon,Square,Node,2 +Mercury,Sextile Conjunction Trine,Mercury,2 +Mercury,Conjunction Sextile Trine,Venus,2 +Mercury,Sextile Trine,Mars,2 +Mercury,Conjunction,asc,2 +Mercury,Conjunction,MC,2 +Mercury,Conjunction,IC,2 +Venus,Square Opposite,Mars,2 +Venus,Trine Sextile,Jupiter,2 +Venus,Conjunction,Saturn,2 +Venus,Sextile Trine,Uranus,2 +Venus,Conjunction,Neptune,2 +Venus,Trine Sextile,Neptune,2 +Venus,Conjunction Trine Sextile,Pluto,2 +Venus,Sextile Trine,asc,2 +Venus,Conjunction,MC,2 +Venus,Conjunction,IC,2 +Venus,Conjunction Opposite,Vertex,2 +Venus,Conjunction Opposite Trine Sextile,Node,2 +Venus,,1st house,2 +Mars,Conjunction Sextile Trine,Mars,2 +Mars,Conjunction Opposite Trine Sextile,Jupiter,2 +Mars,Conjunction Trine Sextile,Pluto,2 +Mars,Conjunction Sextile Trine,asc,2 +Mars,Conjunction Opposite,Vertex,2 +Jupiter,Conjunction Opposite Trine Sextile,Jupiter,2 +Jupiter,Conjunction,asc,2 +Jupiter,Conjunction Opposite,Vertex,2 +Jupiter,,7th house,2 +asc,Sextile Trine,asc,2 +asc,Opposite,asc,2 +asc,Trine Sextile,Node,2 +asc,Square,Node,2 +Vertex,Conjunction,Node,2 +Sun,Conjunction,Sun,1 +Sun,Square Opposite,Jupiter,1 +Sun,Sextile Trine,Neptune,1 +Sun,Conjunction Sextile Trine,Pluto,1 +Moon,Opposite,Moon,1 +Moon,Square Opposite,Venus,1 +Moon,Square Opposite,Jupiter,1 +Moon,Conjunction,Neptune,1 +Moon,Conjunction,Pluto,1 +Mercury,Square Opposite,Jupiter,1 +Mercury,Sextile Trine,Saturn,1 +Mercury,Conjunction Opposite Trine Sextile,Uranus,1 +Mercury,Conjunction Opposite Trine Sextile,Neptune,1 +Mercury,Conjunction Opposite Trine Sextile,Pluto,1 +Mercury,Sextile Trine,asc,1 +Mercury,Conjunction Opposite,Vertex,1 +Mercury,Conjunction Opposite Trine Sextile,Node,1 +Venus,Square,Venus,1 +Venus,Square opposite,Jupiter,1 +Venus,Conjunction,Uranus,1 +Venus,Square,asc,1 +Mars,Sextile Trine,Saturn,1 +Mars,Sextile Trine,Neptune,1 +Mars,Conjunction Sextile Trine,Uranus,1 +Mars,Conjunction Opposite Trine Sextile,Node,1 +Jupiter,Conjunction Sextile Trine,Saturn,1 +Jupiter,Conjunction Opposite Trine Sextile,Uranus,1 +Jupiter,Conjunction Sextile Trine,Neptune,1 +Jupiter,Conjunction Trine Sextile,Pluto,1 +Jupiter,Sextile sex Square,asc,1 +Jupiter,Conjunction Opposite Trine Sextile,Node,1 +Saturn,Sextile Trine,Saturn,1 +Saturn,Sextile Trine,asc,1 +Pluto,Conjunction,asc,1 +Pluto,Conjunction,Vertex,1 +asc,Conjunction,asc,1 +Moon,Square,Saturn,-4 +Mercury,Square,Mercury,-4 +Venus,Square,Saturn,-4 +Mars,Square Opposite,Saturn,-4 +Sun,Square,Moon,-3 +Moon,Square,Moon,-3 +Moon,Square,Mars,-3 +Moon,Conjunction Opposite,Saturn,-3 +Moon,Square Opposite,Neptune,-3 +Moon,Square Opposite,Pluto,-3 +Venus,Opposite,Saturn,-3 +Venus,Square Opposite,Neptune,-3 +Mars,Conjunction,Saturn,-3 +Mars,Square Opposite,Pluto,-3 +Uranus,Conjunction,asc,-3 +Uranus,Conjunction,Vertex,-3 +Sun,Square,Sun,-2 +Sun,Square Opposite,Mars,-2 +Sun,Conjunction Square Opposite,Saturn,-2 +Sun,Conjunction Square Opposite,Neptune,-2 +Sun,Square Opposite,Pluto,-2 +Sun,Square,asc,-2 +Moon,Square Opposite,Mercury,-2 +Moon,Opposite,Mars,-2 +Moon,Square Opposite,Uranus,-2 +Moon,Square,asc,-2 +Mercury,Opposite,Mercury,-2 +Mercury,Square Opposite,Mars,-2 +Mercury,Conjunction Square Opposite,Saturn,-2 +Venus,Square Opposite,Uranus,-2 +Venus,Square Opposite,Pluto,-2 +Mars,Square Opposite,Mars,-2 +Mars,Square Opposite,Uranus,-2 +Mars,Conjunction Square Opposite,Neptune,-2 +Saturn,Conjunction Square Opposite,asc,-2 +Saturn,Conjunction Opposite,Vertex,-2 +Saturn,Conjunction Square,Node,-2 +Neptune,Conjunction,Vertex,-2 +Neptune,Conjunction,asc,-2 +asc,Square,asc,-2 +Sun,Square Opposite,Mercury,-1 +Sun,Square Opposite,Venus,-1 +Sun,Conjunction Square Opposite,Uranus,-1 +Moon,Conjunction,Mars,-1 +Moon,Conjunction,Uranus,-1 +Mercury,Square Opposite,Venus,-1 +Mercury,Conjunction,Mars,-1 +Mercury,Square,asc,-1 +Mars,Square,asc,-1 +Jupiter,Square Opposite,Saturn,-1 +Jupiter,Square Opposite,Neptune,-1 +Jupiter,Square Opposite,Pluto,-1 +Saturn,Square Opposite,Saturn,-1 \ No newline at end of file