Skip to content

Commit

Permalink
Extend ExecResult API check_exit_code
Browse files Browse the repository at this point in the history
Add `verbose` flag for detail logging enable
  • Loading branch information
penguinolog committed Nov 17, 2023
1 parent eeab98c commit e7c3f77
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
4 changes: 3 additions & 1 deletion doc/source/ExecResult.rst
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ API: ExecResult

Exit code is EX_OK

.. py:method:: check_exit_code(expected_codes=(0,), raise_on_err=True, error_info=None, exception_class=CalledProcessError, logger=LOGGER)
.. py:method:: check_exit_code(expected_codes=(0,), raise_on_err=True, error_info=None, exception_class=CalledProcessError, logger=LOGGER, verbose=False)
Check exit code and log/raise for unexpected code.

Expand All @@ -146,6 +146,8 @@ API: ExecResult
:type exception_class: type[exceptions.CalledProcessError]
:param logger: logger instance for error log
:type logger: logging.Logger
:param verbose: produce verbose log in case of failure
:type verbose: bool
:raises exceptions.CalledProcessError: unexpected exit code and raise_on_err enabled

.. py:method:: raise_for_status(expected_codes=(0,), exception_class=CalledProcessError)
Expand Down
7 changes: 7 additions & 0 deletions exec_helpers/exec_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,7 @@ def check_exit_code(
error_info: str | None = None,
exception_class: type[exceptions.CalledProcessError] = exceptions.CalledProcessError,
logger: logging.Logger = LOGGER,
verbose: bool = False,
) -> None:
"""Check exit code and log/raise for unexpected code.
Expand All @@ -595,12 +596,18 @@ def check_exit_code(
:type exception_class: type[exceptions.CalledProcessError]
:param logger: logger instance for error log
:type logger: logging.Logger
:param verbose: produce verbose log in case of failure
:type verbose: bool
:raises exceptions.CalledProcessError: unexpected exit code and raise_on_err enabled
"""
append: str = error_info + "\n" if error_info else ""
expected = tuple(frozenset(expected_codes))
if self.exit_code not in expected:
message = f"{append}Command {self.cmd!r} returned exit code {self.exit_code!s} while expected {expected!s}"
if verbose:
message += f"\nSTDOUT:\n{self.stdout_str}\n\nSTDERR:\n{self.stderr_str}"
else:
message += f"\nBrief STDOUT:\n{self.stdout_brief}\n\nBrief STDERR:\n{self.stderr_brief}"
logger.error(msg=message)
if raise_on_err:
self.raise_for_status(expected_codes=expected, exception_class=exception_class)
Expand Down

0 comments on commit e7c3f77

Please sign in to comment.