resolve teams
This commit is contained in:
		
							
								
								
									
										56
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								main.py
									
									
									
									
									
								
							| @@ -44,6 +44,21 @@ _ch.setFormatter(LogFormatter()) | |||||||
| LOG.addHandler(_ch) | LOG.addHandler(_ch) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | TEAMS = {} | ||||||
|  | _logged_teams = [] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def team(player: str) -> str: | ||||||
|  |     """Maps a username to a defined team.""" | ||||||
|  |     if player in TEAMS: | ||||||
|  |         return TEAMS[player] | ||||||
|  |     else: | ||||||
|  |         if not player in _logged_teams: | ||||||
|  |             LOG.warning(f"missing team mapping for {player}") | ||||||
|  |         _logged_teams.append(player) | ||||||
|  |         return player | ||||||
|  |  | ||||||
|  |  | ||||||
| class safelist(list): | class safelist(list): | ||||||
|     def get(self, index, default=None): |     def get(self, index, default=None): | ||||||
|         try: |         try: | ||||||
| @@ -133,7 +148,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): | |||||||
|                     VALUES (?, ?, ?, ?, ?, ?) |                     VALUES (?, ?, ?, ?, ?, ?) | ||||||
|                     ON CONFLICT DO NOTHING |                     ON CONFLICT DO NOTHING | ||||||
|                     """, |                     """, | ||||||
|                     (game, turn, player, move, user, target), |                     (game, turn, team(player), move, user, target), | ||||||
|                 ) |                 ) | ||||||
|             case ["switch", name, specie, *rest]: |             case ["switch", name, specie, *rest]: | ||||||
|                 player, name = resolve_mon(name) |                 player, name = resolve_mon(name) | ||||||
| @@ -143,7 +158,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): | |||||||
|                     VALUES (?, ?, ?, ?) |                     VALUES (?, ?, ?, ?) | ||||||
|                     ON CONFLICT DO NOTHING |                     ON CONFLICT DO NOTHING | ||||||
|                     """, |                     """, | ||||||
|                     (game, turn, player, name), |                     (game, turn, team(player), name), | ||||||
|                 ) |                 ) | ||||||
|                 conn.execute( |                 conn.execute( | ||||||
|                     """ |                     """ | ||||||
| @@ -151,7 +166,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): | |||||||
|                     VALUES(?, ?, ?, ?) |                     VALUES(?, ?, ?, ?) | ||||||
|                     ON CONFLICT DO NOTHING |                     ON CONFLICT DO NOTHING | ||||||
|                     """, |                     """, | ||||||
|                     (game, player, name, specie.split(", ")[0]), |                     (game, team(player), name, specie.split(", ")[0]), | ||||||
|                 ) |                 ) | ||||||
|             case ["faint", mon]: |             case ["faint", mon]: | ||||||
|                 player, mon = resolve_mon(mon) |                 player, mon = resolve_mon(mon) | ||||||
| @@ -161,7 +176,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): | |||||||
|                     VALUES(?, ?, ?, ?) |                     VALUES(?, ?, ?, ?) | ||||||
|                     ON CONFLICT DO NOTHING |                     ON CONFLICT DO NOTHING | ||||||
|                     """, |                     """, | ||||||
|                     (game, turn, player, mon), |                     (game, turn, team(player), mon), | ||||||
|                 ) |                 ) | ||||||
|             case ["win", player]: |             case ["win", player]: | ||||||
|                 conn.execute( |                 conn.execute( | ||||||
| @@ -170,7 +185,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): | |||||||
|                     SET winner = ? |                     SET winner = ? | ||||||
|                     WHERE id = ? |                     WHERE id = ? | ||||||
|                     """, |                     """, | ||||||
|                     (player, game), |                     (team(player), game), | ||||||
|                 ) |                 ) | ||||||
|             case ["-sidestart", side, env]: |             case ["-sidestart", side, env]: | ||||||
|                 if not last_move: |                 if not last_move: | ||||||
| @@ -223,7 +238,15 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): | |||||||
|                         VALUES(?, ?, ?, ?, ?, ?, ?) |                         VALUES(?, ?, ?, ?, ?, ?, ?) | ||||||
|                         ON CONFLICT DO NOTHING |                         ON CONFLICT DO NOTHING | ||||||
|                         """, |                         """, | ||||||
|                         (game, turn, player, mon, source, source_user, source_player), |                         ( | ||||||
|  |                             game, | ||||||
|  |                             turn, | ||||||
|  |                             team(player), | ||||||
|  |                             mon, | ||||||
|  |                             source, | ||||||
|  |                             source_user, | ||||||
|  |                             team(source_player), | ||||||
|  |                         ), | ||||||
|                     ) |                     ) | ||||||
|             case _: |             case _: | ||||||
|                 # LOG.debug(f"unhandled message {chunks[0]}") |                 # LOG.debug(f"unhandled message {chunks[0]}") | ||||||
| @@ -281,6 +304,14 @@ def main(args): | |||||||
|         action="store_true", |         action="store_true", | ||||||
|         help="fetch replays instead of using cache", |         help="fetch replays instead of using cache", | ||||||
|     ) |     ) | ||||||
|  |     parser.add_argument( | ||||||
|  |         "-t", | ||||||
|  |         "--teams", | ||||||
|  |         action="store", | ||||||
|  |         metavar="FILE", | ||||||
|  |         default="teams.json", | ||||||
|  |         help="JSON file defining players to teams", | ||||||
|  |     ) | ||||||
|     parser.add_argument( |     parser.add_argument( | ||||||
|         "-o", |         "-o", | ||||||
|         "--output", |         "--output", | ||||||
| @@ -297,6 +328,11 @@ def main(args): | |||||||
|     elif args.verbose: |     elif args.verbose: | ||||||
|         LOG.setLevel(logging.DEBUG) |         LOG.setLevel(logging.DEBUG) | ||||||
|  |  | ||||||
|  |     if args.teams: | ||||||
|  |         with open(args.teams) as f: | ||||||
|  |             global TEAMS | ||||||
|  |             TEAMS = json.load(f) | ||||||
|  |  | ||||||
|     try: |     try: | ||||||
|         db = sqlite3.connect(args.output) |         db = sqlite3.connect(args.output) | ||||||
|         _init_db(db) |         _init_db(db) | ||||||
| @@ -315,7 +351,13 @@ def main(args): | |||||||
|                 VALUES (?, ?, ?, ?, ?) |                 VALUES (?, ?, ?, ?, ?) | ||||||
|                 ON CONFLICT DO NOTHING |                 ON CONFLICT DO NOTHING | ||||||
|                 """, |                 """, | ||||||
|                 (replay.id, replay.p1, replay.p2, replay.format, replay.uploadtime), |                 ( | ||||||
|  |                     replay.id, | ||||||
|  |                     team(replay.p1), | ||||||
|  |                     team(replay.p2), | ||||||
|  |                     replay.format, | ||||||
|  |                     replay.uploadtime, | ||||||
|  |                 ), | ||||||
|             ) |             ) | ||||||
|  |  | ||||||
|             parse_log(replay.id, replay.log, into=db) |             parse_log(replay.id, replay.log, into=db) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user