impuls/lib/python3.11/site-packages/cmd2/exceptions.py

110 lines
3.6 KiB
Python

# coding=utf-8
"""Custom exceptions for cmd2"""
from typing import (
Any,
)
############################################################################################################
# The following exceptions are part of the public API
############################################################################################################
class SkipPostcommandHooks(Exception):
"""
Custom exception class for when a command has a failure bad enough to skip post command
hooks, but not bad enough to print the exception to the user.
"""
pass
class Cmd2ArgparseError(SkipPostcommandHooks):
"""
A ``SkipPostcommandHooks`` exception for when a command fails to parse its arguments.
Normally argparse raises a SystemExit exception in these cases. To avoid stopping the command
loop, catch the SystemExit and raise this instead. If you still need to run post command hooks
after parsing fails, just return instead of raising an exception.
"""
pass
class CommandSetRegistrationError(Exception):
"""
Exception that can be thrown when an error occurs while a CommandSet is being added or removed
from a cmd2 application.
"""
pass
class CompletionError(Exception):
"""
Raised during tab completion operations to report any sort of error you want printed. This can also be used
just to display a message, even if it's not an error. For instance, ArgparseCompleter raises CompletionErrors
to display tab completion hints and sets apply_style to False so hints aren't colored like error text.
Example use cases
- Reading a database to retrieve a tab completion data set failed
- A previous command line argument that determines the data set being completed is invalid
- Tab completion hints
"""
def __init__(self, *args: Any, apply_style: bool = True) -> None:
"""
Initializer for CompletionError
:param apply_style: If True, then ansi.style_error will be applied to the message text when printed.
Set to False in cases where the message text already has the desired style.
Defaults to True.
"""
self.apply_style = apply_style
# noinspection PyArgumentList
super().__init__(*args)
class PassThroughException(Exception):
"""
Normally all unhandled exceptions raised during commands get printed to the user.
This class is used to wrap an exception that should be raised instead of printed.
"""
def __init__(self, *args: Any, wrapped_ex: BaseException) -> None:
"""
Initializer for PassThroughException
:param wrapped_ex: the exception that will be raised
"""
self.wrapped_ex = wrapped_ex
super().__init__(*args)
############################################################################################################
# The following exceptions are NOT part of the public API and are intended for internal use only.
############################################################################################################
class Cmd2ShlexError(Exception):
"""Raised when shlex fails to parse a command line string in StatementParser"""
pass
class EmbeddedConsoleExit(SystemExit):
"""Custom exception class for use with the py command."""
pass
class EmptyStatement(Exception):
"""Custom exception class for handling behavior when the user just presses <Enter>."""
pass
class RedirectionError(Exception):
"""Custom exception class for when redirecting or piping output fails"""
pass