def score(self, current, result): user = self.get_current_user() score = self.session.query(Score).filter(Score.current_id == current.id).filter(Score.user_id == user.id).first() if(score and score.title_found == 1 and score.artist_found == 1): return {'already_found': True} players_ahead = self.session.query(Score).filter(Score.current_id == current.id).filter(Score.artist_found == '1').filter(Score.title_found == '1').count() previous_score = self.session.query(Score).filter(Score.user_id == user.id).filter(Score.current_id == Current.id).filter(Current.game_id == current.game_id).order_by(desc(Score.id)).first() special = 0 streak = 0 if(previous_score is None): # No scores for this game previous_score = Score() previous_score.score = 0 if(score is None): # No score in db for the current song score = Score() # Create a new score score.user_id = user.id score.current_id = current.id score.title_found = 0 score.artist_found = 0 score.score = int(previous_score.score or 0) if(result['title']['found']): # title has been found if(score.title_found == 0): score.title_found = 1 score.score = int(previous_score.score or 0) + 1 previous_score.score = score.score print "Title found!" if(result['artist']['found']): # artist has been found if(score.artist_found == 0): score.artist_found = 1 score.score = int(previous_score.score or 0) + 1 print "Artist found!" if(score.artist_found and score.title_found): # player has found both if(players_ahead < 3): # Player is in top 3 score.score = score.score + 1 special = players_ahead + 1 if(previous_score.artist_found and previous_score.title_found and previous_score.current_id == score.current_id - 1): # Player is on a streak score.score = score.score + 1 streak = 1 self.session.add(score) self.session.commit() return {'points_gained': score.score - previous_score.score, 'score': score.score, 'special': special, 'streak': streak, 'title_found': score.title_found, 'artist_found': score.artist_found}