|
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: |
|
for from_exc, to_exc in map.items(): |
|
if isinstance(exc, from_exc): |
|
raise to_exc(exc) from exc |
|
raise |
|
|
|
|
|
class ConnectionNotAvailable(Exception): |
|
pass |
|
|
|
|
|
class ProxyError(Exception): |
|
pass |
|
|
|
|
|
class UnsupportedProtocol(Exception): |
|
pass |
|
|
|
|
|
class ProtocolError(Exception): |
|
pass |
|
|
|
|
|
class RemoteProtocolError(ProtocolError): |
|
pass |
|
|
|
|
|
class LocalProtocolError(ProtocolError): |
|
pass |
|
|
|
|
|
|
|
|
|
|
|
class TimeoutException(Exception): |
|
pass |
|
|
|
|
|
class PoolTimeout(TimeoutException): |
|
pass |
|
|
|
|
|
class ConnectTimeout(TimeoutException): |
|
pass |
|
|
|
|
|
class ReadTimeout(TimeoutException): |
|
pass |
|
|
|
|
|
class WriteTimeout(TimeoutException): |
|
pass |
|
|
|
|
|
|
|
|
|
|
|
class NetworkError(Exception): |
|
pass |
|
|
|
|
|
class ConnectError(NetworkError): |
|
pass |
|
|
|
|
|
class ReadError(NetworkError): |
|
pass |
|
|
|
|
|
class WriteError(NetworkError): |
|
pass |
|
|