def handle_endtag(self, tag): # print "Encountered an end tag :", tag if tag == "table": self.section = "End" elif self.section == "Table": if tag == "td" and self.subSection > 3: if self.currentData == "": self.playerData += "0," else: self.playerData += self.currentData + "," elif tag == "th" and self.subSection == 3: theHeader = self.currentData while self.headers.has_key(theHeader): theHeader += 'a' self.headers[theHeader] = self.index #print (theHeader + ":%d" % self.index) self.index += 1 elif tag == "tr" and self.subSection > 3: #encounted an end of player row fieldArray = self.playerData.split(',') #query for player based on name (field 1) and date (field 4) #print 'processing ' + unicode(fieldArray[1], errors="ignore") newPlayer = Player.findPlayer(unicode(fieldArray[1], errors="ignore"), fieldArray[4]) if newPlayer is None: newPlayer = Player() newPlayer.initFromString(self.playerData, self.headers, self.leagueConsts) newPlayer.save() self.playerData = "" self.currentData = ""
def initFromString(self, year, dataString, headerDict): fieldArray = dataString.split(',') self.Position = fieldArray[headerDict['POS']] self.Name = unicode(fieldArray[headerDict['Name']], errors="ignore") self.DOB = fieldArray[headerDict['DOB']] player = Player.findPlayer(self.Name, self.DOB) if not player: print "No Player found for " + self.Name + self.DOB self.PlayerId = player self.Year = year self.AB = int(fieldArray[headerDict['AB']]) hits = int(fieldArray[headerDict['H']]) doubles = int(fieldArray[headerDict['2B']]) triples = int(fieldArray[headerDict['3B']]) homeRuns = int(fieldArray[headerDict['HR']]) walks = int(fieldArray[headerDict['BB']]) self.IP = float(fieldArray[headerDict['IP']]) strikeouts = int(fieldArray[headerDict['K']]) homeRunsAgainst = int(fieldArray[headerDict['HRa']]) walksAgainst = int(fieldArray[headerDict['BBa']]) sb = int(fieldArray[headerDict['SB']]) cs = int(fieldArray[headerDict['CS']]) self.UZR = float(fieldArray[headerDict['ZR']]) singles = hits - doubles - triples - homeRuns self.wOBA = BaseballFunctions.rawWOBA(self.AB, walks, singles, doubles, triples, homeRuns) self.wRAA = BaseballFunctions.rawWRAA(self.AB, self.wOBA, walks) self.FIP = BaseballFunctions.rawFIP(self.IP, strikeouts, homeRunsAgainst, walksAgainst) self.wSB = BaseballFunctions.rawWSB(sb, cs) self.bWAR = (self.wRAA + self.wSB + self.UZR)/10 self.pWAR = BaseballFunctions.rawPWAR(self.IP, self.FIP) class Meta: order_by = ('Name',)