| 47 | |
| 48 | |
| 49 | class CalledProcessError(RuntimeError): |
| 50 | def __init__( |
| 51 | self, |
| 52 | returncode: int, |
| 53 | cmd: tuple[str, ...], |
| 54 | stdout: bytes, |
| 55 | stderr: bytes | None, |
| 56 | ) -> None: |
| 57 | super().__init__(returncode, cmd, stdout, stderr) |
| 58 | self.returncode = returncode |
| 59 | self.cmd = cmd |
| 60 | self.stdout = stdout |
| 61 | self.stderr = stderr |
| 62 | |
| 63 | def __bytes__(self) -> bytes: |
| 64 | def _indent_or_none(part: bytes | None) -> bytes: |
| 65 | if part: |
| 66 | return b'\n ' + part.replace(b'\n', b'\n ').rstrip() |
| 67 | else: |
| 68 | return b' (none)' |
| 69 | |
| 70 | return b''.join(( |
| 71 | f'command: {self.cmd!r}\n'.encode(), |
| 72 | f'return code: {self.returncode}\n'.encode(), |
| 73 | b'stdout:', _indent_or_none(self.stdout), b'\n', |
| 74 | b'stderr:', _indent_or_none(self.stderr), |
| 75 | )) |
| 76 | |
| 77 | def __str__(self) -> str: |
| 78 | return self.__bytes__().decode() |
| 79 | |
| 80 | |
| 81 | def _setdefault_kwargs(kwargs: dict[str, Any]) -> None: |
no outgoing calls