forked from STI/Astroport.ONE
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import math
|
|
from typing import Tuple, TypeVar
|
|
from warnings import warn
|
|
|
|
from ..streams.memory import (
|
|
MemoryObjectReceiveStream,
|
|
MemoryObjectSendStream,
|
|
MemoryObjectStreamState,
|
|
)
|
|
|
|
T_Item = TypeVar("T_Item")
|
|
|
|
|
|
class create_memory_object_stream(
|
|
Tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]],
|
|
):
|
|
"""
|
|
Create a memory object stream.
|
|
|
|
The stream's item type can be annotated like
|
|
:func:`create_memory_object_stream[T_Item]`.
|
|
|
|
:param max_buffer_size: number of items held in the buffer until ``send()`` starts
|
|
blocking
|
|
:param item_type: old way of marking the streams with the right generic type for
|
|
static typing (does nothing on AnyIO 4)
|
|
|
|
.. deprecated:: 4.0
|
|
Use ``create_memory_object_stream[YourItemType](...)`` instead.
|
|
:return: a tuple of (send stream, receive stream)
|
|
|
|
"""
|
|
|
|
def __new__( # type: ignore[misc]
|
|
cls, max_buffer_size: float = 0, item_type: object = None
|
|
) -> tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]]:
|
|
if max_buffer_size != math.inf and not isinstance(max_buffer_size, int):
|
|
raise ValueError("max_buffer_size must be either an integer or math.inf")
|
|
if max_buffer_size < 0:
|
|
raise ValueError("max_buffer_size cannot be negative")
|
|
if item_type is not None:
|
|
warn(
|
|
"The item_type argument has been deprecated in AnyIO 4.0. "
|
|
"Use create_memory_object_stream[YourItemType](...) instead.",
|
|
DeprecationWarning,
|
|
stacklevel=2,
|
|
)
|
|
|
|
state = MemoryObjectStreamState[T_Item](max_buffer_size)
|
|
return (MemoryObjectSendStream(state), MemoryObjectReceiveStream(state))
|