Format: text/x-python
⬇ Download File (1.8 KB)
   1  from __future__ import annotations
   2  
   3  import math
   4  from typing import TypeVar
   5  from warnings import warn
   6  
   7  from ..streams.memory import (
   8      MemoryObjectReceiveStream,
   9      MemoryObjectSendStream,
  10      MemoryObjectStreamState,
  11  )
  12  
  13  T_Item = TypeVar("T_Item")
  14  
  15  
  16  class create_memory_object_stream(
  17      tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]],
  18  ):
  19      """
  20      Create a memory object stream.
  21  
  22      The stream's item type can be annotated like
  23      :func:`create_memory_object_stream[T_Item]`.
  24  
  25      :param max_buffer_size: number of items held in the buffer until ``send()`` starts
  26          blocking
  27      :param item_type: old way of marking the streams with the right generic type for
  28          static typing (does nothing on AnyIO 4)
  29  
  30          .. deprecated:: 4.0
  31            Use ``create_memory_object_stream[YourItemType](...)`` instead.
  32      :return: a tuple of (send stream, receive stream)
  33  
  34      """
  35  
  36      def __new__(  # type: ignore[misc]
  37          cls, max_buffer_size: float = 0, item_type: object = None
  38      ) -> tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]]:
  39          if max_buffer_size != math.inf and not isinstance(max_buffer_size, int):
  40              raise ValueError("max_buffer_size must be either an integer or math.inf")
  41          if max_buffer_size < 0:
  42              raise ValueError("max_buffer_size cannot be negative")
  43          if item_type is not None:
  44              warn(
  45                  "The item_type argument has been deprecated in AnyIO 4.0. "
  46                  "Use create_memory_object_stream[YourItemType](...) instead.",
  47                  DeprecationWarning,
  48                  stacklevel=2,
  49              )
  50  
  51          state = MemoryObjectStreamState[T_Item](max_buffer_size)
  52          return (MemoryObjectSendStream(state), MemoryObjectReceiveStream(state))
  53