40 lines
1.6 KiB
Python
Executable File
40 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import sqlite3
|
|
import json
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
|
|
CONFIGNAME="supertuxkart"
|
|
DATABASEFILE='/etc/supertuxkart/stkservers.db'
|
|
|
|
def results_as_json():
|
|
cx = sqlite3.connect(DATABASEFILE)
|
|
grandprixes = []
|
|
grandprix_cursor = cx.cursor()
|
|
for grandprix_row in grandprix_cursor.execute(f'SELECT ROWID, num_races, total_races FROM v1_{CONFIGNAME}_grandprixresults'):
|
|
races = []
|
|
race_cursor = cx.cursor()
|
|
for race_row in race_cursor.execute(f'SELECT ROWID, track_name FROM v1_{CONFIGNAME}_raceresults WHERE grandprix_rowid = {grandprix_row[0]}'):
|
|
race = {"track": race_row[1], "players": []}
|
|
player_cursor = cx.cursor()
|
|
for player_row in player_cursor.execute(f'SELECT elapsed_time, player_name FROM v1_your_config_playerresults WHERE race_rowid = {race_row[0]} ORDER BY elapsed_time ASC'):
|
|
race['players'].append({"name": player_row[1], "time": player_row[0]})
|
|
races.append(race)
|
|
grandprixes.append({"num_races": grandprix_row[1], "total_races": grandprix_row[2], "races": races})
|
|
cx.close()
|
|
|
|
return json.dumps(grandprixes, indent=None, separators=(',', ':'))
|
|
|
|
class STKStatServer(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
self.send_response(200)
|
|
self.send_header("Content-Type", "application/json")
|
|
self.send_header("Access-Control-Allow-Origin", "*")
|
|
self.end_headers()
|
|
|
|
self.wfile.write(results_as_json().encode('utf-8'))
|
|
|
|
if __name__ == "__main__":
|
|
server = HTTPServer(("127.0.0.1", 9985), STKStatServer)
|
|
server.serve_forever()
|