Spaces:
Running
Running
Update app.py (#104)
Browse files- Update app.py (d5b3858c95dd43e2596968600625436fd9da1fca)
app.py
CHANGED
|
@@ -1237,9 +1237,18 @@ def inbox_page():
|
|
| 1237 |
# Leaderboard page
|
| 1238 |
# ----------------- Leaderboard Page -----------------
|
| 1239 |
def leaderboard_page():
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1240 |
st.header("๐ Leaderboard")
|
| 1241 |
|
| 1242 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1243 |
with open(LEADERBOARD_FILE, "rb") as f:
|
| 1244 |
st.download_button(
|
| 1245 |
"โฌ Download Leaderboard CSV",
|
|
@@ -1248,35 +1257,53 @@ def leaderboard_page():
|
|
| 1248 |
mime="text/csv"
|
| 1249 |
)
|
| 1250 |
|
| 1251 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1252 |
|
| 1253 |
if not leaderboard:
|
| 1254 |
st.info("No scores yet.")
|
| 1255 |
return
|
| 1256 |
|
| 1257 |
-
#
|
| 1258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1259 |
|
| 1260 |
-
#
|
| 1261 |
st.subheader("Top Players")
|
| 1262 |
for i, row in enumerate(leaderboard[:10], 1):
|
| 1263 |
st.write(
|
| 1264 |
f"{i}. {row.get('avatar','๐ฎ')} **{row.get('name','Guest')}** "
|
| 1265 |
-
f"(Game {row.get('game_id','')}) โ {row.get('score',0)} pts
|
| 1266 |
)
|
| 1267 |
|
| 1268 |
-
# Weekly
|
| 1269 |
st.subheader("Weekly Leaderboard (Top 10)")
|
| 1270 |
-
|
| 1271 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1272 |
st.info("No scores yet this week.")
|
| 1273 |
else:
|
| 1274 |
-
|
| 1275 |
-
for i, r in enumerate(week_leaderboard[:10], 1):
|
| 1276 |
st.write(
|
| 1277 |
f"{i}. {r.get('avatar','๐ฎ')} **{r.get('name','Guest')}** "
|
| 1278 |
f"(Game {r.get('game_id','')}) โ {r.get('score',0)} pts"
|
| 1279 |
)
|
|
|
|
| 1280 |
|
| 1281 |
def get_weekly_leaderboard(limit=10):
|
| 1282 |
rows = unified_get("/leaderboard") or []
|
|
|
|
| 1237 |
# Leaderboard page
|
| 1238 |
# ----------------- Leaderboard Page -----------------
|
| 1239 |
def leaderboard_page():
|
| 1240 |
+
import os, csv
|
| 1241 |
+
import streamlit as st
|
| 1242 |
+
from datetime import datetime
|
| 1243 |
+
|
| 1244 |
st.header("๐ Leaderboard")
|
| 1245 |
|
| 1246 |
+
# ---------------- File check ----------------
|
| 1247 |
+
if not os.path.exists(LEADERBOARD_FILE):
|
| 1248 |
+
st.info("No scores yet.")
|
| 1249 |
+
return
|
| 1250 |
+
|
| 1251 |
+
# ---------------- Download CSV ----------------
|
| 1252 |
with open(LEADERBOARD_FILE, "rb") as f:
|
| 1253 |
st.download_button(
|
| 1254 |
"โฌ Download Leaderboard CSV",
|
|
|
|
| 1257 |
mime="text/csv"
|
| 1258 |
)
|
| 1259 |
|
| 1260 |
+
# ---------------- Read CSV ----------------
|
| 1261 |
+
leaderboard = []
|
| 1262 |
+
with open(LEADERBOARD_FILE, "r", encoding="utf-8") as f:
|
| 1263 |
+
reader = csv.DictReader(f)
|
| 1264 |
+
leaderboard = list(reader)
|
| 1265 |
|
| 1266 |
if not leaderboard:
|
| 1267 |
st.info("No scores yet.")
|
| 1268 |
return
|
| 1269 |
|
| 1270 |
+
# Convert score to int (CSV reads as string)
|
| 1271 |
+
for r in leaderboard:
|
| 1272 |
+
r["score"] = int(r.get("score", 0))
|
| 1273 |
+
|
| 1274 |
+
# ---------------- Sort by score ----------------
|
| 1275 |
+
leaderboard = sorted(leaderboard, key=lambda x: x["score"], reverse=True)
|
| 1276 |
|
| 1277 |
+
# ---------------- Top 10 ----------------
|
| 1278 |
st.subheader("Top Players")
|
| 1279 |
for i, row in enumerate(leaderboard[:10], 1):
|
| 1280 |
st.write(
|
| 1281 |
f"{i}. {row.get('avatar','๐ฎ')} **{row.get('name','Guest')}** "
|
| 1282 |
+
f"(Game {row.get('game_id','')}) โ {row.get('score',0)} pts"
|
| 1283 |
)
|
| 1284 |
|
| 1285 |
+
# ---------------- Weekly Leaderboard ----------------
|
| 1286 |
st.subheader("Weekly Leaderboard (Top 10)")
|
| 1287 |
+
current_week = datetime.now().isocalendar()[1]
|
| 1288 |
+
|
| 1289 |
+
weekly = []
|
| 1290 |
+
for r in leaderboard:
|
| 1291 |
+
try:
|
| 1292 |
+
ts = datetime.fromisoformat(r.get("timestamp", ""))
|
| 1293 |
+
if ts.isocalendar()[1] == current_week:
|
| 1294 |
+
weekly.append(r)
|
| 1295 |
+
except Exception:
|
| 1296 |
+
pass
|
| 1297 |
+
|
| 1298 |
+
if not weekly:
|
| 1299 |
st.info("No scores yet this week.")
|
| 1300 |
else:
|
| 1301 |
+
for i, r in enumerate(weekly[:10], 1):
|
|
|
|
| 1302 |
st.write(
|
| 1303 |
f"{i}. {r.get('avatar','๐ฎ')} **{r.get('name','Guest')}** "
|
| 1304 |
f"(Game {r.get('game_id','')}) โ {r.get('score',0)} pts"
|
| 1305 |
)
|
| 1306 |
+
|
| 1307 |
|
| 1308 |
def get_weekly_leaderboard(limit=10):
|
| 1309 |
rows = unified_get("/leaderboard") or []
|