示例#1
0
    def post(self):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url(self.request.uri))

        bandid = self.request.get('bandid')
        logging.info('bandid: ' + bandid)
        try:
            namespace_manager.set_namespace(bandid)
        except:
            self.error(400);
            return

        conf = Configuration.get_by_id("singleton")
        if user not in conf.auth_users:
            logging.info("letting an unauthed users vote... for now")

        name = self.request.get('name').strip()
        interpreter = self.request.get('interpreter').strip()
        songid = name + interpreter
        song = SongNode.get_by_id(songid)
        if not song:
            song = SongNode(id=name+interpreter)
            song.name = name
            song.interpreter = interpreter
            song.vote_cnt = 0
            song.comments = [] 
            song.links = [] 
            song.votes = []
            song.graduated = False

            
        song_url=urllib.quote('/' + bandid + '/song/' + name + '/' + interpreter)
        unvote = self.request.get('undo', default_value=False)
        if user not in song.votes and not unvote:
            logging.info(str(user) + ' voted for ' + song.name)
            song.votes.append(user)
            song.vote_cnt += 1
            send_notifications(song,'http://' + self.request.host + song_url, 'vote', user)
        elif user in song.votes and unvote == 'true':
            logging.info(str(user) + ' unvoted for ' + song.name)
            song.votes.remove(user)
            song.vote_cnt -= 1
            send_notifications(song,'http://' + self.request.host + song_url, 'unvote', user)
        else:
            logging.error(str(user) + ' failed to vote/unvote for ' + song.name)
            return

        song.graduated = song.vote_cnt >= VOTES_TO_GRADUATE
        song.put()
        self.redirect(song_url)