2121import typing # noqa # pylint: disable=unused-import
2222
2323from exec_helpers import proc_enums
24+ from exec_helpers import _log_templates
2425
2526__all__ = (
2627 'ExecHelperError' ,
@@ -44,16 +45,58 @@ class DeserializeValueError(ExecHelperError, ValueError):
4445 __slots__ = ()
4546
4647
47- class ExecHelperTimeoutError (ExecHelperError ):
48- """Execution timeout ."""
48+ class ExecCalledProcessError (ExecHelperError ):
49+ """Base class for process call errors ."""
4950
5051 __slots__ = ()
5152
5253
53- class ExecCalledProcessError ( ExecHelperError ):
54- """Base class for process call errors."""
54+ class ExecHelperTimeoutError ( ExecCalledProcessError ):
55+ """Execution timeout.
5556
56- __slots__ = ()
57+ .. versionchanged:: 1.3.0 provide full result and timeout inside.
58+ .. versionchanged:: 1.3.0 subclass ExecCalledProcessError
59+ """
60+
61+ __slots__ = (
62+ 'result' ,
63+ 'timeout' ,
64+ )
65+
66+ def __init__ (
67+ self ,
68+ result , # type: exec_result.ExecResult
69+ timeout , # type: typing.Union[int, float]
70+ ): # type: (...) -> None
71+ """Exception for error on process calls.
72+
73+ :param result: execution result
74+ :type result: exec_result.ExecResult
75+ :param timeout: timeout for command
76+ :type timeout: typing.Union[int, float]
77+ """
78+ self .result = result
79+ self .timeout = timeout
80+ message = _log_templates .CMD_WAIT_ERROR .format (
81+ result = result ,
82+ timeout = timeout
83+ )
84+ super (ExecHelperTimeoutError , self ).__init__ (message )
85+
86+ @property
87+ def cmd (self ): # type: () -> str
88+ """Failed command."""
89+ return self .result .cmd
90+
91+ @property
92+ def stdout (self ): # type: () -> typing.Text
93+ """Command stdout."""
94+ return self .result .stdout_str
95+
96+ @property
97+ def stderr (self ): # type: () -> typing.Text
98+ """Command stderr."""
99+ return self .result .stderr_str
57100
58101
59102class CalledProcessError (ExecCalledProcessError ):
@@ -74,9 +117,7 @@ def __init__(
74117 :param result: execution result
75118 :type result: exec_result.ExecResult
76119 :param expected: expected return codes
77- :type expected: typing.Optional[
78- typing.List[typing.Union[int, proc_enums.ExitCodes]]
79- ]
120+ :type expected: typing.Optional[typing.List[typing.Union[int, proc_enums.ExitCodes]]]
80121
81122 .. versionchanged:: 1.1.1 - provide full result
82123 """
@@ -89,7 +130,7 @@ def __init__(
89130 "\t STDOUT:\n "
90131 "{result.stdout_brief}\n "
91132 "\t STDERR:\n {result.stderr_brief}" .format (
92- result = result ,
133+ result = self . result ,
93134 expected = self .expected
94135 )
95136 )
0 commit comments