from __future__ import annotations import contextlib import typing from collections.abc import Generator ExceptionMapping = typing.Mapping[type[Exception], type[Exception]] @contextlib.contextmanager def map_exceptions(map: ExceptionMapping) -> Generator[None]: try: yield except Exception as exc: # noqa: PIE786 for from_exc, to_exc in map.items(): if isinstance(exc, from_exc): raise to_exc(exc) from exc raise # pragma: no cover class ConnectionNotAvailable(Exception): pass class ProxyError(Exception): pass class UnsupportedProtocol(Exception): pass class ProtocolError(Exception): pass class RemoteProtocolError(ProtocolError): pass class LocalProtocolError(ProtocolError): pass # Timeout errors class TimeoutException(Exception): pass class PoolTimeout(TimeoutException): pass class ConnectTimeout(TimeoutException): pass class ReadTimeout(TimeoutException): pass class WriteTimeout(TimeoutException): pass # Network errors class NetworkError(Exception): pass class ConnectError(NetworkError): pass class ReadError(NetworkError): pass class WriteError(NetworkError): pass