python-iterutils 0.0.2.3__py3-none-any.whl → 0.0.3__py3-none-any.whl
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.
- iterutils/__init__.py +54 -29
- {python_iterutils-0.0.2.3.dist-info → python_iterutils-0.0.3.dist-info}/METADATA +1 -1
- python_iterutils-0.0.3.dist-info/RECORD +7 -0
- python_iterutils-0.0.2.3.dist-info/RECORD +0 -7
- {python_iterutils-0.0.2.3.dist-info → python_iterutils-0.0.3.dist-info}/LICENSE +0 -0
- {python_iterutils-0.0.2.3.dist-info → python_iterutils-0.0.3.dist-info}/WHEEL +0 -0
iterutils/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# encoding: utf-8
|
|
3
3
|
|
|
4
4
|
__author__ = "ChenyangGao <https://chenyanggao.github.io>"
|
|
5
|
-
__version__ = (0, 0,
|
|
5
|
+
__version__ = (0, 0, 3)
|
|
6
6
|
__all__ = [
|
|
7
7
|
"iterable", "async_iterable", "foreach", "async_foreach", "through", "async_through",
|
|
8
8
|
"wrap_iter", "wrap_aiter", "acc_step", "cut_iter",
|
|
@@ -68,47 +68,72 @@ def wrap_iter(
|
|
|
68
68
|
it: Iterable[T],
|
|
69
69
|
/,
|
|
70
70
|
callprev: None | Callable[[T], Any] = None,
|
|
71
|
-
callnext: None | Callable[[T], Any] = None,
|
|
71
|
+
callnext: None | Callable[[T], Any] = None,
|
|
72
|
+
callenter: None | Callable[[Iterable[T]], Any] = None,
|
|
73
|
+
callexit: None | Callable[[Iterable[T], None | BaseException], Any] = None,
|
|
72
74
|
) -> Iterator[T]:
|
|
73
75
|
if not callable(callprev):
|
|
74
76
|
callprev = None
|
|
75
77
|
if not callable(callnext):
|
|
76
78
|
callnext = None
|
|
77
|
-
|
|
78
|
-
if
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
79
|
+
try:
|
|
80
|
+
if callable(callenter):
|
|
81
|
+
callenter(it)
|
|
82
|
+
for e in it:
|
|
83
|
+
if callprev:
|
|
84
|
+
try:
|
|
85
|
+
callprev(e)
|
|
86
|
+
except (StopIteration, GeneratorExit):
|
|
87
|
+
break
|
|
88
|
+
yield e
|
|
89
|
+
if callnext:
|
|
90
|
+
try:
|
|
91
|
+
callnext(e)
|
|
92
|
+
except (StopIteration, GeneratorExit):
|
|
93
|
+
break
|
|
94
|
+
except BaseException as e:
|
|
95
|
+
if callable(callexit):
|
|
96
|
+
callexit(it, e)
|
|
97
|
+
else:
|
|
98
|
+
raise
|
|
99
|
+
finally:
|
|
100
|
+
if callable(callexit):
|
|
101
|
+
callexit(it, None)
|
|
89
102
|
|
|
90
103
|
|
|
91
104
|
async def wrap_aiter(
|
|
92
105
|
it: Iterable[T] | AsyncIterable[T],
|
|
93
106
|
/,
|
|
94
107
|
callprev: None | Callable[[T], Any] = None,
|
|
95
|
-
callnext: None | Callable[[T], Any] = None,
|
|
108
|
+
callnext: None | Callable[[T], Any] = None,
|
|
109
|
+
callenter: None | Callable[[Iterable[T] | AsyncIterable[T]], Any] = None,
|
|
110
|
+
callexit: None | Callable[[Iterable[T] | AsyncIterable[T], None | BaseException], Any] = None,
|
|
96
111
|
threaded: bool = True,
|
|
97
112
|
) -> AsyncIterator[T]:
|
|
98
|
-
callprev = ensure_async(callprev) if callable(callprev) else None
|
|
99
|
-
callnext = ensure_async(callnext) if callable(callnext) else None
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
113
|
+
callprev = ensure_async(callprev, threaded=threaded) if callable(callprev) else None
|
|
114
|
+
callnext = ensure_async(callnext, threaded=threaded) if callable(callnext) else None
|
|
115
|
+
try:
|
|
116
|
+
async for e in ensure_aiter(it, threaded=threaded):
|
|
117
|
+
if callprev:
|
|
118
|
+
try:
|
|
119
|
+
await callprev(e)
|
|
120
|
+
except (StopAsyncIteration, GeneratorExit):
|
|
121
|
+
break
|
|
122
|
+
yield e
|
|
123
|
+
if callnext:
|
|
124
|
+
try:
|
|
125
|
+
await callnext(e)
|
|
126
|
+
except (StopAsyncIteration, GeneratorExit):
|
|
127
|
+
break
|
|
128
|
+
except BaseException as e:
|
|
129
|
+
if callable(callexit):
|
|
130
|
+
if not await ensure_async(callexit, threaded=threaded)(it, e):
|
|
131
|
+
raise
|
|
132
|
+
else:
|
|
133
|
+
raise
|
|
134
|
+
finally:
|
|
135
|
+
if callable(callexit):
|
|
136
|
+
await ensure_async(callexit, threaded=threaded)(it, None)
|
|
112
137
|
|
|
113
138
|
|
|
114
139
|
def acc_step(
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
+
iterutils/__init__.py,sha256=OgXsu7O6TGsuz0Gwje-zNs7x_e_gd7_i3kbnCQSk_Tg,4535
|
|
3
|
+
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
python_iterutils-0.0.3.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
+
python_iterutils-0.0.3.dist-info/METADATA,sha256=zoTHrnVp4rEPFIglB0w9wXnPWFiClAa9njBGsOGvRAk,1382
|
|
6
|
+
python_iterutils-0.0.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
7
|
+
python_iterutils-0.0.3.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
2
|
-
iterutils/__init__.py,sha256=ipmyPc_A1QPWhSxaBQwCEtMH9iXEnEz_s9gWwjSOCA0,3505
|
|
3
|
-
iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
python_iterutils-0.0.2.3.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
|
5
|
-
python_iterutils-0.0.2.3.dist-info/METADATA,sha256=ueupgxYDzQ_0cvoaGCJSsmDKqFiM2DDWMPNvGtqOAtM,1384
|
|
6
|
-
python_iterutils-0.0.2.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
7
|
-
python_iterutils-0.0.2.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|