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