summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/litestar/utils/sync.py
diff options
context:
space:
mode:
authorcyfraeviolae <cyfraeviolae>2024-04-03 03:17:55 -0400
committercyfraeviolae <cyfraeviolae>2024-04-03 03:17:55 -0400
commit12cf076118570eebbff08c6b3090e0d4798447a1 (patch)
tree3ba25e17e3c3a5e82316558ba3864b955919ff72 /venv/lib/python3.11/site-packages/litestar/utils/sync.py
parentc45662ff3923b34614ddcc8feb9195541166dcc5 (diff)
no venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/utils/sync.py')
-rw-r--r--venv/lib/python3.11/site-packages/litestar/utils/sync.py79
1 files changed, 0 insertions, 79 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/utils/sync.py b/venv/lib/python3.11/site-packages/litestar/utils/sync.py
deleted file mode 100644
index 02acabf..0000000
--- a/venv/lib/python3.11/site-packages/litestar/utils/sync.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from __future__ import annotations
-
-from typing import (
- AsyncGenerator,
- Awaitable,
- Callable,
- Generic,
- Iterable,
- Iterator,
- TypeVar,
-)
-
-from typing_extensions import ParamSpec
-
-from litestar.concurrency import sync_to_thread
-from litestar.utils.predicates import is_async_callable
-
-__all__ = ("ensure_async_callable", "AsyncIteratorWrapper", "AsyncCallable", "is_async_callable")
-
-
-P = ParamSpec("P")
-T = TypeVar("T")
-
-
-def ensure_async_callable(fn: Callable[P, T]) -> Callable[P, Awaitable[T]]:
- """Ensure that ``fn`` is an asynchronous callable.
- If it is an asynchronous, return the original object, else wrap it in an
- ``AsyncCallable``
- """
- if is_async_callable(fn):
- return fn
- return AsyncCallable(fn) # pyright: ignore
-
-
-class AsyncCallable:
- """Wrap a given callable to be called in a thread pool using
- ``anyio.to_thread.run_sync``, keeping a reference to the original callable as
- :attr:`func`
- """
-
- def __init__(self, fn: Callable[P, T]) -> None: # pyright: ignore
- self.func = fn
-
- def __call__(self, *args: P.args, **kwargs: P.kwargs) -> Awaitable[T]: # pyright: ignore
- return sync_to_thread(self.func, *args, **kwargs) # pyright: ignore
-
-
-class AsyncIteratorWrapper(Generic[T]):
- """Asynchronous generator, wrapping an iterable or iterator."""
-
- __slots__ = ("iterator", "generator")
-
- def __init__(self, iterator: Iterator[T] | Iterable[T]) -> None:
- """Take a sync iterator or iterable and yields values from it asynchronously.
-
- Args:
- iterator: A sync iterator or iterable.
- """
- self.iterator = iterator if isinstance(iterator, Iterator) else iter(iterator)
- self.generator = self._async_generator()
-
- def _call_next(self) -> T:
- try:
- return next(self.iterator)
- except StopIteration as e:
- raise ValueError from e
-
- async def _async_generator(self) -> AsyncGenerator[T, None]:
- while True:
- try:
- yield await sync_to_thread(self._call_next)
- except ValueError:
- return
-
- def __aiter__(self) -> AsyncIteratorWrapper[T]:
- return self
-
- async def __anext__(self) -> T:
- return await self.generator.__anext__()