def _get_user_cards(user_id, page):
    cards = Card.get_all(*list(
        UserCard.filter({
            'user_id': user_id
        }).filter(r.row['count'] > 0).get_field('card_id').run()))

    total_pages = ((copy(cards).count().run() - 1) // CARDS_PER_PAGE) + 1

    cards = cards.skip(CARDS_PER_PAGE * (page - 1))
    cards = cards.limit(CARDS_PER_PAGE).run()

    cards = list(cards)
    return cards, page, str(total_pages)
Exemple #2
0
    def new_round(self, winner):
        """
        Starts a new round.

        - Store previous round as Pickled dictionary
        - Fill every player's hand
        - Discard and play a new black card
        - Find a new judge and increment
          his judge count
        """

        if winner:
            self.previous_round = {
                'judge': {
                    'name': self.judge.user.name,
                    'email': self.judge.user.email
                },
                'winner': {
                    'name': winner.user.name,
                    'email': winner.user.email
                },
                'black_card': {
                    'id': self.black_card.id,
                    'text': self.black_card.text,
                    'answers': self.black_card.answers
                },
                'table': [{
                    'name':
                    player.user.name,
                    'email':
                    player.user.email,
                    'picture':
                    player.user.picture,
                    'cards': [{
                        'id': card.id,
                        'text': card.text
                    } for card in player.get_played()]
                } for player in self.players
                          if player.hand and player != self.judge]
            }

        self.winner = None

        if any(player.score == self.max_points for player in self.players):
            self.end()
            return

        white_cards = Card.get_all(black=False)

        # fill every player's hand and remove their played card
        for player in self.players:
            player.played = []

            while len(player.hand) < 10:
                white_card = choice(white_cards)

                while white_card in set(self.used_cards):
                    white_card = choice(white_cards)

                player.hand.append(white_card)
                self.used_cards.append(white_card)

        # play a new black card and choose a new judge
        black_cards = Card.get_all(black=True)
        self.black_card = choice(black_cards)

        while self.black_card in set(self.used_cards):
            self.black_card = choice(black_cards)

        self.used_cards.append(self.black_card)

        self.judge = min(self.players, key=lambda player: player.judged)
        self.judge.played = [self.black_card.id]
        self.judge.judged += 1