Files
Argenta/metrics/benchmarks/finds_appropriate_handler.py
2026-02-12 14:18:53 +03:00

86 lines
2.5 KiB
Python

__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)