Example #1
0
    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
Example #3
0
 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()
Example #6
0
 def completed_games(self):
     return self.game_set \
         .exclude(get_completed_game_excludes_query()) \
         .order_by("end_time").all()
Example #7
0
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()