def player_stats(request, key): player = get_object(Player, key) # Calculate the player's ranking on the fly singles_ranking = 0 doubles_ranking = 0 singles_players = Player.gql("WHERE owner = :owner AND active = True ORDER BY singles_ranking_points DESC, name", owner=request.user) for sp in singles_players: singles_ranking += 1 if sp.key == player.key: break doubles_players = Player.gql("WHERE owner = :owner AND active = True ORDER BY doubles_ranking_points DESC, name", owner=request.user) for dp in doubles_players: doubles_ranking += 1 if dp.key == player.key: break games = [] pgs = PlayerGame.gql("WHERE player = :player ORDER BY date_played DESC LIMIT 20", player=player) for pg in pgs: games.append(pg) return render_to_response(request, 'pingpong/player_stats.html', { 'player': player, 'singles_ranking': singles_ranking, 'doubles_ranking': doubles_ranking, 'games': games })
def delete_player_games(game): pgs = PlayerGame.gql("WHERE game = :game", game=game) for pg in pgs: pg.delete()
from pingpong.models import Player, Team, Game, PlayerGame num_days = 7 reduction_factor = 0.1 check_point = datetime.utcnow() # The point from which we should check back num_days to see whether the player has played any games start_point = check_point - timedelta(days=num_days) owner_key_name = '' # Set this to the key name (not the key itself) of the account owner owner = User.get_by_key_name(owner_key_name) if owner: # Find all players belonging to owner players = Player.gql("WHERE owner = :owner", owner=owner) for p in players: singles_count = 0 doubles_count = 0 # Get all the player's games in the period defined pgs = PlayerGame.gql("WHERE player = :player AND date_played > :start_point", player=p, start_point=start_point) for pg in pgs: if pg.game.team1.player1 and pg.game.team1.player2: # doubles game doubles_count += 1 else: # singles game singles_count += 1 if singles_count == 0: p.singles_ranking_points = p.singles_ranking_points - (p.singles_ranking_points * reduction_factor) p.put() print '%s has had their singles ranking points reduced to %f' % (p.name, p.singles_ranking_points) else: print '%s hasn\'t had any change made to their singles ranking points' % p.name if doubles_count == 0: p.doubles_ranking_points = p.doubles_ranking_points - (p.doubles_ranking_points * reduction_factor) p.put()