| import contextlib |
| import typing |
|
|
| ExceptionMapping = typing.Mapping[typing.Type[Exception], typing.Type[Exception]] |
|
|
|
|
| @contextlib.contextmanager |
| def map_exceptions(map: ExceptionMapping) -> typing.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 |
|
|