def test_select(self): objs = TestTeam.db.select(Team()) self.assertEqual(len(objs), 2) self.assertEqual(objs[0].getName(), 'team name TD') self.assertEqual(objs[0].getLeague(), 'league mnemonic TD') self.assertEqual(objs[0].getSeason(), 'team season TD') self.assertEqual(objs[1].getName(), 'team name TD2') self.assertEqual(objs[1].getLeague(), 'league mnemonic TD2') self.assertEqual(objs[1].getSeason(), 'team season TD2') objs = TestTeam.db.select(Team('team name TD')) self.assertEqual(len(objs), 1) self.assertEqual(objs[0].getName(), 'team name TD') self.assertEqual(objs[0].getLeague(), 'league mnemonic TD') self.assertEqual(objs[0].getSeason(), 'team season TD') objs = TestTeam.db.select( Team.createAdhoc({ 'league': 'league mnemonic TD', 'season': 'team season TD' })) self.assertEqual(len(objs), 1) self.assertEqual(objs[0].getName(), 'team name TD') self.assertEqual(objs[0].getLeague(), 'league mnemonic TD') self.assertEqual(objs[0].getSeason(), 'team season TD')
def test_keys_adhoc(self): l = Team.createAdhoc(None) self.assertEqual(l.getTable(), 'team') self.assertTrue(l._keys.getFields() is None)
def genLeagueTable(log:Logger, league:str, season:str, date:str=None, \ show:bool=False): ''' Generate a league table for the subject league and season :param log: a logging object :param league: the subject league :param season: the subject season :param date: the date string up to which to generate the league YYYY-MM-DD :param show: displays any tables as HTML when True ''' log.info('Generating league table for ' \ 'league <{}> and season <{}>'.format(league, season)) config = getSweeperConfig() dbName = config['dbName'] log.debug('Opening database: {}'.format(dbName)) with Database(dbName, SQLite3Impl()) as db, db.transaction() as t: try: league = db.select(League(league))[0] except: log.critical('No league matching the provided mnemonic exists') sys.exit(3) try: season = db.select(Season(season))[0] except: log.critical('No season matching the provided string exists') sys.exit(4) ubnd = date if date is not None else season.getU_Bnd_Date() keys = {'league' : league.getMnemonic(), '!result' : '', '>date' : \ season.getL_Bnd_Date(), '<date' : ubnd} matches = [m for m in db.select(Match.createAdhoc(keys))] log.info('{} {} matches found'.format(len(matches), \ league.getMnemonic())) keys = {'league' : league.getMnemonic(), 'season' : season.getName()} teams = db.select(Team.createAdhoc(keys)) table = dict([(t.getName(), Form()) for t in teams]) for m in matches: table[m.getHome_Team()] = h = table.get(m.getHome_Team(), Form()) table[m.getAway_Team()] = a = table.get(m.getAway_Team(), Form()) h.played += 1 a.played += 1 h.glfor += m.getHome_Goals() h.glagn += m.getAway_Goals() h.gldif = h.glfor - h.glagn a.glfor += m.getAway_Goals() a.glagn += m.getHome_Goals() a.gldif = a.glfor - a.glagn if m.getResult() == 'H': h.won += 1 h.points += 3 a.lost += 1 elif m.getResult() == 'D': h.drawn += 1 h.points += 1 a.drawn += 1 a.points += 1 elif m.getResult() == 'A': a.won += 1 a.points += 3 h.lost += 1 else: raise Exception("Empty result, wasn't expecting that") headers = ['Team', 'P', 'W', 'D', 'L', 'F', 'A', 'GD', 'PTS'] schema = ['{:<20}', '{:>3}', '{:>3}', '{:>3}', '{:>3}', '{:>3}', \ '{:>3}', '{:>4}', '{:>4}'] t = Table(headers=headers, schema=schema, title='{} Table'.format(\ league.getDesc())) t.append([[row[0], *row[1].asList()] for row in \ sorted(sorted(table.items(), key=itemgetter(0)), \ key=lambda x : (x[1].points, x[1].gldif, x[1].glfor), \ reverse=True)]) log.info(t) if show: t.asHTML(show) return t