annotate V5/runme.py @ 31:926b008ccb0c tip

resolving vertex and fixing description results - I believe everything works
author DaveM
date Sat, 19 May 2018 14:50:41 +0100
parents 52ea10196da3
children
rev   line source
DaveM@23 1 #!/usr/bin/env python
DaveM@23 2
DaveM@23 3
DaveM@23 4 import dParse as dp
DaveM@23 5 import synastry as syn
DaveM@23 6 # import requests
DaveM@29 7 import localRequests as lr
DaveM@23 8 import csv
DaveM@23 9 import pdb
DaveM@23 10 import os
DaveM@23 11 import pickle
DaveM@23 12 import sys
DaveM@23 13 from bs4 import BeautifulSoup
DaveM@23 14
DaveM@23 15 def makePeople(filename):
DaveM@23 16 stream = csv.DictReader(open(filename,'rb'))
DaveM@23 17 dictList = []
DaveM@23 18 people = []
DaveM@23 19 for line in stream:
DaveM@23 20 thisPerson = syn.Person(dp.regulateData(line))
DaveM@23 21 people.append(thisPerson)
DaveM@23 22 # pdb.set_trace()
DaveM@23 23 return people
DaveM@23 24
DaveM@23 25 def uniquify(itemList):
DaveM@23 26 keyDict = {}
DaveM@23 27 for item in itemList:
DaveM@23 28 keyDict[item] = 1
DaveM@23 29 return sorted(keyDict.keys())
DaveM@23 30
DaveM@23 31 def outputPeople(filename,people):
DaveM@23 32 with open(filename, "wb") as csv_file:
DaveM@23 33 dictKeys = []
DaveM@23 34 for person in people:
DaveM@23 35 if person.issue is None:
DaveM@23 36 person.horiscope.makeAllAspectTreple()
DaveM@23 37 dictKeys += person.horiscope.aspectTreple.keys()
DaveM@23 38 dictKeys = uniquify(dictKeys)
DaveM@23 39 writer = csv.DictWriter(csv_file, ['id','score']+dictKeys)
DaveM@23 40 writer.writeheader()
DaveM@23 41 for person in people:
DaveM@23 42 if person.issue is None:
DaveM@23 43 tempDict = {'id':person.id,'score':person.score}
DaveM@23 44 tempDict.update(person.horiscope.aspectTreple)
DaveM@23 45 # pdb.set_trace()
DaveM@23 46 writer.writerow(tempDict)
DaveM@23 47
DaveM@23 48 def outputScores(filename,people):
DaveM@23 49 with open(filename, "wb") as csv_file:
DaveM@23 50 csv_file.write('Person ID, Score \n')
DaveM@23 51 for person in people:
DaveM@23 52 if person.issue is None:
DaveM@23 53 csv_file.write(str(person.id)+','+str(person.score)+'\n')
DaveM@23 54 else:
DaveM@23 55 csv_file.write(str(person.id)+','+str(person.issue)+'\n')
DaveM@23 56
DaveM@29 57 def outputDescriptions(filename,people):
DaveM@29 58 with open(filename, "wb") as csv_file:
DaveM@29 59 for person in people:
DaveM@29 60 if person.issue is None:
DaveM@31 61 csv_file.write(str(person.id)+', '+str(person.score)+'\n'+''.join(person.description)+'\n\n')
DaveM@29 62 else:
DaveM@31 63 csv_file.write(str(person.id)+', '+str(person.issue)+'\n\n')
DaveM@29 64
DaveM@23 65 def outputIssues(filename,people):
DaveM@23 66 with open(filename, "wb") as csv_file:
DaveM@23 67 csv_file.write('Person ID, Issue \n')
DaveM@23 68 for person in people:
DaveM@23 69 if person.issue is not None:
DaveM@23 70 csv_file.write(str(person.id)+','+str(person.issue)+'\n')
DaveM@23 71
DaveM@23 72 # def requestURL(url,payload):
DaveM@23 73 # r = requests.get(url, params=payload)
DaveM@23 74 # time.sleep(5)
DaveM@23 75 # return r
DaveM@23 76
DaveM@23 77 # def loadPickUpdate(filename):
DaveM@23 78
DaveM@23 79 def loadPick(filename):
DaveM@23 80 with open(filename, 'rb') as handle:
DaveM@23 81 b = pickle.load(handle)
DaveM@23 82 return b
DaveM@23 83
DaveM@23 84 def savePick(filename,data):
DaveM@23 85 with open(filename, 'wb') as handle:
DaveM@23 86 pickle.dump(data,handle)
DaveM@23 87
DaveM@23 88 def parseHoriscope(people,saveFile):
DaveM@23 89 rawData = {}
DaveM@23 90 for person in people:
DaveM@23 91 issue = person.identifyIssues()
DaveM@23 92 if issue is not None:
DaveM@23 93 print 'SKIPPING person '+ person.id + ' error with ' + issue
DaveM@23 94 else:
DaveM@24 95 # print 'parsing person '+ person.id
DaveM@23 96 if person.resp is None:
DaveM@23 97 print 'Posting Request for person '+ person.id
DaveM@23 98 person.makePayload()
DaveM@23 99 rawData[person.id] = person.requestURL()
DaveM@29 100
DaveM@24 101 # print 'parsing person '+ person.id
DaveM@29 102 if person.resp is None:
DaveM@29 103 print 'SKIPPING person '+ person.id + ' error with unknown error'
DaveM@29 104 else:
DaveM@29 105 person.horiscope = person.parsePage()
DaveM@23 106 # person.horiscope.printPositions()
DaveM@23 107 if saveFile is not None:
DaveM@28 108 # savePick('raw_'+saveFile,rawData)
DaveM@23 109 savePick(saveFile,people)
DaveM@23 110
DaveM@23 111 def parseHoriscopeRaw(people,saveFile):
DaveM@23 112 rawData = loadPick('raw_'+saveFile)
DaveM@23 113 for person in people:
DaveM@23 114 issue = person.identifyIssues()
DaveM@23 115 if issue is not None:
DaveM@23 116 print 'SKIPPING person '+ person.id + ' error with ' + issue
DaveM@23 117 else:
DaveM@24 118 # print 'parsing person '+ person.id
DaveM@23 119 if person.resp is None:
DaveM@24 120 print 'Reading Request for person '+ person.id
DaveM@23 121 person.makePayload()
DaveM@23 122 person.resp = rawData[person.id]
DaveM@24 123 # print 'parsing person '+ person.id
DaveM@23 124 person.horiscope = person.parsePage()
DaveM@23 125 # person.horiscope.printPositions()
DaveM@23 126 if saveFile is not None:
DaveM@23 127 savePick(saveFile,people)
DaveM@23 128
DaveM@23 129 def _main():
DaveM@29 130 resetAll = False
DaveM@29 131 if resetAll:
DaveM@29 132 for item in os.listdir('.'):
DaveM@29 133 if item.endswith(".pick"):
DaveM@29 134 os.remove(item)
DaveM@31 135 # os.remove('outData_collect.pick')
DaveM@23 136 pickFile = 'outData.pick'
DaveM@23 137 if not os.path.exists(pickFile):
DaveM@23 138 people = makePeople('individuals.csv')
DaveM@23 139 savePick(pickFile,people)
DaveM@23 140 else:
DaveM@23 141 people = loadPick(pickFile)
DaveM@23 142 parseSaveFile = pickFile.split('.')[0]+'_collect.pick'
DaveM@23 143 if not os.path.exists(parseSaveFile):
DaveM@27 144 # if os.path.exists('raw_'+parseSaveFile):
DaveM@27 145 # parseHoriscopeRaw(people,parseSaveFile)
DaveM@27 146 # else:
DaveM@27 147 parseHoriscope(people,parseSaveFile)
DaveM@23 148 else:
DaveM@23 149 people = loadPick(parseSaveFile)
DaveM@23 150 # if not os.path.exists('fullResults.pick'):
DaveM@23 151 if not os.path.exists('fullResults.pick'):
DaveM@23 152 comp = syn.compatibility()
DaveM@23 153 comp.parseCompatRules('compatibilityRules.csv')
DaveM@23 154 for person in people:
DaveM@23 155 print person.id
DaveM@23 156 person.score = None
DaveM@23 157 if person.issue is None:
DaveM@29 158 person.score,person.description = comp.describeCompatibility(person.horiscope)
DaveM@23 159 if person.score is None:
DaveM@23 160 person.issue = 'None Planet Locations'
DaveM@23 161 # pdb.set_trace()
DaveM@23 162 f = open('issues/'+str(person.id)+'.html','w')
DaveM@23 163 f.write(person.resp.content)
DaveM@23 164 f.close()
DaveM@23 165 savePick('fullResults.pick',people)
DaveM@23 166 else:
DaveM@23 167 people = loadPick('fullResults.pick')
DaveM@23 168 outputPeople('fullResult.csv',people)
DaveM@23 169 outputScores('scores.csv',people)
DaveM@31 170 outputDescriptions('description.txt',people)
DaveM@23 171 outputIssues('issues.csv',people)
DaveM@23 172
DaveM@23 173 if __name__ == "__main__":
DaveM@23 174 _main()