<commit_before>from cached_property import cached_property

from jfr_playoff.db import PlayoffDB
from jfr_playoff.dto import Phase
from jfr_playoff.matchinfo import MatchInfo
from jfr_playoff.tournamentinfo import TournamentInfo


class PlayoffData(object):
    def __init__(self, settings):
        self.database = PlayoffDB(settings.get('database')) if settings.has_section('database') else None
        if self.database is None:
            print PlayoffDB.DATABASE_NOT_CONFIGURED_WARNING
        self.team_settings = settings.get('teams')
        self.phases = settings.get('phases')
        self.swiss = []
        if settings.has_section('swiss'):
            self.swiss = settings.get('swiss')
        self.grid = []
        self.match_info = {}
        self.leaderboard = []

    @cached_property
    def teams(self):
        if isinstance(self.team_settings, list):
            return self.team_settings
        tournament_info = TournamentInfo(self.team_settings, self.database)
        return tournament_info.get_tournament_results()

    def generate_phases(self):
        self.grid = []
        for phase in self.phases:
            phase_count = len(phase['matches'])
            if 'dummies' in phase:
                phase_count += len(phase['dummies'])
            phase_object = Phase()
            phase_object.title = phase['title']
            phase_object.link = phase['link'] if 'link' in phase else None
            phase_object.matches = [None] * phase_count
            phase_pos = 0
            for match in phase['matches']:
                if 'dummies' in phase:
                    while phase_pos in phase['dummies']:
                        phase_pos += 1
                phase_object.matches[phase_pos] = match['id']
                phase_pos += 1
            self.grid.append(phase_object)
        return self.grid

    def fill_match_info(self):
        self.match_info = {}
        for phase in self.phases:
            for match in phase['matches']:
                match_info = MatchInfo(match, self.teams, self.database)
                if 'link' in phase:
                    match_info.set_phase_link(phase['link'])
                self.match_info[match['id']] = match_info.get_info()
                if self.match_info[match['id']].running > 0:
                    for phase_obj in self.grid:
                        if match['id'] in phase_obj.matches:
                            phase_obj.running = True
        return self.match_info

    def get_swiss_link(self, event):
        event_info = TournamentInfo(event, self.database)
        swiss_link = event_info.get_results_link()
        if ('relative_path' in event) and (
                event['relative_path'] is not None):
            swiss_link = '%s/%s' % (event['relative_path'], swiss_link)
        return swiss_link

    def prefill_leaderboard(self, teams):
        self.leaderboard = [None] * len(teams)
        for team in teams:
            if len(team) > 3:
                self.leaderboard[team[3]-1] = team[0]
        self.fill_swiss_leaderboard(self.swiss, teams)
        return self.leaderboard

    def fill_swiss_leaderboard(self, swiss, teams):
        teams = [team[0] for team in teams]
        if self.database is None:
            return
        for event in swiss:
            event['ties'] = teams
            event_info = TournamentInfo(event, self.database)
            if event_info.is_finished():
                swiss_position = (
                    event['swiss_position']
                    if 'swiss_position' in event
                    else 1
                )
                position_limit = (
                    event['position_to']
                    if 'position_to' in event
                    else 9999
                )
                place = 1
                swiss_results = event_info.get_tournament_results()
                for team in swiss_results:
                    if place >= swiss_position:
                        target_position = event['position'] \
                                          + place - swiss_position
                        if target_position <= min(
                                position_limit, len(self.leaderboard)):
                            self.leaderboard[
                                target_position - 1] = team[0]
                    place += 1

    def fill_leaderboard(self):
        self.prefill_leaderboard(self.teams)<commit_msg>Allowing swiss results fetch when database is not configured<commit_after>from cached_property import cached_property

from jfr_playoff.db import PlayoffDB
from jfr_playoff.dto import Phase
from jfr_playoff.matchinfo import MatchInfo
from jfr_playoff.tournamentinfo import TournamentInfo


class PlayoffData(object):
    def __init__(self, settings):
        self.database = PlayoffDB(settings.get('database')) if settings.has_section('database') else None
        if self.database is None:
            print PlayoffDB.DATABASE_NOT_CONFIGURED_WARNING
        self.team_settings = settings.get('teams')
        self.phases = settings.get('phases')
        self.swiss = []
        if settings.has_section('swiss'):
            self.swiss = settings.get('swiss')
        self.grid = []
        self.match_info = {}
        self.leaderboard = []

    @cached_property
    def teams(self):
        if isinstance(self.team_settings, list):
            return self.team_settings
        tournament_info = TournamentInfo(self.team_settings, self.database)
        return tournament_info.get_tournament_results()

    def generate_phases(self):
        self.grid = []
        for phase in self.phases:
            phase_count = len(phase['matches'])
            if 'dummies' in phase:
                phase_count += len(phase['dummies'])
            phase_object = Phase()
            phase_object.title = phase['title']
            phase_object.link = phase['link'] if 'link' in phase else None
            phase_object.matches = [None] * phase_count
            phase_pos = 0
            for match in phase['matches']:
                if 'dummies' in phase:
                    while phase_pos in phase['dummies']:
                        phase_pos += 1
                phase_object.matches[phase_pos] = match['id']
                phase_pos += 1
            self.grid.append(phase_object)
        return self.grid

    def fill_match_info(self):
        self.match_info = {}
        for phase in self.phases:
            for match in phase['matches']:
                match_info = MatchInfo(match, self.teams, self.database)
                if 'link' in phase:
                    match_info.set_phase_link(phase['link'])
                self.match_info[match['id']] = match_info.get_info()
                if self.match_info[match['id']].running > 0:
                    for phase_obj in self.grid:
                        if match['id'] in phase_obj.matches:
                            phase_obj.running = True
        return self.match_info

    def get_swiss_link(self, event):
        event_info = TournamentInfo(event, self.database)
        swiss_link = event_info.get_results_link()
        if ('relative_path' in event) and (
                event['relative_path'] is not None):
            swiss_link = '%s/%s' % (event['relative_path'], swiss_link)
        return swiss_link

    def prefill_leaderboard(self, teams):
        self.leaderboard = [None] * len(teams)
        for team in teams:
            if len(team) > 3:
                self.leaderboard[team[3]-1] = team[0]
        self.fill_swiss_leaderboard(self.swiss, teams)
        return self.leaderboard

    def fill_swiss_leaderboard(self, swiss, teams):
        teams = [team[0] for team in teams]
        for event in swiss:
            event['ties'] = teams
            event_info = TournamentInfo(event, self.database)
            if event_info.is_finished():
                swiss_position = (
                    event['swiss_position']
                    if 'swiss_position' in event
                    else 1
                )
                position_limit = (
                    event['position_to']
                    if 'position_to' in event
                    else 9999
                )
                place = 1
                swiss_results = event_info.get_tournament_results()
                for team in swiss_results:
                    if place >= swiss_position:
                        target_position = event['position'] \
                                          + place - swiss_position
                        if target_position <= min(
                                position_limit, len(self.leaderboard)):
                            self.leaderboard[
                                target_position - 1] = team[0]
                    place += 1

    def fill_leaderboard(self):
        self.prefill_leaderboard(self.teams)
{'fraction_non_alphanumeric': 0.08824193184382757, 'fraction_numerical': 0.004062288422477996, 'mean_word_length': 1.6898330804248862, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '467461', 'n_tokens_mistral': 2461, 'n_tokens_neox': 2317, 'n_words': 532}