base.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from __future__ import annotations
  2. import ssl
  3. import time
  4. import typing
  5. SOCKET_OPTION = typing.Union[
  6. typing.Tuple[int, int, int],
  7. typing.Tuple[int, int, typing.Union[bytes, bytearray]],
  8. typing.Tuple[int, int, None, int],
  9. ]
  10. class NetworkStream:
  11. def read(self, max_bytes: int, timeout: float | None = None) -> bytes:
  12. raise NotImplementedError() # pragma: nocover
  13. def write(self, buffer: bytes, timeout: float | None = None) -> None:
  14. raise NotImplementedError() # pragma: nocover
  15. def close(self) -> None:
  16. raise NotImplementedError() # pragma: nocover
  17. def start_tls(
  18. self,
  19. ssl_context: ssl.SSLContext,
  20. server_hostname: str | None = None,
  21. timeout: float | None = None,
  22. ) -> NetworkStream:
  23. raise NotImplementedError() # pragma: nocover
  24. def get_extra_info(self, info: str) -> typing.Any:
  25. return None # pragma: nocover
  26. class NetworkBackend:
  27. def connect_tcp(
  28. self,
  29. host: str,
  30. port: int,
  31. timeout: float | None = None,
  32. local_address: str | None = None,
  33. socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
  34. ) -> NetworkStream:
  35. raise NotImplementedError() # pragma: nocover
  36. def connect_unix_socket(
  37. self,
  38. path: str,
  39. timeout: float | None = None,
  40. socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
  41. ) -> NetworkStream:
  42. raise NotImplementedError() # pragma: nocover
  43. def sleep(self, seconds: float) -> None:
  44. time.sleep(seconds) # pragma: nocover
  45. class AsyncNetworkStream:
  46. async def read(self, max_bytes: int, timeout: float | None = None) -> bytes:
  47. raise NotImplementedError() # pragma: nocover
  48. async def write(self, buffer: bytes, timeout: float | None = None) -> None:
  49. raise NotImplementedError() # pragma: nocover
  50. async def aclose(self) -> None:
  51. raise NotImplementedError() # pragma: nocover
  52. async def start_tls(
  53. self,
  54. ssl_context: ssl.SSLContext,
  55. server_hostname: str | None = None,
  56. timeout: float | None = None,
  57. ) -> AsyncNetworkStream:
  58. raise NotImplementedError() # pragma: nocover
  59. def get_extra_info(self, info: str) -> typing.Any:
  60. return None # pragma: nocover
  61. class AsyncNetworkBackend:
  62. async def connect_tcp(
  63. self,
  64. host: str,
  65. port: int,
  66. timeout: float | None = None,
  67. local_address: str | None = None,
  68. socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
  69. ) -> AsyncNetworkStream:
  70. raise NotImplementedError() # pragma: nocover
  71. async def connect_unix_socket(
  72. self,
  73. path: str,
  74. timeout: float | None = None,
  75. socket_options: typing.Iterable[SOCKET_OPTION] | None = None,
  76. ) -> AsyncNetworkStream:
  77. raise NotImplementedError() # pragma: nocover
  78. async def sleep(self, seconds: float) -> None:
  79. raise NotImplementedError() # pragma: nocover