def getMatch(self, matchElement, teams, players, leagueName): answer = MatchInReport() dateTime = DateFormatter.parseDateTimeFromString( matchElement.find("date").text) answer.date = dateTime.date() answer.time = dateTime.time() answer.court = matchElement.find("pitch").text htElement = matchElement.find("homeTeam") homeTeamId = htElement.get("id") answer.homeTeamId = homeTeamId answer.homeTeamName = teams.get(homeTeamId) awayTeamId = matchElement.find("awayTeam").get("id") answer.awayTeamId = awayTeamId answer.awayTeamName = teams.get(awayTeamId) answer.leagueName = leagueName playedMatchElement = matchElement.find("playedMatch") if playedMatchElement is not None: answer.innings = self.getInningsList(playedMatchElement, teams, players) awardedMatchElement = matchElement.find("awardedMatch") if awardedMatchElement is not None: answer.award = self.getAwardedMatchDetails(awardedMatchElement, homeTeamId, awayTeamId, teams) return answer
def getAllMatchDatesWithCompletedMatches(self, rootElement, dateToExclude=None): answer = set() for l in rootElement.findall("league"): for m in l.findall("match"): if self.isComplete(m): date = DateFormatter.parseDateTimeFromString(m.find("date").text).date() if date != dateToExclude: answer.add(date) return answer
def getAllMatchDatesWithCompletedMatches(self, rootElement, dateToExclude=None): answer = set() for l in rootElement.findall("league"): for m in l.findall("match"): if self.isComplete(m): date = DateFormatter.parseDateTimeFromString( m.find("date").text).date() if date != dateToExclude: answer.add(date) return answer
def getMatch(self, matchElement, teams, league): answer = MatchInReport() datetime = DateFormatter.parseDateTimeFromString(matchElement.find("date").text) answer.date = datetime.date() answer.time = datetime.time() answer.court = matchElement.find("pitch").text answer.homeTeamId = matchElement.find("homeTeam").get("id") answer.homeTeamName = teams[answer.homeTeamId] answer.awayTeamId = matchElement.find("awayTeam").get("id") answer.awayTeamName = teams[answer.awayTeamId] if league is not None: answer.leagueId = league.get("id") answer.leagueName = league.find("name").text return answer
def getAverages(self, rootElement, leagues, teams, players, batting=False, bowling=False): answer = AveragesReport() lastCompleteMatchDate = None lastScheduledMatchDate = None incompleteMatchesByDate = {} battingAverages = None if not batting else {} bowlingAverages = None if not bowling else {} if batting or bowling: for leagueElement in rootElement.findall("league"): leagueId = leagueElement.get("id") if leagueId in leagues.keys(): for matchElement in leagueElement.findall("match"): relevant, complete = self.updateAveragesFromMatch( matchElement, teams, players, battingAverages, bowlingAverages) if relevant: date = DateFormatter.parseDateTimeFromString( matchElement.find("date").text).date() if lastScheduledMatchDate is None or lastScheduledMatchDate < date: lastScheduledMatchDate = date if complete: if lastCompleteMatchDate is None or lastCompleteMatchDate < date: lastCompleteMatchDate = date else: count = incompleteMatchesByDate.get(date, 0) incompleteMatchesByDate[date] = count + 1 answer.lastCompleteMatchDate = lastCompleteMatchDate answer.lastScheduledMatchDate = lastScheduledMatchDate answer.complete = len(incompleteMatchesByDate) == 0 if lastCompleteMatchDate is not None: toCome = 0 for d in sorted(incompleteMatchesByDate.keys()): if d > lastCompleteMatchDate: break toCome = toCome + incompleteMatchesByDate[d] answer.toCome = toCome if batting: answer.battingAverages = battingAverages.values() if bowling: answer.bowlingAverages = bowlingAverages.values() answer.leagueName = leagues.values()[0] if len(leagues) == 1 else None answer.teamName = teams.values()[0] if len(teams) == 1 else None return answer
def loadMatchInfo(self, rootElement, homeId, awayId): answer = None if homeId is not None and awayId is not None: for league in rootElement.findall("league"): teams = self.getTeams(league, homeId, awayId) if teams is not None: for match in league.findall("match"): if homeId == match.find("homeTeam").get("id") and awayId == match.find("awayTeam").get("id"): matchDate = DateFormatter.parseDateTimeFromString(match.find("date").text) court = match.find("pitch").text leagueId = league.get("id") leagueName = league.get("name").text answer = MatchInfo(matchDate, court, leagueId, leagueName, teams) break if answer is not None: break return answer
def getMatch(self, matchElement, teams, players, leagueName): answer = MatchInReport() dateTime = DateFormatter.parseDateTimeFromString(matchElement.find("date").text) answer.date = dateTime.date() answer.time = dateTime.time() answer.court = matchElement.find("pitch").text htElement = matchElement.find("homeTeam") homeTeamId = htElement.get("id") answer.homeTeamId = homeTeamId answer.homeTeamName = teams.get(homeTeamId) awayTeamId = matchElement.find("awayTeam").get("id") answer.awayTeamId = awayTeamId answer.awayTeamName = teams.get(awayTeamId) answer.leagueName = leagueName playedMatchElement = matchElement.find("playedMatch") if playedMatchElement is not None: answer.innings = self.getInningsList(playedMatchElement, teams, players) awardedMatchElement = matchElement.find("awardedMatch") if awardedMatchElement is not None: answer.award = self.getAwardedMatchDetails(awardedMatchElement, homeTeamId, awayTeamId, teams) return answer
def getAverages(self, rootElement, leagues, teams, players, batting=False, bowling=False): answer = AveragesReport() lastCompleteMatchDate = None lastScheduledMatchDate = None incompleteMatchesByDate = {} battingAverages = None if not batting else {} bowlingAverages = None if not bowling else {} if batting or bowling: for leagueElement in rootElement.findall("league"): leagueId = leagueElement.get("id") if leagueId in leagues.keys(): for matchElement in leagueElement.findall("match"): relevant, complete = self.updateAveragesFromMatch(matchElement, teams, players, battingAverages, bowlingAverages) if relevant: date = DateFormatter.parseDateTimeFromString(matchElement.find("date").text).date() if lastScheduledMatchDate is None or lastScheduledMatchDate < date: lastScheduledMatchDate = date if complete: if lastCompleteMatchDate is None or lastCompleteMatchDate < date: lastCompleteMatchDate = date else: count = incompleteMatchesByDate.get(date, 0) incompleteMatchesByDate[date] = count + 1 answer.lastCompleteMatchDate = lastCompleteMatchDate answer.lastScheduledMatchDate = lastScheduledMatchDate answer.complete = len(incompleteMatchesByDate) == 0 if lastCompleteMatchDate is not None: toCome = 0 for d in sorted(incompleteMatchesByDate.keys()): if d > lastCompleteMatchDate: break toCome = toCome + incompleteMatchesByDate[d] answer.toCome = toCome if batting: answer.battingAverages = battingAverages.values() if bowling: answer.bowlingAverages = bowlingAverages.values() answer.leagueName = leagues.values()[0] if len(leagues) == 1 else None answer.teamName = teams.values()[0] if len(teams) == 1 else None return answer
def getLeagueTable(self, leagueElement): answer = LeagueTableInReport() answer.leagueName = leagueElement.find("name").text elem = leagueElement.find("teamsPromoted") answer.promoted = 0 if elem is None else int(elem.text) elem = leagueElement.find("teamsRelegated") answer.relegated = 0 if elem is None else int(elem.text) answer.tableRows = self.createTableRows(leagueElement) lastCompleteMatchDate = None lastScheduledMatchDate = None incompleteMatchesByDate = {} for m in leagueElement.findall("match"): complete = self.updateTableRowsFromMatch(m, answer.tableRows) date = DateFormatter.parseDateTimeFromString(m.find("date").text).date() if lastScheduledMatchDate is None or lastScheduledMatchDate < date: lastScheduledMatchDate = date if complete: if lastCompleteMatchDate is None or lastCompleteMatchDate < date: lastCompleteMatchDate = date else: incompleteMatchesByDate[date] = incompleteMatchesByDate.get(date, 0) + 1 answer.lastCompleteMatchDate = lastCompleteMatchDate answer.lastScheduledMatchDate = lastScheduledMatchDate answer.complete = len(incompleteMatchesByDate) == 0 if lastCompleteMatchDate is not None: toCome = 0 for d in sorted(incompleteMatchesByDate.keys()): if d > lastCompleteMatchDate: break toCome = toCome + incompleteMatchesByDate[d] answer.toCome = toCome self.markPromotedRelegatedChampions(answer) tableNotesElement = leagueElement.find("tableNotes") tableNotesText = None if tableNotesElement is None else tableNotesElement.text if tableNotesText is not None: tableNotesText = tableNotesText.strip() answer.notes = [s.strip() for s in string.split(tableNotesText, "\n")] return answer
def testParseDateTimeFromString(self): theString = "2013-07-31.17:00" expectedResult = datetime.datetime(2013, 7, 31, 17, 0) result = DateFormatter.parseDateTimeFromString(theString) self.assertEqual(expectedResult, result)
def isOnDate(self, matchElement, date): mDate = DateFormatter.parseDateTimeFromString(matchElement.find("date").text).date() answer = mDate == date return answer
def isOnDate(self, matchElement, date): mDate = DateFormatter.parseDateTimeFromString( matchElement.find("date").text).date() answer = mDate == date return answer