add tss tournament stuff (#1346)
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
"""Backfill tss_tournaments.db from tournament ids already in match_summary.
|
||||
|
||||
Usage:
|
||||
python TSSBOT/scripts/backfill_tournaments.py [--dry-run] [--limit N] [--sleep SECONDS]
|
||||
"""
|
||||
import argparse
|
||||
import asyncio
|
||||
import pathlib
|
||||
import sqlite3
|
||||
import sys
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(ROOT))
|
||||
sys.path.insert(0, str(ROOT.parent / "SHARED"))
|
||||
|
||||
from BOT.storage import TSS_BATTLES_DB_PATH # noqa: E402
|
||||
from BOT.tss_tournaments import init_tss_tournaments_db, scan_and_store # noqa: E402
|
||||
|
||||
|
||||
async def tournament_ids(limit: Optional[int]) -> List[Tuple[int, Optional[str]]]:
|
||||
sql = """
|
||||
SELECT tournament_id, NULLIF(MAX(tournament_name), '') AS tournament_name
|
||||
FROM match_summary
|
||||
WHERE tournament_id IS NOT NULL AND tournament_id > 0
|
||||
GROUP BY tournament_id
|
||||
ORDER BY MAX(endtime_unix) DESC
|
||||
"""
|
||||
if limit:
|
||||
sql += " LIMIT ?"
|
||||
params = (limit,)
|
||||
else:
|
||||
params = ()
|
||||
|
||||
with sqlite3.connect(TSS_BATTLES_DB_PATH) as conn:
|
||||
rows = conn.execute(sql, params).fetchall()
|
||||
return [(int(row[0]), row[1]) for row in rows]
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--dry-run", action="store_true")
|
||||
parser.add_argument("--limit", type=int, default=None)
|
||||
parser.add_argument("--sleep", type=float, default=1.0)
|
||||
args = parser.parse_args()
|
||||
|
||||
rows = await tournament_ids(args.limit)
|
||||
print(f"Found {len(rows)} tournament ids in {TSS_BATTLES_DB_PATH}")
|
||||
if args.dry_run:
|
||||
for tid, name in rows:
|
||||
print(f" {tid}: {name or 'Tournament ' + str(tid)}")
|
||||
return
|
||||
|
||||
await init_tss_tournaments_db()
|
||||
for index, (tid, name) in enumerate(rows, start=1):
|
||||
print(f"[{index}/{len(rows)}] scanning tournament {tid}")
|
||||
await scan_and_store(tid, fallback_name=name)
|
||||
if args.sleep and index < len(rows):
|
||||
await asyncio.sleep(args.sleep)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user