remove queries
outsourced
This commit is contained in:
		
							
								
								
									
										124
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								main.py
									
									
									
									
									
								
							| @@ -114,114 +114,6 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): | |||||||
|                     """, |                     """, | ||||||
|                     (game, player, name, specie.split(", ")[0]), |                     (game, player, name, specie.split(", ")[0]), | ||||||
|                 ) |                 ) | ||||||
|             case _: |  | ||||||
|                 debug(f"unhandled message {chunks[0]}") |  | ||||||
|  |  | ||||||
|  |  | ||||||
| QUERIES = ["gametime", "moves", "nicknames", "playtime", "usage"] |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def query(type: str, conn: sqlite3.Connection): |  | ||||||
|     match type: |  | ||||||
|         case "gametime": |  | ||||||
|             print("Longest games") |  | ||||||
|             print("=============") |  | ||||||
|             for row in conn.execute( |  | ||||||
|                 """ |  | ||||||
|                 SELECT game, MAX(turn) AS n |  | ||||||
|                 FROM moves |  | ||||||
|                 GROUP BY game |  | ||||||
|                 ORDER BY n DESC |  | ||||||
|                 LIMIT 5 |  | ||||||
|                 """ |  | ||||||
|             ): |  | ||||||
|                 replay = fetch(row.game, cache=True) |  | ||||||
|                 print(f"{replay.p1} vs {replay.p2}: {row.n} turns") |  | ||||||
|  |  | ||||||
|         case "moves": |  | ||||||
|             print("Move usage overall") |  | ||||||
|             print("==================") |  | ||||||
|             for row in conn.execute( |  | ||||||
|                 """ |  | ||||||
|                 SELECT name, COUNT(*) AS n |  | ||||||
|                 FROM moves |  | ||||||
|                 GROUP BY name |  | ||||||
|                 ORDER BY n DESC, name |  | ||||||
|                 LIMIT 10 |  | ||||||
|                 """ |  | ||||||
|             ): |  | ||||||
|                 print(f"{row.name}: {row.n}") |  | ||||||
|  |  | ||||||
|         case "nicknames": |  | ||||||
|             print("Nickname usage per player") |  | ||||||
|             print("=========================") |  | ||||||
|             for row_p in conn.execute("SELECT DISTINCT player FROM nicknames"): |  | ||||||
|                 print(row_p.player) |  | ||||||
|                 for row_s in conn.execute( |  | ||||||
|                     "SELECT DISTINCT specie FROM nicknames WHERE player = ?", |  | ||||||
|                     (row_p.player,), |  | ||||||
|                 ): |  | ||||||
|                     print(f"  {row_s.specie}: ", end="") |  | ||||||
|                     names = [] |  | ||||||
|                     for row in conn.execute( |  | ||||||
|                         """ |  | ||||||
|                         SELECT player, specie, name, count(game) AS n |  | ||||||
|                         FROM nicknames |  | ||||||
|                         WHERE player = ? AND specie = ? |  | ||||||
|                         GROUP BY player, specie, name |  | ||||||
|                         ORDER BY player, specie, name |  | ||||||
|                         """, |  | ||||||
|                         (row_p.player, row_s.specie), |  | ||||||
|                     ): |  | ||||||
|                         names.append(f"{row.name} (x{row.n})") |  | ||||||
|                     print(*names, sep=", ") |  | ||||||
|  |  | ||||||
|         case "playtime": |  | ||||||
|             print("Active playtime per Pokemon") |  | ||||||
|             print("===========================") |  | ||||||
|             for row in conn.execute( |  | ||||||
|                 """ |  | ||||||
|                 SELECT m.player, k.specie, COUNT(m.name) AS n |  | ||||||
|                 FROM moves m |  | ||||||
|                 LEFT JOIN nicknames k ON (m.game, m.player, m.user) = (k.game, k.player, k.name) |  | ||||||
|                 GROUP BY k.specie, m.player |  | ||||||
|                 ORDER BY n DESC, k.specie, m.player |  | ||||||
|                 LIMIT 10 |  | ||||||
|                 """ |  | ||||||
|             ): |  | ||||||
|                 print(f"{row.specie} ({row.player}): {row.n} turns") |  | ||||||
|  |  | ||||||
|         case "usage": |  | ||||||
|             print("Pokemon usage per player") |  | ||||||
|             print("========================") |  | ||||||
|             games = { |  | ||||||
|                 r.player: r.n |  | ||||||
|                 for r in conn.execute( |  | ||||||
|                     """ |  | ||||||
|                     SELECT player, COUNT(m.game) AS n |  | ||||||
|                     FROM (SELECT DISTINCT player, game FROM moves) m |  | ||||||
|                     GROUP BY player |  | ||||||
|                     """ |  | ||||||
|                 ) |  | ||||||
|             } |  | ||||||
|             for row_p in conn.execute("SELECT DISTINCT player FROM nicknames"): |  | ||||||
|                 print(row_p.player) |  | ||||||
|                 for row_s in conn.execute( |  | ||||||
|                     """ |  | ||||||
|                     SELECT specie, COUNT(game) AS n |  | ||||||
|                     FROM nicknames |  | ||||||
|                     WHERE player = ? |  | ||||||
|                     GROUP BY specie |  | ||||||
|                     ORDER BY n DESC, specie |  | ||||||
|                     """, |  | ||||||
|                     (row_p.player,), |  | ||||||
|                 ): |  | ||||||
|                     print( |  | ||||||
|                         f"  {row_s.specie}: {row_s.n}" |  | ||||||
|                         f" ({row_s.n / games[row_p.player] * 100:.2f}%)" |  | ||||||
|                     ) |  | ||||||
|         case _: |  | ||||||
|             error(f"unknown query {type}") |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @dataclass(frozen=True) | @dataclass(frozen=True) | ||||||
| @@ -270,13 +162,7 @@ def main(): | |||||||
|         "-v", "--verbose", action="store_true", help="add debugging info" |         "-v", "--verbose", action="store_true", help="add debugging info" | ||||||
|     ) |     ) | ||||||
|     parser.add_argument("-c", "--cache", action="store_true", help="cache replays") |     parser.add_argument("-c", "--cache", action="store_true", help="cache replays") | ||||||
|     parser.add_argument( |     parser.add_argument("replay", nargs="+", help="replay ID or URL") | ||||||
|         "-Q", |  | ||||||
|         "--query", |  | ||||||
|         choices=QUERIES, |  | ||||||
|         help="run query instead of download", |  | ||||||
|     ) |  | ||||||
|     parser.add_argument("replay", nargs="*", help="replay ID or URL") |  | ||||||
|  |  | ||||||
|     args = parser.parse_args(sys.argv[1:]) |     args = parser.parse_args(sys.argv[1:]) | ||||||
|     logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) |     logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) | ||||||
| @@ -285,14 +171,6 @@ def main(): | |||||||
|         db = sqlite3.connect("data.db") |         db = sqlite3.connect("data.db") | ||||||
|         _init_db(db) |         _init_db(db) | ||||||
|  |  | ||||||
|         if args.query: |  | ||||||
|             query(args.query, db) |  | ||||||
|         else: |  | ||||||
|             if not args.replay: |  | ||||||
|                 parser.print_usage() |  | ||||||
|                 print(f"{APP}: error: either query or replay arguments are required") |  | ||||||
|                 sys.exit(1) |  | ||||||
|  |  | ||||||
|         for r in args.replay: |         for r in args.replay: | ||||||
|             try: |             try: | ||||||
|                 replay = fetch(r, cache=args.cache) |                 replay = fetch(r, cache=args.cache) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user