def get_queryset(self): self.profile = get_object_or_404(Profile, pk=self.kwargs['pk']) self.cells = self.profile.user.cell_set.all() characters = self.profile.user.character_set.filter(is_deleted=False) if self.profile.user != self.request.user: characters = characters.filter(private=False) characters = characters.order_by('-edit_date').all() self.scenarios = [] if self.request.user.is_authenticated: self.scenarios = self.request.user.scenario_discovery_set\ .filter(relevant_scenario__creator=self.profile.user).all() self.living_characters = [character for character in characters if not character.is_dead()] self.deceased_characters = [character for character in characters if character.is_dead()] self.completed_game_invites = self.profile.completed_game_invites() self.completed_games = self.profile.get_games_where_player_gmed() played_games_by_date = [(x.relevant_game.end_time, "play", x) for x in self.completed_game_invites] gmed_games_by_date = [(x.end_time, "gm", x) for x in self.completed_games] events_by_date = list(merge(played_games_by_date, gmed_games_by_date)) timeline = defaultdict(list) for event in events_by_date: timeline[event[0].strftime("%d %b %Y")].append((event[1], event[2])) self.game_timeline = dict(timeline) self.games_gmed = Game.objects.filter(gm=self.profile.user).exclude(get_completed_game_excludes_query()).all() self.attended_games = self.profile.user.game_set.exclude(get_completed_game_excludes_query()).all() return Profile.objects
def get_queryset(self): self.profile = get_object_or_404(Profile, pk=self.kwargs['pk']) self.cells = self.profile.user.cell_set.filter( cellmembership__is_banned=False).all() self.completed_game_invites = self.profile.completed_game_invites() self.gmed_games = self.profile.get_games_where_player_gmed() self.gmed_moves = self.profile.get_moves_where_player_gmed() played_games_by_date = [(x.relevant_game.end_time, "play", x) for x in self.completed_game_invites] gmed_games_by_date = [(x.end_time, "gm", x) for x in self.gmed_games] gmed_moves_by_date = [(x.created_date, "move", x) for x in self.gmed_moves] events_by_date = list( merge(played_games_by_date, gmed_games_by_date, gmed_moves_by_date, reverse=True)) timeline = defaultdict(list) for event in events_by_date: timeline[event[0].strftime("%d %b %Y")].append( (event[1], event[2])) self.game_timeline = dict(timeline) self.attended_games = self.profile.user.game_set.exclude( get_completed_game_excludes_query()).all() return Profile.objects
def update_safety_stats(self): completed_games = self.game_set.exclude( get_completed_game_excludes_query()).all() num_victory = 0 num_died = 0 num_loss = 0 for game in completed_games: num_died = num_died + game.number_deaths() num_victory = num_victory + game.number_victories() num_loss = num_loss + game.number_losses() self.game_victory = num_victory self.game_loss = num_loss self.game_death = num_died self.save()
def get_queryset(self): self.profile = get_object_or_404(Profile, pk=self.kwargs['pk']) self.cells = self.profile.user.cell_set.filter( cellmembership__is_banned=False).all() characters = self.profile.user.character_set.filter(is_deleted=False) if self.profile.user != self.request.user: characters = characters.filter(private=False) characters = characters.order_by('-edit_date').all() self.scenarios = [] if self.request.user.is_authenticated: self.scenarios = self.request.user.scenario_discovery_set\ .filter(relevant_scenario__creator=self.profile.user).all() self.living_characters = [ character for character in characters if not character.is_dead() ] self.deceased_characters = [ character for character in characters if character.is_dead() ] self.attended_games = self.profile.user.game_set.exclude( get_completed_game_excludes_query()).all() return Profile.objects
def get_games_where_player_gmed(self): return Game.objects.filter(gm=self.user).exclude(get_completed_game_excludes_query()) \ .order_by("-end_time") \ .all()
def completed_games(self): return self.game_set \ .exclude(get_completed_game_excludes_query()) \ .order_by("end_time").all()
def migrate_update_stats(apps, schema_editor): Profile = apps.get_model('profiles', 'Profile') Game = apps.get_model('games', 'Game') for profile in Profile.objects.all(): gm_games = Game.objects.filter(gm=profile.user).exclude(get_completed_game_excludes_query()) \ .order_by("-end_time") \ .all() num_gm_games = gm_games.count() num_gm_kills = 0 num_golden_ratio_games = 0 num_gm_victories = 0 num_gm_losses = 0 cells_gmed = set() contractors_gmed = set() players_gmed = set() for game in gm_games: num_gm_kills = num_gm_kills + number_deaths(game) num_gm_victories = num_gm_victories + number_victories(game) num_gm_losses = num_gm_losses + number_losses(game) if achieves_golden_ratio(game): num_golden_ratio_games = num_golden_ratio_games + 1 if game.cell: cells_gmed.add(game.cell.id) for attendance in game.game_attendance_set.all(): if attendance.attending_character: contractors_gmed.add(attendance.attending_character.id) players_gmed.add(attendance.attending_character.player.id) profile.num_gmed_players = len(players_gmed) profile.num_gmed_contractors = len(contractors_gmed) profile.num_gmed_cells = len(cells_gmed) profile.num_games_gmed = num_gm_games profile.num_gm_losses = num_gm_losses profile.num_gm_kills = num_gm_kills profile.num_gm_victories = num_gm_victories profile.num_golden_ratios = num_golden_ratio_games completed_game_invites = profile.user.game_invite_set \ .exclude(get_completed_game_invite_excludes_query()) \ .exclude(is_declined=True) \ .order_by("-relevant_game__end_time") \ .all() profile.num_player_games = completed_game_invites.count() invites_with_death = [ invite for invite in completed_game_invites if invite.attendance and invite.attendance.attending_character and at_least_one_death(invite.relevant_game) ] profile.num_deadly_player_games = len(invites_with_death) played_character_ids = set() num_deaths = 0 num_victories = 0 num_losses = 0 num_played_ringers = 0 for invite in completed_game_invites: if invite.attendance: if invite.attendance.attending_character: played_character_ids.add( invite.attendance.attending_character.id) else: num_played_ringers = num_played_ringers + 1 if invite.attendance.outcome == WIN: num_victories = num_victories + 1 elif invite.attendance.outcome == LOSS: num_losses = num_losses + 1 elif invite.attendance.outcome == DEATH: num_deaths = num_deaths + 1 profile.num_contractors_played = len(played_character_ids) profile.num_player_deaths = num_deaths profile.num_player_victories = num_victories profile.num_player_losses = num_losses profile.num_played_ringers = num_played_ringers profile.num_player_survivals = profile.num_deadly_player_games - num_deaths profile.player_prefix = _player_prefix_from_counts( profile.num_player_games, profile.num_deadly_player_games, profile.num_player_deaths) profile.player_suffix = _player_suffix_from_num_games( profile.num_player_games) profile.gm_prefix = _gm_prefix_from_stats(profile.num_games_gmed, profile.num_gm_kills) profile.gm_suffix = _gm_suffix_from_num_gm_games( profile.num_games_gmed) profile.save()