From a944bda70e6d84ceaa01f590dce83d97b5205d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Ke=C3=9Fler?= Date: Tue, 4 Jun 2024 00:02:57 +0200 Subject: [PATCH] CLI: add option to decompress hanab.live JSON links This allows easy conversion of shortened JSON links to the full-fledged JSON game format, which can be used with other programs --- src/hanabi/cli.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/hanabi/cli.py b/src/hanabi/cli.py index 7bc20a3..2398917 100755 --- a/src/hanabi/cli.py +++ b/src/hanabi/cli.py @@ -1,4 +1,5 @@ import argparse +import json from typing import Optional import verboselogs @@ -38,6 +39,13 @@ def subcommand_analyze(game_id: int, download: bool = False): ) +def subcommand_decompress(game_link: str): + parts = game_link.split('replay-json/') + game_str = parts[-1].rstrip('/') + game = compress.decompress_game_state(game_str) + print(json.dumps(game.to_json())) + + def subcommand_init(force: bool, populate: bool): tables = init_database.get_existing_tables() if len(tables) > 0 and not force: @@ -139,6 +147,10 @@ def add_solve_subparser(subparsers): parser = subparsers.add_parser('solve', help='Seed solving') parser.add_argument('--var_id', type=int, help='Variant id to solve instances from.', default=0) +def add_decompress_subparser(subparsers): + parser = subparsers.add_parser('decompress', help='Decompress a hanab.live JSON-encoded replay link') + parser.add_argument('game_link', type=str) + def main_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( @@ -153,6 +165,7 @@ def main_parser() -> argparse.ArgumentParser: add_download_subparser(subparsers) add_config_gen_subparser(subparsers) add_solve_subparser(subparsers) + add_decompress_subparser(subparsers) return parser @@ -164,7 +177,8 @@ def hanabi_cli(): 'init': subcommand_init, 'download': subcommand_download, 'gen-config': subcommand_gen_config, - 'solve': subcommand_solve + 'solve': subcommand_solve, + 'decompress': subcommand_decompress }[args.command] if args.command != 'gen-config':