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)