| from __future__ import annotations | |
| import typing | |
| from types import TracebackType | |
| def to_bytes( | |
| x: str | bytes, encoding: str | None = None, errors: str | None = None | |
| ) -> bytes: | |
| if isinstance(x, bytes): | |
| return x | |
| elif not isinstance(x, str): | |
| raise TypeError(f"not expecting type {type(x).__name__}") | |
| if encoding or errors: | |
| return x.encode(encoding or "utf-8", errors=errors or "strict") | |
| return x.encode() | |
| def to_str( | |
| x: str | bytes, encoding: str | None = None, errors: str | None = None | |
| ) -> str: | |
| if isinstance(x, str): | |
| return x | |
| elif not isinstance(x, bytes): | |
| raise TypeError(f"not expecting type {type(x).__name__}") | |
| if encoding or errors: | |
| return x.decode(encoding or "utf-8", errors=errors or "strict") | |
| return x.decode() | |
| def reraise( | |
| tp: type[BaseException] | None, | |
| value: BaseException, | |
| tb: TracebackType | None = None, | |
| ) -> typing.NoReturn: | |
| try: | |
| if value.__traceback__ is not tb: | |
| raise value.with_traceback(tb) | |
| raise value | |
| finally: | |
| value = None # type: ignore[assignment] | |
| tb = None | |