_exceptions.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import contextlib
  2. import typing
  3. ExceptionMapping = typing.Mapping[typing.Type[Exception], typing.Type[Exception]]
  4. @contextlib.contextmanager
  5. def map_exceptions(map: ExceptionMapping) -> typing.Iterator[None]:
  6. try:
  7. yield
  8. except Exception as exc: # noqa: PIE786
  9. for from_exc, to_exc in map.items():
  10. if isinstance(exc, from_exc):
  11. raise to_exc(exc) from exc
  12. raise # pragma: nocover
  13. class ConnectionNotAvailable(Exception):
  14. pass
  15. class ProxyError(Exception):
  16. pass
  17. class UnsupportedProtocol(Exception):
  18. pass
  19. class ProtocolError(Exception):
  20. pass
  21. class RemoteProtocolError(ProtocolError):
  22. pass
  23. class LocalProtocolError(ProtocolError):
  24. pass
  25. # Timeout errors
  26. class TimeoutException(Exception):
  27. pass
  28. class PoolTimeout(TimeoutException):
  29. pass
  30. class ConnectTimeout(TimeoutException):
  31. pass
  32. class ReadTimeout(TimeoutException):
  33. pass
  34. class WriteTimeout(TimeoutException):
  35. pass
  36. # Network errors
  37. class NetworkError(Exception):
  38. pass
  39. class ConnectError(NetworkError):
  40. pass
  41. class ReadError(NetworkError):
  42. pass
  43. class WriteError(NetworkError):
  44. pass