コード例 #1
0
def select_for_vs(p1, p2, labels):
    player_1 = Table('fg_player').select_one('url = %s', (p1, ))
    player_2 = Table('fg_player').select_one('url = %s', (p2, ))
    label_list, tournaments = CustomQueries.select_tournamets_with_labels(
        labels)
    challo_participant = Table('challo_participant').select_in(
        'player_id', [player_1['id'], player_2['id']])
    challo_match = (
        CustomQueries.select_matches_by_player(player_1['id'], tournaments) +
        CustomQueries.select_matches_by_player(player_2['id'], tournaments))

    ps = [(p['tournament_id'], p['id']) for p in challo_participant]
    cut_match = [
        m for m in challo_match
        if (m['tournament_id'],
            m['player1_id']) in ps and (m['tournament_id'],
                                        m['player2_id']) in ps
    ]
    return player_1['id'], player_2['id'], {
        'base_url': 'vs/{0}/{1}'.format(p1, p2),
        'fg_player': [player_1, player_2],
        'challo_participant': challo_participant,
        'challo_match': cut_match,
        'fg_tournament': tournaments,
        'challo_group': Table('challo_group').select_all(),
        'labels': label_list,
    }
コード例 #2
0
def select_for_ratings(player_and_labels=None, labels=None):
    if player_and_labels:
        split = player_and_labels.split(
            '/labels/') if player_and_labels is not None else ['']
        players, labels = split[0], (split[1] if len(split) > 1 else None)
        base_url = 'rate/' + players
    else:
        players = ''
        base_url = 'ratings'

    label_list, tournaments = CustomQueries.select_tournamets_with_labels(
        labels)
    return players.split('/'), {
        'base_url':
        base_url,
        'fg_tournament':
        tournaments,
        'fg_player':
        Table('fg_player').select_all(),
        'challo_match':
        Table('challo_match').select_in('tournament_id',
                                        [t['id'] for t in tournaments]),
        'challo_participant':
        Table('challo_participant').select_in('tournament_id',
                                              [t['id'] for t in tournaments]),
        'labels':
        label_list,
    }
コード例 #3
0
def select_for_tournaments(labels):
    label_list, tournaments = CustomQueries.select_tournamets_with_labels(
        labels)
    participants = Table('challo_participant').select('final_rank = %s', (1, ))
    players = Table('fg_player').select_in(
        'id', [p['player_id'] for p in participants])
    return {
        'base_url': 'tournaments',
        'fg_tournament': tournaments,
        'challo_participant': participants,
        'fg_player': players,
        'labels': label_list,
    }
コード例 #4
0
 def __init__(self, tournament):
     self.ft = Table('fg_tournament')
     self.cm = Table('challo_match')
     self.cp = Table('challo_participant')
     self.cg = Table('challo_group')
     self.tournament = tournament
     self.json_text = self._get_json()
コード例 #5
0
def select_for_vs_table(standing_url, labels):
    label_list, tournaments = CustomQueries.select_tournamets_with_labels(
        labels)
    standing = Table('fg_standing').select_one('url = %s', (standing_url, ))
    urls = [s.strip() for s in standing['participants'].split(',')]
    return standing, {
        'base_url': 'standing/{0}'.format(standing_url),
        'fg_tournament': tournaments,
        'fg_player': Table('fg_player').select_in('url', urls),
        'challo_match':
        CustomQueries.select_matches_by_players(urls, tournaments),
        'challo_participant':
        CustomQueries.select_participants_by_players(urls),
        'challo_group': Table('challo_group').select_all(),
        'labels': label_list,
    }
コード例 #6
0
def select_for_players(labels):
    label_list, tournaments = CustomQueries.select_tournamets_with_labels(
        labels)
    return {
        'base_url':
        'players',
        'challo_participant':
        Table('challo_participant').select_in('tournament_id',
                                              [t['id'] for t in tournaments]),
        'fg_player':
        Table('fg_player').select_all(),
        'challo_match':
        Table('challo_match').select_in('tournament_id',
                                        [t['id'] for t in tournaments]),
        'labels':
        label_list,
    }
コード例 #7
0
def select_by_player_url(player_url, labels):
    fg_player = Table('fg_player').select_one('url = %s', (player_url, ))
    label_list, tournaments = CustomQueries.select_tournamets_with_labels(
        labels)
    challo_match = CustomQueries.select_matches_by_player(
        fg_player['id'], tournaments)
    challo_participant = Table('challo_participant').select_in(
        'tournament_id', [t['id'] for t in tournaments])
    return fg_player['id'], {
        'base_url': 'player/{0}'.format(player_url),
        'fg_player': Table('fg_player').select_all(),
        'challo_participant': challo_participant,
        'challo_match': challo_match,
        'fg_tournament': tournaments,
        'challo_group': Table('challo_group').select_all(),
        'labels': label_list,
    }
コード例 #8
0
def select_by_tournament_id(challo_url):
    fg_tournament = Table('fg_tournament').select_one('challo_url = %s',
                                                      (challo_url, ))
    tournament_id = fg_tournament['id']
    return tournament_id, {
        'base_url':
        'tournament/{0}'.format(challo_url),
        'fg_tournament': [fg_tournament],
        'fg_player':
        Table('fg_player').select_all(),
        'challo_participant':
        Table('challo_participant').select('tournament_id = %s',
                                           (tournament_id, )),
        'challo_match':
        Table('challo_match').select('tournament_id = %s', (tournament_id, )),
        'challo_group':
        Table('challo_group').select('tournament_id = %s', (tournament_id, ))
    }
