Format: text/x-python
⬇ Download File (1.2 KB)
   1  import contextlib
   2  import typing
   3  
   4  ExceptionMapping = typing.Mapping[typing.Type[Exception], typing.Type[Exception]]
   5  
   6  
   7  @contextlib.contextmanager
   8  def map_exceptions(map: ExceptionMapping) -> typing.Iterator[None]:
   9      try:
  10          yield
  11      except Exception as exc:  # noqa: PIE786
  12          for from_exc, to_exc in map.items():
  13              if isinstance(exc, from_exc):
  14                  raise to_exc(exc) from exc
  15          raise  # pragma: nocover
  16  
  17  
  18  class ConnectionNotAvailable(Exception):
  19      pass
  20  
  21  
  22  class ProxyError(Exception):
  23      pass
  24  
  25  
  26  class UnsupportedProtocol(Exception):
  27      pass
  28  
  29  
  30  class ProtocolError(Exception):
  31      pass
  32  
  33  
  34  class RemoteProtocolError(ProtocolError):
  35      pass
  36  
  37  
  38  class LocalProtocolError(ProtocolError):
  39      pass
  40  
  41  
  42  # Timeout errors
  43  
  44  
  45  class TimeoutException(Exception):
  46      pass
  47  
  48  
  49  class PoolTimeout(TimeoutException):
  50      pass
  51  
  52  
  53  class ConnectTimeout(TimeoutException):
  54      pass
  55  
  56  
  57  class ReadTimeout(TimeoutException):
  58      pass
  59  
  60  
  61  class WriteTimeout(TimeoutException):
  62      pass
  63  
  64  
  65  # Network errors
  66  
  67  
  68  class NetworkError(Exception):
  69      pass
  70  
  71  
  72  class ConnectError(NetworkError):
  73      pass
  74  
  75  
  76  class ReadError(NetworkError):
  77      pass
  78  
  79  
  80  class WriteError(NetworkError):
  81      pass
  82