Example #1
0
async def vote_answer(player: "PlayerConnection", session, *, answer_uuid):
    answer = session.query(GivenAnswer).filter(
        GivenAnswer.uuid == answer_uuid).first()
    pig = player.player_in_game(session)
    # check that answer and pig have same team
    if answer.player.team == pig.team:
        res = (session.query(Vote).filter(Vote.answer_id == answer.id).filter(
            Vote.subplayer_id == pig.id).first())
        if res is not None:
            # already exists
            return
        vote = Vote(answer_id=answer.id, subplayer_id=pig.id)
        try:
            session.add(vote)
            await notify_team_of_answer(player, session, answer)
        except IntegrityError:
            pass
Example #2
0
def vote_all():
    if 'osm_token' not in session or config.STAGE != 'voting':
        return redirect(url_for('login'))
    uid = session['osm_uid']
    # Delete current votes to replace by with the new ones
    q = Vote.delete().where((Vote.user == uid) & (~Vote.preliminary))
    q.execute()
    for nom in config.NOMINATIONS:
        votes = request.form.getlist('vote_{}'.format(nom))
        for vote in votes:
            v = Vote()
            v.nominee = Nominee.get(Nominee.id == int(vote))
            v.user = uid
            v.preliminary = False
            v.save()
    flash(g.lang['thanksvoted'])
    return redirect(url_for('voting'))
Example #3
0
def vote(nid):
    if 'osm_token' not in session or config.STAGE != 'voting':
        return redirect(url_for('login'))
    uid = session['osm_uid']
    n = Nominee.get(Nominee.id == nid)
    try:
        # Delete votes from the same category by this voter
        v = Vote.select().where((Vote.user == uid) & (~Vote.preliminary)).join(Nominee).where(
            Nominee.category == n.category).get()
        v.delete_instance()
    except Vote.DoesNotExist:
        pass
    v = Vote()
    v.nominee = n
    v.user = uid
    v.preliminary = False
    v.save()
    return redirect(url_for('voting'))
Example #4
0
def prevote(nid):
    if 'osm_token' not in session:
        return redirect(url_for('login'))
    uid = session['osm_uid']
    if config.STAGE != 'call' and not isteam(uid):
        return redirect(url_for('login'))
    n = Nominee.get(Nominee.id == nid)
    try:
        v = Vote.get((Vote.user == uid) & (Vote.nominee == n) & (Vote.preliminary))
        v.delete_instance()
    except Vote.DoesNotExist:
        if canvote(uid):
            v = Vote()
            v.nominee = n
            v.user = uid
            v.preliminary = True
            v.save()
    return redirect(url_for('edit_nominees'))
Example #5
0
def vote(user_id, take_id):
    user = User.query.filter_by(id=user_id).first()
    if user is None:
        return failure_response("User not found")
    take = Take.query.filter_by(id=take_id).first()
    if take is None:
        return failure_response("Take not found")
    if user_id == take.user_id:
        return failure_response("User cannot vote on their own take")
    for vote in Vote.query.filter_by(user_id=user_id).all():
        if vote.take_id == take_id:
            return failure_response("User already voted")
    body = json.loads(request.data)
    value = body.get("value")
    if value is None:
        return failure_response("User must provide a vote value")
    new_vote = Vote(value=body.get("value"), take=take)
    db.session.add(new_vote)
    take.votes.append(new_vote)
    user.voted.append(new_vote)
    db.session.commit()
    return success_response(new_vote.serialize())
Example #6
0
def vote_all():
    if 'osm_token' not in session or config.STAGE != 'voting':
        return redirect(url_for('login'))
    uid = session['osm_uid']
    for nom in range(len(config.NOMINATIONS)):
        vote = request.form.get('vote{}'.format(nom), -1, type=int)
        if vote < 0:
            continue
        try:
            # Delete votes from the same category by this voter
            v = Vote.select().where((Vote.user == uid)
                                    & (~Vote.preliminary)).join(Nominee).where(
                                        Nominee.nomination == nom).get()
            v.delete_instance()
        except Vote.DoesNotExist:
            pass
        if vote > 0:
            v = Vote()
            v.nominee = Nominee.get(Nominee.id == vote)
            v.user = uid
            v.preliminary = False
            v.save()
    flash(g.lang['thanksvoted'])
    return redirect(url_for('voting'))
Example #7
0
    def vote_song(self, user, song_id=None, stream_url=None):
        """Vote for a song"""
        session = Session()

        if stream_url:
            packet = session.query(Packet).filter_by(
                stream_url=stream_url, player_name=PLAYER_NAME).first()
        elif song_id is not None:
            packet = session.query(Packet).filter_by(
                song_id=song_id, player_name=PLAYER_NAME).first()
        else:
            raise Exception('Must specify either song_id or stream_url')

        if packet:  # Song is already queued; add a vote
            if user == packet.user:
                session.rollback()
                raise Exception('User %s has already voted for this song' %
                                user)
            try:
                packet.additional_votes.append(Vote(user=user))
                session.commit()
            except FlushError:
                session.rollback()
                raise Exception('User %s has already voted for this song' %
                                user)
            self._update_finish_times(packet.user)
        else:  # Song is not queued; queue it
            if stream_url:
                if 'www.youtube.com' in stream_url:
                    try:
                        video_details = get_youtube_video_details(stream_url)
                        packet = Packet(stream_url=stream_url,
                                        stream_title=video_details['title'],
                                        stream_length=video_details['length'],
                                        stream_id=video_details['stream_id'],
                                        art_uri=video_details['art_uri'],
                                        user=user,
                                        arrival_time=self.virtual_time,
                                        player_name=PLAYER_NAME)
                        session.add(packet)
                        session.commit()
                    except Exception, e:
                        session.rollback()
                        raise e
                elif 'soundcloud.com' in stream_url:
                    try:
                        track_obj = get_soundcloud_music_details(stream_url)
                        packet = Packet(stream_url=stream_url,
                                        stream_title=track_obj['title'],
                                        stream_length=track_obj['length'],
                                        stream_id=track_obj['stream_id'],
                                        art_uri=track_obj['art_uri'],
                                        artist=track_obj['artist'],
                                        user=user,
                                        arrival_time=self.virtual_time,
                                        player_name=PLAYER_NAME)
                        session.add(packet)
                        session.commit()
                    except Exception, e:
                        session.rollback()
                        raise e
                else: