def test_get_final_table_for_7_teams(self):
     gameday = DBSetup().g72_finished()
     expected_table = get_df_from_json('ts_final_table_7_teams')
     gmw = GamedayModelWrapper(gameday.pk)
     print(
         json.dumps(json.loads(
             gmw.get_final_table().to_json(orient='table')),
                    indent=2))
     assert_frame_equal(gmw.get_final_table(),
                        expected_table,
                        check_dtype=False)
    def get_standing(self, season=None, league=None):
        if season is None:
            season = Season.objects.last()
        all_gamedays = Gameday.objects.filter(season__name=season)
        all_standings = pd.DataFrame()
        for gameday in all_gamedays:
            try:
                gmw = GamedayModelWrapper(gameday.pk)
                all_standings = all_standings.append(gmw.get_final_table(),
                                                     ignore_index=True)
            except Gameinfo.DoesNotExist:
                pass
        if all_standings.empty:
            return all_standings

        table_standings = self._calculate_standings(all_standings)
        if league is not None:
            season_league_team_mapping = pd.DataFrame(
                SeasonLeagueTeam.objects.filter(
                    season__name__iexact=season,
                    league__name__iexact=league).values(TEAM_NAME))
            if season_league_team_mapping.empty:
                return season_league_team_mapping
            table_standings = pd.merge(table_standings,
                                       season_league_team_mapping,
                                       how='right')
        print(
            json.dumps(json.loads(table_standings.to_json(orient='table')),
                       indent=2))
        return table_standings
 def test_get_final_table_for_main_round(self):
     gameday = DBSetup().create_main_round_gameday(status='beendet',
                                                   number_teams=4)
     expected_table = get_df_from_json('ts_final_table_4_teams')
     gmw = GamedayModelWrapper(gameday.pk)
     assert_frame_equal(gmw.get_final_table(),
                        expected_table,
                        check_dtype=False)
 def test_get_final_table(self):
     gameday = DBSetup().g62_finalround(sf='beendet',
                                        p5='beendet',
                                        p3='beendet',
                                        p1='beendet')
     expected_final_table = get_df_from_json('ts_final_table_6_teams')
     gmw = GamedayModelWrapper(gameday.pk)
     assert gmw.get_final_table().to_json() == expected_final_table.to_json(
     )
示例#5
0
    def test_update_9_teams_3_fields(self):
        gameday = DBSetup().create_empty_gameday()
        gameday.format = "9_3"
        gameday.save()
        group_A = DBSetup().create_teams('A', 3)
        group_B = DBSetup().create_teams('B', 3)
        group_C = DBSetup().create_teams('C', 3)
        groups = [group_A, group_B, group_C]
        DBSetup().create_playoff_placeholder_teams()
        sc = ScheduleCreator(gameday=Gameday.objects.get(pk=gameday.pk),
                             schedule=Schedule(gameday.format, groups))
        sc.create()

        qualify_games = Gameinfo.objects.filter(stage='Vorrunde')
        for game in qualify_games:
            update_gameresults(game)
        Gameinfo.objects.filter(stage='Vorrunde').update(status='beendet')

        su = ScheduleUpdate(gameday.pk, gameday.format)
        su.update()
        check_if_first_standing('PO').is_updated_as_expected_with(
            'B2', 'C2', 'C3')
        check_if_first_standing('P7').is_updated_as_expected_with(
            'A1', 'B1', 'B3')

        update_gameresults_by_standing_and_finish_game_for('PO')
        update_gameresults_and_finish_first_game_for_P7()
        su.update()
        check_if_first_standing('HF').is_updated_as_expected_with(
            'C2', 'C3', 'B2')
        check_if_first_standing('P7').is_updated_as_expected_with(
            'B1', 'C1', 'A2')
        check_if_first_standing('P5').is_updated_as_expected_with(
            'A2', 'B2', 'B1')

        update_gameresults_by_standing_and_finish_game_for('HF')
        update_gameresults_and_finish_first_game_for_P7()
        su.update()
        check_if_first_standing('P7').is_updated_as_expected_with(
            'C1', 'A1', 'C2')
        check_if_first_standing('P1').is_updated_as_expected_with(
            'B3', 'C3', 'A1')
        check_if_first_standing('P3').is_updated_as_expected_with(
            'A3', 'C2', 'C1')

        update_gameresults_by_standing_and_finish_game_for('P5')
        update_gameresults_and_finish_first_game_for_P7()
        update_gameresults_by_standing_and_finish_game_for('P3')
        update_gameresults_by_standing_and_finish_game_for('P1')

        gmw = GamedayModelWrapper(gameday.pk)
        DataFrameAssertion.expect(
            gmw.get_final_table()).to_equal_json('final_table_9_teams.json')
        DataFrameAssertion.expect(
            gmw.get_schedule()).to_equal_json('schedule_9_teams_3_fields.json')
示例#6
0
class GamedayService:
    @classmethod
    def create(cls, gameday_pk):
        try:
            return cls(gameday_pk)
        except Gameinfo.DoesNotExist:
            return EmptyGamedayService

    def __init__(self, pk):
        self.gmw = GamedayModelWrapper(pk)

    def get_schedule(self):
        schedule = self.gmw.get_schedule()
        columns = [SCHEDULED, FIELD, HOME, POINTS_HOME, POINTS_AWAY, AWAY, OFFICIALS_NAME, STANDING, STAGE, STATUS]
        schedule = schedule[columns]
        schedule[OFFICIALS_NAME] = schedule[OFFICIALS_NAME].apply('<i>{}</i>'.format)
        schedule[SCHEDULED] = pd.to_datetime(schedule[SCHEDULED], format='%H:%M:%S').dt.strftime('%H:%M')

        schedule = schedule.rename(columns=SCHEDULE_TABLE_HEADERS)
        return schedule

    def get_qualify_table(self):
        qualify_table = self.gmw.get_qualify_table()
        if qualify_table is '':
            return EmptyQualifyTable
        qualify_table = qualify_table[[STANDING, TEAM_NAME, POINTS, PF, PA, DIFF]]
        qualify_table = qualify_table.rename(columns=TABLE_HEADERS)
        return qualify_table

    def get_final_table(self):
        final_table = self.gmw.get_final_table()
        if final_table.empty:
            return final_table
        final_table = final_table[[DFFL, TEAM_NAME, POINTS, PF, PA, DIFF]]
        final_table = final_table.rename(columns=TABLE_HEADERS)
        return final_table

    def get_games_to_whistle(self, team):
        if team == '*':
            team = ''
        games_to_whistle = self.gmw.get_games_to_whistle(team)
        columns = [SCHEDULED, FIELD, OFFICIALS_NAME, STAGE, STANDING, HOME, POINTS_HOME, POINTS_AWAY, AWAY,
                   STATUS, ID_HOME, ID_AWAY, 'id']
        games_to_whistle = games_to_whistle[columns]
        games_to_whistle = games_to_whistle.rename(columns={OFFICIALS_NAME: OFFICIALS})
        return games_to_whistle
 def test_empty_get_final_table(self):
     gameday = DBSetup().g62_qualify_finished()
     gmw = GamedayModelWrapper(gameday.pk)
     assert gmw.get_final_table().empty