__all__ = [ "benchmark_simple_command", "benchmark_command_with_flags", "benchmark_many_commands", "benchmark_command_with_many_flags", "benchmark_extreme_router", ] from argenta.command import Flag, Flags from argenta.command.models import Command, InputCommand from argenta.response import Response from argenta.router import Router from .entity import benchmarks @benchmarks.register(type_="finds_appropriate_handler", description="Simple command (no flags)") def benchmark_simple_command() -> None: router = Router() @router.command(Command("test")) def handler(_res: Response) -> None: pass input_cmd = InputCommand.parse("test") router.finds_appropriate_handler(input_cmd) @benchmarks.register(type_="finds_appropriate_handler", description="Command with flags (3 flags)") def benchmark_command_with_flags() -> None: router = Router() @router.command(Command("test", flags=Flags([Flag("a"), Flag("b"), Flag("c")]))) def handler(_res: Response) -> None: pass input_cmd = InputCommand.parse("test -a -b -c") router.finds_appropriate_handler(input_cmd) @benchmarks.register(type_="finds_appropriate_handler", description="Many commands (50 commands)") def benchmark_many_commands() -> None: router = Router() for i in range(50): @router.command(Command(f"cmd{i}")) def handler(_res: Response) -> None: pass input_cmd = InputCommand.parse("cmd25") router.finds_appropriate_handler(input_cmd) @benchmarks.register( type_="finds_appropriate_handler", description="Command with many flags (20 flags)" ) def benchmark_command_with_many_flags() -> None: router = Router() flags = Flags([Flag(f"flag{i}") for i in range(20)]) @router.command(Command("test", flags=flags)) def handler(_res: Response) -> None: pass input_cmd = InputCommand.parse("test " + " ".join(f"-flag{i}" for i in range(10))) router.finds_appropriate_handler(input_cmd) @benchmarks.register( type_="finds_appropriate_handler", description="Extreme (100 commands, 10 flags each)" ) def benchmark_extreme_router() -> None: router = Router() for i in range(100): flags = Flags([Flag(f"f{i}_{j}") for j in range(10)]) @router.command(Command(f"cmd{i}", flags=flags)) def handler(_res: Response) -> None: pass input_cmd = InputCommand.parse("cmd50 -f50_0 -f50_1 -f50_2") router.finds_appropriate_handler(input_cmd)