def score(data=None, decrypt=True): data = data or request.data if not data: logging.warning('Empty request') return 'No data', 400 print('got a score!!') print(data) data = dumb_decryption(data) if decrypt else data try: player = Player.query.get(data['player']['id']) if not player: player = Player(data['player']) else: player.update_fields(data['player']) chart = Chart.query.get(data['chart']['chart_id']) if not chart: chart = Chart(data['chart']) else: chart.update_fields(data['chart']) data['score']['hash'] = data['chart'].get('hash') score = Score(data['score'], chart) score.achieved_at = datetime.utcnow() score.player = player score.version = 6 if not score.is_supported(): db.session.rollback() print('score ignored because not supported') return 'Not OK' db.session.add_all([player, chart, score]) db.session.commit() print('pushed to db! ({} played by {})'.format(chart.name, player.username)) score.set_osmos() print('osmos set') print('updating pb if needed') if update_pb_for_score(player, score): print('updated pb returned true') update_player_osmos(player) player.playcount += 1 db.session.commit() except Exception as e: db.session.rollback() logging.warning(f'Malformed score payload: \n{data}') raise logging.warning(e, exc_info=True) return 'OK'