コード例 #9
0
ファイル: create_rel.py プロジェクト: K2Da/fgbuff
from database.common import Table
from model.Pool import Pool

pool = Pool.init_for_create_rel()
cp = Table('challo_participant')
cp.update_all([('player_id', None)])

i = 0
for participant in pool.participants.values():
    found = []
    for player in pool.players.values():
        if player.maybe(participant.name):
            cp.update_with_tournament_id(participant.tournament_id, participant.id, [('player_id', player.id)])
            found.append(player.name)
            i += 1

    if len(found) > 1:
        print('duplicated candidate for {0} : {1} = {2}'.format(participant.tournament.name, participant.name, ','.join(found)))

print("participants {0}".format(i))

コード例 #10
0
class SmashLoader:
    api_url = 'https://api.smash.gg/phase_group/{0}?expand%5B%5D=sets&expand%5B%5D=standings&expand%5B%5D=entrants'

    def __init__(self, tournament):
        self.ft = Table('fg_tournament')
        self.cm = Table('challo_match')
        self.cp = Table('challo_participant')
        self.cg = Table('challo_group')
        self.tournament = tournament
        self.json_text = self._get_json()

    def _get_json(self):
        url = self.api_url.format(self.tournament['source_key'])
        with urllib.request.urlopen(url) as res:
            return res.read().decode('utf-8')

    def import_data(self):
        obj = json.loads(self.json_text)
        self.cm.delete('tournament_id = %s', (self.tournament['id'], ))
        self.cp.delete('tournament_id = %s', (self.tournament['id'], ))
        self.cg.delete('tournament_id = %s', (self.tournament['id'], ))

        groups = {}
        group_id = 0
        for s in obj['entities']['sets']:
            r = s['round']
            if group_id not in groups:
                groups[group_id] = (r, r)

            if r < groups[group_id][0]:
                groups[group_id] = (r, groups[group_id][1])

            if r > groups[group_id][1]:
                groups[group_id] = (groups[group_id][0], r)

            if s['entrant1Id'] and s['entrant2Id']:
                self.cm.insert_with_array([
                    s['id'], self.tournament['id'], s['round'],
                    s['entrant1Id'], s['entrant2Id'], s['winnerId'],
                    self.create_score(s), 0
                ])

        for p in obj['entities']['entrants']:
            self.cp.insert_with_array([
                p['id'], self.tournament['id'], p['name'], p['finalPlacement']
            ])

        i = 65
        for group_id, rounds in groups.items():
            if group_id == 0:
                name = 'Main Tournament'
            else:
                name = 'Group {0}'.format(chr(i))
                i += 1
            self.cg.insert_with_array([
                group_id if group_id is not None else 0, self.tournament['id'],
                rounds[0], rounds[1], name, 'DE'
            ])

        self.ft.update(self.tournament['id'], [('refresh', False)])

    @staticmethod
    def create_score(s):
        if s['entrant1Score'] is None or s['entrant2Score'] is None:
            return '-'

        if s['entrant1Score'] < 0 or s['entrant2Score'] < 0:
            return '-'

        return str(s['entrant1Score']) + '-' + str(s['entrant2Score'])
コード例 #11
0
def select_for_create_rel():
    return {
        'fg_player': Table('fg_player').select_all(),
        'fg_tournament': Table('fg_tournament').select_all(),
        'challo_participant': Table('challo_participant').select_all()
    }
コード例 #12
0
def update_tournament(data):
    tournament = data['fg_tournament'][0]
    p = Table('challo_participant')
    m = Table('challo_match')
    g = Table('challo_group')
    p.delete('tournament_id = %s', (tournament['id'], ))
    m.delete('tournament_id = %s', (tournament['id'], ))
    g.delete('tournament_id = %s', (tournament['id'], ))
    for r in data['challo_participant']:
        p.insert_with_dictionary(r)

    for r in data['challo_match']:
        m.insert_with_dictionary(r)

    for r in data['challo_group']:
        g.insert_with_dictionary(r)
コード例 #13
0
import challonge
import config
from command.smash import SmashLoader
from database.common import Table

challonge.set_credentials(config.challonge_id, config.challonge_api_key)

ft = Table('fg_tournament')
for row in ft.select('refresh = %s', (True, )):
    if row['source'] == 'smash':
        l = SmashLoader(row)
        l.import_data()
    else:
        t = challonge.tournaments.show(row['challo_url'])

        cp = Table('challo_participant')
        cp.delete('tournament_id = %s', (row['id'], ))
        participants = []
        for p in challonge.participants.index(t['id']):
            participants.append(p['id'])
            cp.insert_with_array(
                [p['id'], row['id'], p['name'], p['final-rank']])

        cm = Table('challo_match')
        cm.delete('tournament_id = %s', (row['id'], ))
        groups = {}
        matches = challonge.matches.index(t['id'])

        ids = []
        for m in matches:
            p1 = m['player1-id']