82 lines
1.2 KiB
Python
82 lines
1.2 KiB
Python
|
import contextlib
|
||
|
from typing import Iterator, Mapping, Type
|
||
|
|
||
|
ExceptionMapping = Mapping[Type[Exception], Type[Exception]]
|
||
|
|
||
|
|
||
|
@contextlib.contextmanager
|
||
|
def map_exceptions(map: ExceptionMapping) -> Iterator[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: nocover
|
||
|
|
||
|
|
||
|
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
|