|
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 |
|
tb = None |
|
|