示例#1
0
    def read_player_stats(self, db_player, player=None):
        """
        Refresh a single user's profile

        :param Player db_player: a player from database
        :param Box player: data to be read
        :return: False on APIError
        """
        if player is None:
            player = self.client.get_player(db_player.tag)

        if not db_player.name:
            db_player, _ = Player.objects.get_or_create(tag=player.tag[1:], defaults={'refresh': db_player.refresh})
        db_player.name = player.name

        query_fields = {
            'player': db_player,
            'level': player.exp_level,
            'total_donations': player.total_donations,
            'highest_trophies': player.best_trophies,
            'current_trophies': player.trophies,
            'challenge_cards_won': player.challenge_cards_won,
            'tourney_cards_won': player.tournament_cards_won,
            'cards_found': len(player.cards),
            'total_games': player.battle_count,
            'arena': int(str(player.arena.id)[2:]),
            'tournament_games': player.tournament_battle_count,
            'defaults': {'timestamp': self.now}
        }
        db_player_stats, _ = PlayerStatsHistory.create_or_get(**query_fields)
        db_player_stats.favorite_card = Card.instance_from_data(player.current_favourite_card).key
        db_player_stats.win_3_crowns = player.three_crown_wins
        db_player_stats.draws = player.battle_count - player.wins - player.losses
        db_player_stats.losses = player.losses
        db_player_stats.wins = player.wins
        db_player_stats.clan_cards_collected = player.clan_cards_collected
        db_player_stats.war_day_wins = player.war_day_wins

        db_player_stats.last_refresh = self.now
        db_player_stats.save()

        # Player seasons (current & best seasons skipped)
        if player.league_statistics is not None and 'previousSeason' in player.league_statistics.keys():
            prev_season = player.league_statistics.previous_season
            db_season, _ = LeagueSeason.objects.get_or_create(
                identifier=prev_season.id,
                defaults={'timestamp': self.now}
            )

            PlayerSeason.objects.get_or_create(
                player=db_player,
                season=db_season,
                defaults={
                    'ending_rank': prev_season.rank if 'rank' in prev_season.keys() else None,
                    'highest': prev_season.best_trophies if 'bestTrophies' in prev_season.keys() else prev_season.trophies,
                    'ending': prev_season.trophies
                }
            )
        return True
示例#2
0
    def test_card_parsing(self):
        """Test the parsing of a single card"""
        data = Box(self.card, camel_killer_box=True)

        card = Card.instance_from_data(data)
        # Test required fields
        self.assertEqual(card.name, data.name)
        self.assertEqual(card.key, data.key)
        self.assertEqual(card.image, data.icon_urls.medium)
示例#3
0
def store_battle_players(db_player, team, players, save_decks=True):
    i = 0
    decks = [[], []]
    for p in players:
        if p.tag[1:] == db_player.tag:
            db_p = db_player
        else:
            db_p, created = Player.objects.get_or_create(tag=p.tag[1:], defaults={'name': p.name})
        team.add(db_p)
        if save_decks:
            for card in p.deck:
                c = Card.instance_from_data(card)
                decks[i].append(c)
        i += 1
    return decks
示例#4
0
    def read_player_cards(self, db_player, cards=None):
        """
        Read cards from a player fetched by the client
        :param Player db_player: the player we are reading
        :param list cards: the data to be read
        :return: None
        """
        if cards is None:
            cards = self.client.get_player(db_player.tag).cards
        if not cards:
            return

        for card in cards:
            db_card = Card.instance_from_data(card)
            db_pcl, created = PlayerCardLevel.create_or_get(player=db_player, card=db_card)
            if db_pcl.count != card.count:
                db_pcl.count = card.count
            db_pcl.level = card.level
            db_pcl.count = card.count
            db_pcl.star_level = card.star_level if 'starLevel' in card.keys() else 0
            db_pcl.save()