2424
2525__all__ = (
2626 "ExecHelperError" ,
27+ "ExecHelperNoKillError" ,
2728 "ExecHelperTimeoutError" ,
2829 "ExecCalledProcessError" ,
2930 "CalledProcessError" ,
@@ -50,25 +51,22 @@ class ExecCalledProcessError(ExecHelperError):
5051 __slots__ = ()
5152
5253
53- class ExecHelperTimeoutError (ExecCalledProcessError ):
54- """Execution timeout.
55-
56- .. versionchanged:: 1.3.0 provide full result and timeout inside.
57- .. versionchanged:: 1.3.0 subclass ExecCalledProcessError
58- """
54+ class ExecHelperTimeutProcessError (ExecCalledProcessError ):
55+ """Timeout based errors."""
5956
6057 __slots__ = ("result" , "timeout" )
6158
62- def __init__ (self , result : "exec_result.ExecResult" , timeout : typing .Union [int , float ]) -> None :
59+ def __init__ (self , message : str , * , result : "exec_result.ExecResult" , timeout : typing .Union [int , float ]) -> None :
6360 """Exception for error on process calls.
6461
62+ :param message: exception message
63+ :type message: str
6564 :param result: execution result
6665 :type result: exec_result.ExecResult
6766 :param timeout: timeout for command
6867 :type timeout: typing.Union[int, float]
6968 """
70- message = _log_templates .CMD_WAIT_ERROR .format (result = result , timeout = timeout )
71- super (ExecHelperTimeoutError , self ).__init__ (message )
69+ super (ExecHelperTimeutProcessError , self ).__init__ (message )
7270 self .result = result
7371 self .timeout = timeout
7472
@@ -88,6 +86,47 @@ def stderr(self) -> str:
8886 return self .result .stderr_str
8987
9088
89+ class ExecHelperNoKillError (ExecHelperTimeutProcessError ):
90+ """Impossible to kill process.
91+
92+ .. versionadded:: 3.4.0
93+ """
94+
95+ __slots__ = ()
96+
97+ def __init__ (self , result : "exec_result.ExecResult" , timeout : typing .Union [int , float ]) -> None :
98+ """Exception for error on process calls.
99+
100+ :param result: execution result
101+ :type result: exec_result.ExecResult
102+ :param timeout: timeout for command
103+ :type timeout: typing.Union[int, float]
104+ """
105+ message = _log_templates .CMD_KILL_ERROR .format (result = result , timeout = timeout )
106+ super (ExecHelperNoKillError , self ).__init__ (message , result = result , timeout = timeout )
107+
108+
109+ class ExecHelperTimeoutError (ExecHelperTimeutProcessError ):
110+ """Execution timeout.
111+
112+ .. versionchanged:: 1.3.0 provide full result and timeout inside.
113+ .. versionchanged:: 1.3.0 subclass ExecCalledProcessError
114+ """
115+
116+ __slots__ = ()
117+
118+ def __init__ (self , result : "exec_result.ExecResult" , timeout : typing .Union [int , float ]) -> None :
119+ """Exception for error on process calls.
120+
121+ :param result: execution result
122+ :type result: exec_result.ExecResult
123+ :param timeout: timeout for command
124+ :type timeout: typing.Union[int, float]
125+ """
126+ message = _log_templates .CMD_WAIT_ERROR .format (result = result , timeout = timeout )
127+ super (ExecHelperTimeoutError , self ).__init__ (message , result = result , timeout = timeout )
128+
129+
91130class CalledProcessError (ExecCalledProcessError ):
92131 """Exception for error on process calls."""
93132
@@ -96,19 +135,19 @@ class CalledProcessError(ExecCalledProcessError):
96135 def __init__ (
97136 self ,
98137 result : "exec_result.ExecResult" ,
99- expected : typing .Optional [ typing . Iterable [typing .Union [int , proc_enums .ExitCodes ]]] = None ,
138+ expected : typing .Iterable [typing .Union [int , proc_enums .ExitCodes ]] = ( proc_enums . EXPECTED ,) ,
100139 ) -> None :
101140 """Exception for error on process calls.
102141
103142 :param result: execution result
104143 :type result: exec_result.ExecResult
105144 :param expected: expected return codes
106- :type expected: typing.Optional[typing. Iterable[typing.Union[int, proc_enums.ExitCodes] ]]
145+ :type expected: typing.Iterable[typing.Union[int, proc_enums.ExitCodes]]
107146
108147 .. versionchanged:: 1.1.1 - provide full result
148+ .. versionchanged:: 3.4.0 Expected is not optional, defaults os dependent
109149 """
110150 self .result = result
111- expected = expected or [proc_enums .ExitCodes .EX_OK ]
112151 self .expected = proc_enums .exit_codes_to_enums (expected )
113152 message = (
114153 "Command {result.cmd!r} returned exit code {result.exit_code} "
@@ -150,7 +189,7 @@ def __init__(
150189 command : str ,
151190 errors : typing .Dict [typing .Tuple [str , int ], "exec_result.ExecResult" ],
152191 results : typing .Dict [typing .Tuple [str , int ], "exec_result.ExecResult" ],
153- expected : typing .Optional [typing .List [ typing . Union [int , proc_enums .ExitCodes ]]] = None ,
192+ expected : typing .Iterable [typing .Union [int , proc_enums .ExitCodes ]] = ( proc_enums . EXPECTED ,) ,
154193 * ,
155194 _message : typing .Optional [str ] = None
156195 ) -> None :
@@ -163,11 +202,12 @@ def __init__(
163202 :param results: all results
164203 :type results: typing.Dict[typing.Tuple[str, int], ExecResult]
165204 :param expected: expected return codes
166- :type expected: typing.Optional [typing.List[typing. Union[int, proc_enums.ExitCodes] ]]
205+ :type expected: typing.Iterable [typing.Union[int, proc_enums.ExitCodes]]
167206 :param _message: message override
168207 :type _message: typing.Optional[str]
208+
209+ .. versionchanged:: 3.4.0 Expected is not optional, defaults os dependent
169210 """
170- expected = expected or [proc_enums .ExitCodes .EX_OK ]
171211 prep_expected = proc_enums .exit_codes_to_enums (expected )
172212 message = _message or (
173213 "Command {cmd!r} "
@@ -201,7 +241,7 @@ def __init__(
201241 exceptions : typing .Dict [typing .Tuple [str , int ], Exception ],
202242 errors : typing .Dict [typing .Tuple [str , int ], "exec_result.ExecResult" ],
203243 results : typing .Dict [typing .Tuple [str , int ], "exec_result.ExecResult" ],
204- expected : typing .Optional [typing .List [ typing . Union [int , proc_enums .ExitCodes ]]] = None ,
244+ expected : typing .Iterable [typing .Union [int , proc_enums .ExitCodes ]] = ( proc_enums . EXPECTED ,) ,
205245 * ,
206246 _message : typing .Optional [str ] = None
207247 ) -> None :
@@ -216,11 +256,12 @@ def __init__(
216256 :param results: all results
217257 :type results: typing.Dict[typing.Tuple[str, int], ExecResult]
218258 :param expected: expected return codes
219- :type expected: typing.Optional [typing.List[typing. Union[int, proc_enums.ExitCodes] ]]
259+ :type expected: typing.Iterable [typing.Union[int, proc_enums.ExitCodes]]
220260 :param _message: message override
221261 :type _message: typing.Optional[str]
262+
263+ .. versionchanged:: 3.4.0 Expected is not optional, defaults os dependent
222264 """
223- expected = expected or [proc_enums .ExitCodes .EX_OK ]
224265 prep_expected = proc_enums .exit_codes_to_enums (expected )
225266 message = _message or (
226267 "Command {cmd!r} "
0 commit comments