python-iterutils 0.2.6__py3-none-any.whl → 0.2.8__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 CHANGED
@@ -2,14 +2,13 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  __author__ = "ChenyangGao <https://chenyanggao.github.io>"
5
- __version__ = (0, 2, 6)
5
+ __version__ = (0, 2, 8)
6
6
  __all__ = [
7
- "Yield", "YieldFrom", "GenStep", "iterable", "async_iterable",
8
- "run_gen_step", "run_gen_step_iter", "as_gen_step",
9
- "as_gen_step_iter", "split_cm", "with_iter_next",
10
- "map", "filter", "reduce", "zip", "chain",
11
- "chain_from_iterable", "chunked", "foreach",
12
- "async_foreach", "through", "async_through",
7
+ "Yield", "YieldFrom", "GenStep", "GenStepIter", "iterable",
8
+ "async_iterable", "run_gen_step", "run_gen_step_iter",
9
+ "as_gen_step", "as_gen_step_iter", "split_cm", "with_iter_next",
10
+ "map", "filter", "reduce", "zip", "chain", "chain_from_iterable",
11
+ "chunked", "foreach", "async_foreach", "through", "async_through",
13
12
  "flatten", "async_flatten", "collect", "async_collect",
14
13
  "group_collect", "async_group_collect", "iter_unique",
15
14
  "async_iter_unique", "wrap_iter", "wrap_aiter", "acc_step",
@@ -68,7 +67,15 @@ class GenStep:
68
67
  """专供 `run_gen_step` 和 `run_gen_step_iter`,说明值需要进一步提取
69
68
  """
70
69
  value: Generator
71
- max_depth: int = -1
70
+ max_depth: int = 0
71
+
72
+
73
+ @dataclass(slots=True, frozen=True, unsafe_hash=True)
74
+ class GenStepIter:
75
+ """专供 `run_gen_step_iter`,说明值需要进一步提取
76
+ """
77
+ value: Generator
78
+ max_depth: int = 0
72
79
 
73
80
 
74
81
  iterable = Iterable.__instancecheck__
@@ -204,14 +211,17 @@ def _run_gen_step_iter(
204
211
  val_type = type(value)
205
212
  if issubclass(val_type, (Yield, YieldFrom)):
206
213
  value = value.value
207
- if isinstance(value, GenStep):
208
- value = _run_gen_step(value.value, value.max_depth)
209
- elif drive_generator and isinstance(value, Generator):
210
- value = _run_gen_step(value, dgen)
211
- if val_type is Yield:
212
- yield value
213
- elif val_type is YieldFrom:
214
- yield from value
214
+ if isinstance(value, GenStepIter):
215
+ yield from _run_gen_step_iter(value.value, value.max_depth)
216
+ else:
217
+ if isinstance(value, GenStep):
218
+ value = _run_gen_step(value.value, value.max_depth)
219
+ elif drive_generator and isinstance(value, Generator):
220
+ value = _run_gen_step(value, dgen)
221
+ if val_type is Yield:
222
+ yield value
223
+ elif val_type is YieldFrom:
224
+ yield from value
215
225
  except BaseException as e:
216
226
  value = throw(e)
217
227
  else:
@@ -221,7 +231,9 @@ def _run_gen_step_iter(
221
231
  val_type = type(value)
222
232
  if issubclass(val_type, (Yield, YieldFrom)):
223
233
  value = value.value
224
- if isinstance(value, GenStep):
234
+ elif isinstance(value, GenStepIter):
235
+ yield from _run_gen_step_iter(value.value, value.max_depth)
236
+ elif isinstance(value, GenStep):
225
237
  value = _run_gen_step(value.value, value.max_depth)
226
238
  elif drive_generator and isinstance(value, Generator):
227
239
  value = _run_gen_step(value, dgen)
@@ -250,6 +262,9 @@ async def _run_gen_step_async_iter(
250
262
  value = value.value
251
263
  if isawaitable(value):
252
264
  value = await value
265
+ elif isinstance(value, GenStepIter):
266
+ async for el in _run_gen_step_async_iter(value.value, value.max_depth):
267
+ yield el
253
268
  elif isinstance(value, GenStep):
254
269
  value = await _run_gen_step_async(value.value, value.max_depth)
255
270
  elif drive_generator and isinstance(value, Generator):
@@ -274,19 +289,23 @@ async def _run_gen_step_async_iter(
274
289
  value = value.value
275
290
  if isawaitable(value):
276
291
  value = await value
277
- elif isinstance(value, GenStep):
278
- value = await _run_gen_step_async(value.value, value.max_depth)
279
- elif drive_generator and isinstance(value, Generator):
280
- value = await _run_gen_step_async(value, dgen)
281
- if val_type is Yield:
282
- yield value
283
- elif val_type is YieldFrom:
284
- if isinstance(value, AsyncIterable):
285
- async for el in value:
286
- yield el
287
- else:
288
- for el in value:
289
- yield el
292
+ if isinstance(value, GenStepIter):
293
+ async for el in _run_gen_step_async_iter(value.value, value.max_depth):
294
+ yield el
295
+ else:
296
+ if isinstance(value, GenStep):
297
+ value = await _run_gen_step_async(value.value, value.max_depth)
298
+ elif drive_generator and isinstance(value, Generator):
299
+ value = await _run_gen_step_async(value, dgen)
300
+ if val_type is Yield:
301
+ yield value
302
+ elif val_type is YieldFrom:
303
+ if isinstance(value, AsyncIterable):
304
+ async for el in value:
305
+ yield el
306
+ else:
307
+ for el in value:
308
+ yield el
290
309
  finally:
291
310
  gen.close()
292
311
 
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-iterutils
3
- Version: 0.2.6
3
+ Version: 0.2.8
4
4
  Summary: Python another itertools.
5
- Home-page: https://github.com/ChenyangGao/web-mount-packs/tree/main/python-module/python-iterutils
5
+ Home-page: https://github.com/ChenyangGao/python-modules/tree/main/python-iterutils
6
6
  License: MIT
7
7
  Keywords: iterable,iterutils
8
8
  Author: ChenyangGao
@@ -23,7 +23,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
23
  Requires-Dist: python-asynctools (>=0.1.3.4)
24
24
  Requires-Dist: python-texttools (>=0.0.3)
25
25
  Requires-Dist: python-undefined (>=0.0.3)
26
- Project-URL: Repository, https://github.com/ChenyangGao/web-mount-packs/tree/main/python-module/python-iterutils
26
+ Project-URL: Repository, https://github.com/ChenyangGao/python-modules/tree/main/python-iterutils
27
27
  Description-Content-Type: text/markdown
28
28
 
29
29
  # Python another itertools.
@@ -0,0 +1,7 @@
1
+ LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
2
+ iterutils/__init__.py,sha256=8EH6wqHA7ogI_VxHRBb68ZeheD0WOTdYOIbWLtrdqBc,37777
3
+ iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ python_iterutils-0.2.8.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
5
+ python_iterutils-0.2.8.dist-info/METADATA,sha256=DF5tmR35s_jxzz46D6P9wmAKOp_GuTJoAAhX8slWSKo,1397
6
+ python_iterutils-0.2.8.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
7
+ python_iterutils-0.2.8.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
2
- iterutils/__init__.py,sha256=gfuQk9Qp4hVpjCciZIyeS-0dRNIFsrO6HkWEZK4UgUo,36876
3
- iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- python_iterutils-0.2.6.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
5
- python_iterutils-0.2.6.dist-info/METADATA,sha256=Bd-gpNnYlks584NbnAndkac7XDznJNBDeeR-xoiKUdY,1427
6
- python_iterutils-0.2.6.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
7
- python_iterutils-0.2.6.dist-info/RECORD,,