2828
2929__all__ = (
3030 "ExecHelperError" ,
31+ "ExecHelperNoKillError" ,
3132 "ExecHelperTimeoutError" ,
3233 "ExecCalledProcessError" ,
3334 "CalledProcessError" ,
@@ -54,25 +55,27 @@ class ExecCalledProcessError(ExecHelperError):
5455 __slots__ = ()
5556
5657
57- class ExecHelperTimeoutError (ExecCalledProcessError ):
58- """Execution timeout.
59-
60- .. versionchanged:: 1.3.0 provide full result and timeout inside.
61- .. versionchanged:: 1.3.0 subclass ExecCalledProcessError
62- """
58+ class ExecHelperTimeutProcessError (ExecCalledProcessError ):
59+ """Timeout based errors."""
6360
6461 __slots__ = ("result" , "timeout" )
6562
66- def __init__ (self , result , timeout ): # type: (exec_result.ExecResult, typing.Union[int, float]) -> None
63+ def __init__ (
64+ self ,
65+ message , # type: str,
66+ result , # type: exec_result.ExecResult
67+ timeout # type: typing.Union[int, float]
68+ ): # type: (...) -> None
6769 """Exception for error on process calls.
6870
71+ :param message: exception message
72+ :type message: str
6973 :param result: execution result
7074 :type result: exec_result.ExecResult
7175 :param timeout: timeout for command
7276 :type timeout: typing.Union[int, float]
7377 """
74- message = _log_templates .CMD_WAIT_ERROR .format (result = result , timeout = timeout )
75- super (ExecHelperTimeoutError , self ).__init__ (message )
78+ super (ExecHelperTimeutProcessError , self ).__init__ (message )
7679 self .result = result
7780 self .timeout = timeout
7881
@@ -92,6 +95,47 @@ def stderr(self): # type: () -> typing.Text
9295 return self .result .stderr_str
9396
9497
98+ class ExecHelperNoKillError (ExecHelperTimeutProcessError ):
99+ """Impossible to kill process.
100+
101+ .. versionadded:: 1.10.0
102+ """
103+
104+ __slots__ = ()
105+
106+ def __init__ (self , result , timeout ): # type: (exec_result.ExecResult, typing.Union[int, float]) -> None
107+ """Exception for error on process calls.
108+
109+ :param result: execution result
110+ :type result: exec_result.ExecResult
111+ :param timeout: timeout for command
112+ :type timeout: typing.Union[int, float]
113+ """
114+ message = _log_templates .CMD_KILL_ERROR .format (result = result , timeout = timeout )
115+ super (ExecHelperNoKillError , self ).__init__ (message , result = result , timeout = timeout )
116+
117+
118+ class ExecHelperTimeoutError (ExecHelperTimeutProcessError ):
119+ """Execution timeout.
120+
121+ .. versionchanged:: 1.3.0 provide full result and timeout inside.
122+ .. versionchanged:: 1.3.0 subclass ExecCalledProcessError
123+ """
124+
125+ __slots__ = ()
126+
127+ def __init__ (self , result , timeout ): # type: (exec_result.ExecResult, typing.Union[int, float]) -> None
128+ """Exception for error on process calls.
129+
130+ :param result: execution result
131+ :type result: exec_result.ExecResult
132+ :param timeout: timeout for command
133+ :type timeout: typing.Union[int, float]
134+ """
135+ message = _log_templates .CMD_WAIT_ERROR .format (result = result , timeout = timeout )
136+ super (ExecHelperTimeoutError , self ).__init__ (message , result = result , timeout = timeout )
137+
138+
95139class CalledProcessError (ExecCalledProcessError ):
96140 """Exception for error on process calls."""
97141
@@ -100,19 +144,19 @@ class CalledProcessError(ExecCalledProcessError):
100144 def __init__ (
101145 self ,
102146 result , # type: exec_result.ExecResult
103- expected = None , # type: typing.Optional[typing. Iterable[typing.Union[int, proc_enums.ExitCodes] ]]
147+ expected = ( proc_enums . EXPECTED ,), # type: typing.Iterable[typing.Union[int, proc_enums.ExitCodes]]
104148 ): # type: (...) -> None
105149 """Exception for error on process calls.
106150
107151 :param result: execution result
108152 :type result: exec_result.ExecResult
109153 :param expected: expected return codes
110- :type expected: typing.Optional[typing. Iterable[typing.Union[int, proc_enums.ExitCodes] ]]
154+ :type expected: typing.Iterable[typing.Union[int, proc_enums.ExitCodes]]
111155
112156 .. versionchanged:: 1.1.1 - provide full result
157+ .. versionchanged:: 1.10.0 Expected is not optional, defaults os dependent
113158 """
114159 self .result = result
115- expected = expected or [proc_enums .ExitCodes .EX_OK ]
116160 self .expected = proc_enums .exit_codes_to_enums (expected )
117161 message = (
118162 "Command {result.cmd!r} returned exit code {result.exit_code} "
@@ -154,7 +198,7 @@ def __init__(
154198 command , # type: str
155199 errors , # type: typing.Dict[typing.Tuple[str, int], exec_result.ExecResult]
156200 results , # type: typing.Dict[typing.Tuple[str, int], exec_result.ExecResult]
157- expected = None , # type: typing.Optional [typing.List[typing. Union[int, proc_enums.ExitCodes] ]]
201+ expected = ( proc_enums . EXPECTED ,), # type: typing.Iterable [typing.Union[int, proc_enums.ExitCodes]]
158202 ** kwargs # type: typing.Any
159203 ): # type: (...) -> None
160204 """Exception raised during parallel call as result of exceptions.
@@ -166,10 +210,12 @@ def __init__(
166210 :param results: all results
167211 :type results: typing.Dict[typing.Tuple[str, int], ExecResult]
168212 :param expected: expected return codes
169- :type expected: typing.Optional[typing.List[typing.Union[int, proc_enums.ExitCodes]]]
170- :keyword _message: error message override
213+ :type expected: typing.Iterable[typing.Union[int, proc_enums.ExitCodes]]
214+ :param _message: message override
215+ :type _message: typing.Optional[str]
216+
217+ .. versionchanged:: 1.10.0 Expected is not optional, defaults os dependent
171218 """
172- expected = expected or [proc_enums .ExitCodes .EX_OK ]
173219 prep_expected = proc_enums .exit_codes_to_enums (expected )
174220 message = kwargs .get ("_message" , None ) or (
175221 "Command {cmd!r} "
@@ -203,7 +249,7 @@ def __init__(
203249 exceptions , # type: typing.Dict[typing.Tuple[str, int], Exception]
204250 errors , # type: typing.Dict[typing.Tuple[str, int], exec_result.ExecResult]
205251 results , # type: typing.Dict[typing.Tuple[str, int], exec_result.ExecResult]
206- expected = None , # type: typing.Optional[typing. List[typing.Union[int, proc_enums.ExitCodes] ]]
252+ expected = ( proc_enums . EXPECTED ,), # type: typing.List[typing.Union[int, proc_enums.ExitCodes]]
207253 ** kwargs # type: typing.Any
208254 ): # type: (...) -> None
209255 """Exception during parallel execution.
@@ -217,10 +263,12 @@ def __init__(
217263 :param results: all results
218264 :type results: typing.Dict[typing.Tuple[str, int], ExecResult]
219265 :param expected: expected return codes
220- :type expected: typing.Optional[typing.List[typing.Union[int, proc_enums.ExitCodes]]]
221- :keyword _message: error message override
266+ :type expected: typing.Iterable[typing.Union[int, proc_enums.ExitCodes]]
267+ :param _message: message override
268+ :type _message: typing.Optional[str]
269+
270+ .. versionchanged:: 1.10.0 Expected is not optional, defaults os dependent
222271 """
223- expected = expected or [proc_enums .ExitCodes .EX_OK ]
224272 prep_expected = proc_enums .exit_codes_to_enums (expected )
225273 message = kwargs .get ("_message" , None ) or (
226274 "Command {cmd!r} "
0 commit comments