Ejemplo n.º 1
0
def tree_page():
    groupid = request.args.get('id', None)
    if groupid is None:
        flash("Invalid group ID.")
        return redirect(url_for('error_page'))
    try:
        groupid = int(groupid)
    except ValueError:
        flash("Invalid group ID.")
        return redirect(url_for('error_page'))

    api = API()
    result = api.get_group_tree(groupid)
    if result == API.ERR_NO_SUCH_GAME:
        flash("No such group.")
        return redirect(url_for('error_page'))
    group_tree = result
    treeview_data = make_treeview_data(group_tree)
    _groupid, games = api.get_group_games(gameid=groupid)

    # TODO: 0.2: https://github.com/jonmiles/bootstrap-treeview
    navbar_items = default_navbar_items()
    return render_template('web/tree.html',
        description=games[0].situation.description,
        groupid=group_tree.groupid,
        treeview_data=treeview_data,
        navbar_items=navbar_items,
        is_logged_in=is_logged_in(),
        url=request.url,
        my_screenname=get_my_screenname())
Ejemplo n.º 2
0
def group_page():
    gameid = request.args.get('id', None)
    if gameid is None:
        flash("Invalid game ID.")
        return redirect(url_for('error_page'))
    try:
        gameid = int(gameid)
    except ValueError:
        flash("Invalid game ID.")
        return redirect(url_for('error_page'))

    if is_logged_in():
        userid = session['userid']
    else:
        userid = None

    api = API()
    result = api.get_group_games(gameid=gameid, userid=userid)
    if result == API.ERR_NO_SUCH_GAME:
        flash("No such game.")
        return redirect(url_for('error_page'))
    del gameid
    groupid, games = result  # pylint:disable=unpacking-non-sequence

    # We rely on all games having the same players here - and there being at
    # least one of them!
    screennames = [rgp.user.screenname for rgp in games[0].rgp_details]
    results_by_player = {screenname: 0.0 for screenname in screennames}
    for i, screenname in enumerate(screennames):
        for game in games:
            if not game.rgp_details[i].results:
                continue
            results_by_player[screenname] += game.spawn_factor *  \
                game.rgp_details[i].results['ev']
    total_results = [{'screenname': screenname,
                      'result': results_by_player[screenname]}
                     for screenname in screennames]
    total_weight = sum(game.spawn_factor
                       for game in games if game.is_analysed)

    # TODO: 2: (big work! awesome!) betting line "roll-up" and/or EV tree view

    games = sorted(games, key=game_line_key)

    navbar_items = default_navbar_items()
    return render_template('web/group.html',
        description=games[0].situation.description,
        games=games,
        screennames=[user.screenname for user in games[0].users],
        total_weight=total_weight,
        total_results=total_results,
        userid=userid,
        groupid=groupid,
        navbar_items=navbar_items,
        is_logged_in=is_logged_in(),
        is_first_action=is_what_now(),
        url=request.url,
        my_screenname=get_my_screenname())