def get_upcoming_blocks(self, max_number=-1):
        """Gets the X number of upcoming blocks (that will take place in the future). If there is no
        block in the future, the most recent block will be returned.

        Returns: A QuerySet of `EighthBlock` objects

        """

        now = datetime.datetime.now()

        # Show same day if it's before 17:00
        if now.hour < 17:
            now = now.replace(hour=0, minute=0, second=0, microsecond=0)

        blocks = self.order_by("date", "block_letter").filter(date__gte=now)

        if max_number == -1:
            return blocks

        return blocks[:max_number]