summaryrefslogtreecommitdiff
path: root/cmd2
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2020-09-03 23:21:50 -0400
committerKevin Van Brunt <kmvanbrunt@gmail.com>2020-09-03 23:21:50 -0400
commit7d3f27273e64f4c30852ea1f7fe0b79520f6cc7e (patch)
tree340a418a46e66c407898fc91fea4813b6f5161a0 /cmd2
parentf1ac4d0fb0e6cccbc0e180b6d3320f48015fad41 (diff)
parentde0261325a91dfdbe1571135ce078a978a2aaad8 (diff)
downloadcmd2-git-7d3f27273e64f4c30852ea1f7fe0b79520f6cc7e.tar.gz
Merge branch '2.0' into read_input
Diffstat (limited to 'cmd2')
-rw-r--r--cmd2/cmd2.py7
-rw-r--r--cmd2/command_definition.py28
2 files changed, 26 insertions, 9 deletions
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py
index fba516e0..a8a84499 100644
--- a/cmd2/cmd2.py
+++ b/cmd2/cmd2.py
@@ -539,7 +539,9 @@ class Cmd(cmd.Cmd):
self._installed_command_sets.append(cmdset)
self._register_subcommands(cmdset)
+ cmdset.on_registered()
except Exception:
+ cmdset.on_unregister()
for attrib in installed_attributes:
delattr(self, attrib)
if cmdset in self._installed_command_sets:
@@ -547,7 +549,7 @@ class Cmd(cmd.Cmd):
if cmdset in self._cmd_to_command_sets.values():
self._cmd_to_command_sets = \
{key: val for key, val in self._cmd_to_command_sets.items() if val is not cmdset}
- cmdset.on_unregister()
+ cmdset.on_unregistered()
raise
def _install_command_function(self, command: str, command_wrapper: Callable, context=''):
@@ -595,6 +597,7 @@ class Cmd(cmd.Cmd):
"""
if cmdset in self._installed_command_sets:
self._check_uninstallable(cmdset)
+ cmdset.on_unregister()
self._unregister_subcommands(cmdset)
methods = inspect.getmembers(
@@ -620,7 +623,7 @@ class Cmd(cmd.Cmd):
if hasattr(self, HELP_FUNC_PREFIX + cmd_name):
delattr(self, HELP_FUNC_PREFIX + cmd_name)
- cmdset.on_unregister()
+ cmdset.on_unregistered()
self._installed_command_sets.remove(cmdset)
def _check_uninstallable(self, cmdset: CommandSet):
diff --git a/cmd2/command_definition.py b/cmd2/command_definition.py
index 27a044bc..64adaada 100644
--- a/cmd2/command_definition.py
+++ b/cmd2/command_definition.py
@@ -53,10 +53,11 @@ class CommandSet(object):
def __init__(self):
self._cmd = None # type: Optional[cmd2.Cmd]
- def on_register(self, cmd):
+ def on_register(self, cmd) -> None:
"""
- Called by cmd2.Cmd when a CommandSet is registered. Subclasses can override this
- to perform an initialization requiring access to the Cmd object.
+ Called by cmd2.Cmd as the first step to registering a CommandSet. The commands defined in this class have
+ not be added to the CLI object at this point. Subclasses can override this to perform any initialization
+ requiring access to the Cmd object (e.g. configure commands and their parsers based on CLI state data).
:param cmd: The cmd2 main application
:type cmd: cmd2.Cmd
@@ -66,11 +67,24 @@ class CommandSet(object):
else:
raise CommandSetRegistrationError('This CommandSet has already been registered')
- def on_unregister(self):
+ def on_registered(self) -> None:
"""
- Called by ``cmd2.Cmd`` when a CommandSet is unregistered and removed.
+ Called by cmd2.Cmd after a CommandSet is registered and all its commands have been added to the CLI.
+ Subclasses can override this to perform custom steps related to the newly added commands (e.g. setting
+ them to a disabled state).
+ """
+ pass
- :param cmd:
- :type cmd: cmd2.Cmd
+ def on_unregister(self) -> None:
+ """
+ Called by ``cmd2.Cmd`` as the first step to unregistering a CommandSet. Subclasses can override this to
+ perform any cleanup steps which require their commands being registered in the CLI.
+ """
+ pass
+
+ def on_unregistered(self) -> None:
+ """
+ Called by ``cmd2.Cmd`` after a CommandSet has been unregistered and all its commands removed from the CLI.
+ Subclasses can override this to perform remaining cleanup steps.
"""
self._cmd = None