Skip to content

Commit 5dc1f98

Browse files
committed
Prevent redundant traversal of parser aliases.
1 parent ac5e899 commit 5dc1f98

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

cmd2/cmd2.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,7 +1034,14 @@ def check_parser_uninstallable(parser: Cmd2ArgumentParser) -> None:
10341034
# No subcommands to check
10351035
return
10361036

1037+
# Prevent redundant traversal of parser aliases
1038+
checked_parsers: set[Cmd2ArgumentParser] = set()
1039+
10371040
for subparser in subparsers_action.choices.values():
1041+
if subparser in checked_parsers:
1042+
continue
1043+
checked_parsers.add(subparser)
1044+
10381045
attached_cmdset_id = getattr(subparser, constants.PARSER_ATTR_COMMANDSET_ID, None)
10391046
if attached_cmdset_id is not None and attached_cmdset_id != cmdset_id:
10401047
raise CommandSetRegistrationError(

examples/scripts/save_help_text.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,15 @@ def get_sub_commands(parser: Cmd2ArgumentParser) -> list[str]:
1919
# No subcommands
2020
return []
2121

22+
# Prevent redundant traversal of parser aliases
23+
checked_parsers: set[Cmd2ArgumentParser] = set()
24+
2225
sub_cmds = []
2326
for subcmd, subcmd_parser in subparsers_action.choices.items():
27+
if subcmd_parser in checked_parsers:
28+
continue
29+
checked_parsers.add(subcmd_parser)
30+
2431
sub_cmds.append(subcmd)
2532

2633
# Look for nested subcommands

0 commit comments

Comments
 (0)