add make command make reformat #1

Merged
erik merged 1 commit from lundberg_add_black into master 2025-05-01 19:19:25 +00:00
3 changed files with 82 additions and 58 deletions

2
Makefile Normal file
View file

@ -0,0 +1,2 @@
reformat:
black *py

40
db.py
View file

@ -3,13 +3,15 @@ from typing import Dict
DB_FILE = "dereth.db"
def init_db() -> None:
"""Create tables if they do not exist (extended with kills_per_hour and onlinetime)."""
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
# History log
c.execute("""
c.execute(
"""
CREATE TABLE IF NOT EXISTS telemetry_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
character_name TEXT NOT NULL,
@ -27,10 +29,12 @@ def init_db() -> None:
prismatic_taper_count INTEGER,
vt_state TEXT
)
""")
"""
)
# Live snapshot (upsert)
c.execute("""
c.execute(
"""
CREATE TABLE IF NOT EXISTS live_state (
character_name TEXT PRIMARY KEY,
char_tag TEXT,
@ -47,30 +51,36 @@ def init_db() -> None:
prismatic_taper_count INTEGER,
vt_state TEXT
)
""")
"""
)
conn.commit()
conn.close()
def save_snapshot(data: Dict) -> None:
"""Insert snapshot into history and upsert into live_state (with new fields)."""
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
# Insert full history row
c.execute("""
c.execute(
"""
INSERT INTO telemetry_log (
character_name, char_tag, session_id, timestamp,
ew, ns, z,
kills, kills_per_hour, onlinetime,
deaths, rares_found, prismatic_taper_count, vt_state
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", (
""",
(
data["character_name"],
data.get("char_tag", ""),
data["session_id"],
data["timestamp"],
data["ew"], data["ns"], data.get("z", 0.0),
data["ew"],
data["ns"],
data.get("z", 0.0),
data["kills"],
data.get("kills_per_hour", ""),
data.get("onlinetime", ""),
@ -78,10 +88,12 @@ def save_snapshot(data: Dict) -> None:
data.get("rares_found", 0),
data.get("prismatic_taper_count", 0),
data.get("vt_state", "Unknown"),
))
),
)
# Upsert into live_state
c.execute("""
c.execute(
"""
INSERT INTO live_state (
character_name, char_tag, session_id, timestamp,
ew, ns, z,
@ -102,12 +114,15 @@ def save_snapshot(data: Dict) -> None:
rares_found = excluded.rares_found,
prismatic_taper_count = excluded.prismatic_taper_count,
vt_state = excluded.vt_state
""", (
""",
(
data["character_name"],
data.get("char_tag", ""),
data["session_id"],
data["timestamp"],
data["ew"], data["ns"], data.get("z", 0.0),
data["ew"],
data["ns"],
data.get("z", 0.0),
data["kills"],
data.get("kills_per_hour", ""),
data.get("onlinetime", ""),
@ -115,7 +130,8 @@ def save_snapshot(data: Dict) -> None:
data.get("rares_found", 0),
data.get("prismatic_taper_count", 0),
data.get("vt_state", "Unknown"),
))
),
)
conn.commit()
conn.close()

24
main.py
View file

@ -23,6 +23,7 @@ SHARED_SECRET = "your_shared_secret"
# ------------------------------------------------------------------
ACTIVE_WINDOW = timedelta(seconds=30) # player is “online” if seen in last 30 s
class TelemetrySnapshot(BaseModel):
character_name: str
char_tag: str
@ -51,8 +52,7 @@ def on_startup():
@app.post("/position")
@app.post("/position/")
async def receive_snapshot(
snapshot: TelemetrySnapshot,
x_plugin_secret: str = Header(None)
snapshot: TelemetrySnapshot, x_plugin_secret: str = Header(None)
):
if x_plugin_secret != SHARED_SECRET:
raise HTTPException(status_code=401, detail="Unauthorized")
@ -67,7 +67,9 @@ async def receive_snapshot(
# with open(LOG_FILE, "a") as f:
# f.write(json.dumps(snapshot.dict(), default=str) + "\n")
print(f"[{datetime.now()}] {snapshot.character_name} @ NS={snapshot.ns:+.2f}, EW={snapshot.ew:+.2f}")
print(
f"[{datetime.now()}] {snapshot.character_name} @ NS={snapshot.ns:+.2f}, EW={snapshot.ew:+.2f}"
)
return {"status": "ok"}
@ -90,13 +92,14 @@ def get_live_players():
cutoff = datetime.utcnow().replace(tzinfo=timezone.utc) - ACTIVE_WINDOW
players = [
dict(r) for r in rows
if datetime.fromisoformat(
r["timestamp"].replace('Z', '+00:00')
) > cutoff
dict(r)
for r in rows
if datetime.fromisoformat(r["timestamp"].replace("Z", "+00:00")) > cutoff
]
return JSONResponse(content={"players": players})
@app.get("/history/")
@app.get("/history")
def get_history(
@ -151,6 +154,7 @@ def get_history(
]
return JSONResponse(content={"data": data})
# ------------------------ GET Trails ---------------------------------
@app.get("/trails")
@app.get("/trails/")
@ -162,7 +166,9 @@ def get_trails(
for the past `seconds` seconds.
"""
# match the same string format as stored timestamps (via str(datetime))
cutoff_dt = datetime.utcnow().replace(tzinfo=timezone.utc) - timedelta(seconds=seconds)
cutoff_dt = datetime.utcnow().replace(tzinfo=timezone.utc) - timedelta(
seconds=seconds
)
cutoff = str(cutoff_dt)
conn = sqlite3.connect(DB_FILE)
conn.row_factory = sqlite3.Row
@ -173,7 +179,7 @@ def get_trails(
WHERE timestamp >= ?
ORDER BY character_name, timestamp
""",
(cutoff,)
(cutoff,),
).fetchall()
conn.close()
trails = [