python-iterutils 0.2.5.2__tar.gz → 0.2.5.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_iterutils-0.2.5.2 → python_iterutils-0.2.5.3}/PKG-INFO +1 -1
- {python_iterutils-0.2.5.2 → python_iterutils-0.2.5.3}/iterutils/__init__.py +17 -21
- {python_iterutils-0.2.5.2 → python_iterutils-0.2.5.3}/pyproject.toml +1 -1
- {python_iterutils-0.2.5.2 → python_iterutils-0.2.5.3}/LICENSE +0 -0
- {python_iterutils-0.2.5.2 → python_iterutils-0.2.5.3}/iterutils/py.typed +0 -0
- {python_iterutils-0.2.5.2 → python_iterutils-0.2.5.3}/readme.md +0 -0
|
@@ -6,7 +6,7 @@ __version__ = (0, 2, 5)
|
|
|
6
6
|
__all__ = [
|
|
7
7
|
"Yield", "YieldFrom", "iterable", "async_iterable",
|
|
8
8
|
"run_gen_step", "run_gen_step_iter", "as_gen_step",
|
|
9
|
-
"as_gen_step_iter", "split_cm, "
|
|
9
|
+
"as_gen_step_iter", "split_cm", "with_iter_next",
|
|
10
10
|
"map", "filter", "reduce", "zip", "chain",
|
|
11
11
|
"chain_from_iterable", "chunked", "foreach",
|
|
12
12
|
"async_foreach", "through", "async_through",
|
|
@@ -32,7 +32,7 @@ from contextlib import (
|
|
|
32
32
|
from copy import copy
|
|
33
33
|
from dataclasses import dataclass
|
|
34
34
|
from itertools import batched, chain as _chain, pairwise
|
|
35
|
-
from inspect import
|
|
35
|
+
from inspect import iscoroutinefunction, signature
|
|
36
36
|
from sys import _getframe, exc_info
|
|
37
37
|
from _thread import start_new_thread
|
|
38
38
|
from time import sleep, time
|
|
@@ -63,16 +63,9 @@ class YieldFrom:
|
|
|
63
63
|
value: Any
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return isinstance(obj, Iterable)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def async_iterable(obj, /) -> bool:
|
|
73
|
-
"""判断对象是不是 AsyncIterable
|
|
74
|
-
"""
|
|
75
|
-
return isinstance(obj, AsyncIterable)
|
|
66
|
+
iterable = Iterable.__instancecheck__
|
|
67
|
+
async_iterable = AsyncIterable.__instancecheck__
|
|
68
|
+
isawaitable = Awaitable.__instancecheck__
|
|
76
69
|
|
|
77
70
|
|
|
78
71
|
def _coalesce(vals, default=None):
|
|
@@ -114,14 +107,17 @@ async def _run_gen_step_async(gen: Generator, /):
|
|
|
114
107
|
send = gen.send
|
|
115
108
|
throw = gen.throw
|
|
116
109
|
try:
|
|
117
|
-
ret:
|
|
110
|
+
ret: Any = send(None)
|
|
118
111
|
while True:
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
112
|
+
if isawaitable(ret):
|
|
113
|
+
try:
|
|
114
|
+
value: Any = (await ret)
|
|
115
|
+
except BaseException as e:
|
|
116
|
+
ret = throw(e)
|
|
117
|
+
else:
|
|
118
|
+
ret = send(value)
|
|
123
119
|
else:
|
|
124
|
-
ret = send(
|
|
120
|
+
ret = send(ret)
|
|
125
121
|
except StopIteration as e:
|
|
126
122
|
if isawaitable(e.value):
|
|
127
123
|
return await e.value
|
|
@@ -178,10 +174,10 @@ async def _run_gen_step_async_iter(gen: Generator, /) -> AsyncIterator:
|
|
|
178
174
|
send = gen.send
|
|
179
175
|
throw = gen.throw
|
|
180
176
|
try:
|
|
181
|
-
ret:
|
|
177
|
+
ret: Any = send(None)
|
|
182
178
|
while True:
|
|
183
179
|
try:
|
|
184
|
-
if
|
|
180
|
+
if isawaitable(ret):
|
|
185
181
|
value: Any = await ret
|
|
186
182
|
else:
|
|
187
183
|
value = ret.value
|
|
@@ -1124,7 +1120,7 @@ def context[T](
|
|
|
1124
1120
|
add_arg(enter(ctx))
|
|
1125
1121
|
ret = func(*args)
|
|
1126
1122
|
if isawaitable(ret):
|
|
1127
|
-
ret = await ret
|
|
1123
|
+
ret = await cast(Awaitable, ret)
|
|
1128
1124
|
return ret
|
|
1129
1125
|
return call()
|
|
1130
1126
|
else:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|