101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
import sqlite3 as sql
|
|
import subprocess, traceback
|
|
|
|
# import contextlib
|
|
#
|
|
import sys, io, os
|
|
# import ctypes
|
|
# colors = ctypes.CDLL('./colors.so')
|
|
# colors.colorize_name.argtypes = (ctypes.char_p, ctypes.int, ctypes.char_p)
|
|
|
|
# get all maps in database
|
|
def getmaps(database):
|
|
output = []
|
|
con = sql.connect(database)
|
|
with con:
|
|
cursor = con.cursor()
|
|
try:
|
|
cursor.execute("select distinct mapid from Cts_times;")
|
|
output = cursor.fetchall()
|
|
except sql.Error:
|
|
print("Shit is fucked.")
|
|
return output
|
|
|
|
# if there is no query then it outputs the index file.
|
|
def run_cgi(query=None):
|
|
cmd = [("./cts")]
|
|
proc = subprocess.Popen(cmd, env=query, stdout=subprocess.PIPE, shell=True)
|
|
# communicate returns 'bytes' class with function 'decode'
|
|
return proc.communicate()[0].decode('utf-8')
|
|
|
|
def run_colors(player_name):
|
|
ret = player_name
|
|
result = subprocess.run(['./colors', player_name], capture_output=True, text=True)
|
|
if result.returncode == 0:
|
|
ret = result.stdout
|
|
return ret
|
|
|
|
def get_speed_record(database, map_id):
|
|
message = "{name} traveled the fastest at {speed} qu/s."
|
|
query = str()
|
|
result = []
|
|
with open("queries/fastest-player-of-map.sql") as f:
|
|
query = f.read()
|
|
# q = query.replace('?', map_id)
|
|
# print(q)
|
|
with sql.connect(database) as con:
|
|
cursor = con.cursor()
|
|
try:
|
|
cursor.execute(query, (map_id,))
|
|
result = cursor.fetchall()
|
|
except sql.Error:
|
|
pass
|
|
player_name = result[0][1]
|
|
colored = (run_colors(player_name)).strip()
|
|
velocity = round(result[0][0], 2)
|
|
return message.format(name=colored, speed=velocity)
|
|
|
|
|
|
def main():
|
|
template = ""
|
|
with open("overview.html", 'r') as fin:
|
|
template = fin.read()
|
|
with open("output/index.html", 'w') as fout:
|
|
fout.write(template % run_cgi())
|
|
# use same template for fastest-players
|
|
query = {"QUERY_STRING" : "fastest-players"}
|
|
with open("output/fastest-players.html", 'w') as fout:
|
|
fout.write(template % run_cgi(query))
|
|
maps = getmaps("db/cts.db")
|
|
with open("map.html", 'r') as fin:
|
|
template = fin.read()
|
|
# for each map generate an html file.
|
|
for game_map in maps:
|
|
# game_map is a tuple obj.
|
|
map_name = game_map[0]
|
|
query = {"QUERY_STRING" : ("map=%s" % map_name)}
|
|
filename = ("output/maps/%s.html" % map_name)
|
|
sentence = get_speed_record("db/cts.db", map_name)
|
|
with open(filename, 'w+') as fout:
|
|
title = map_name
|
|
fout.write(template.format(
|
|
title=title,
|
|
map_name=map_name,
|
|
table=run_cgi(query),
|
|
speed=sentence
|
|
)
|
|
)
|
|
# fout.write(template % (title, map_name, table))
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
success = False
|
|
try:
|
|
success = main()
|
|
except FileNotFoundError:
|
|
traceback.print_exc()
|
|
print("\n\t The script probably didn't find the page templates needed to generate a page. You can copy minimal working examples from the repository at templates/.")
|
|
if success:
|
|
print("allmaps.py - Generated pages for all maps.")
|
|
pass
|