python-iterutils 0.0.6__py3-none-any.whl → 0.0.7__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,7 +2,7 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  __author__ = "ChenyangGao <https://chenyanggao.github.io>"
5
- __version__ = (0, 0, 6)
5
+ __version__ = (0, 0, 7)
6
6
  __all__ = [
7
7
  "iterable", "async_iterable", "foreach", "async_foreach", "through", "async_through",
8
8
  "wrap_iter", "wrap_aiter", "acc_step", "cut_iter", "run_gen_step", "run_gen_step_iter",
@@ -24,7 +24,7 @@ T = TypeVar("T")
24
24
 
25
25
 
26
26
  class YieldBase(ABC, Iterable):
27
- __slots__ = "value", "identity"
27
+ __slots__ = "value", "identity", "try_call_me"
28
28
  @property
29
29
  @abstractmethod
30
30
  def yield_type(self, /) -> int:
@@ -35,6 +35,7 @@ class YieldBase(ABC, Iterable):
35
35
  class Yield(NamedTuple):
36
36
  value: Any
37
37
  identity: bool = False
38
+ try_call_me: bool = True
38
39
  yield_type = 1 # type: ignore
39
40
 
40
41
 
@@ -212,12 +213,10 @@ def run_gen_step(
212
213
  ret = send(None)
213
214
  while True:
214
215
  try:
216
+ if callable(ret):
217
+ ret = ret()
215
218
  if isawaitable(ret):
216
219
  ret = await ret
217
- elif callable(ret):
218
- ret = ret()
219
- if isawaitable(ret):
220
- ret = await ret
221
220
  except BaseException as e:
222
221
  if threaded:
223
222
  ret = await to_thread(throw, e)
@@ -305,45 +304,53 @@ def run_gen_step_iter(
305
304
  throw = gen.throw
306
305
  if async_:
307
306
  async def process():
307
+ async def extract(ret):
308
+ yield_type = 0
309
+ identity = False
310
+ try_call_me = True
311
+ if isinstance(ret, YieldBase):
312
+ yield_type = ret.yield_type
313
+ ret, identity, try_call_me = ret
314
+ if not identity:
315
+ if try_call_me and callable(ret):
316
+ ret = ret()
317
+ if isawaitable(ret):
318
+ ret = await ret
319
+ return yield_type, ret
308
320
  try:
309
321
  if threaded:
310
322
  ret = await to_thread(send, None)
311
323
  else:
312
324
  ret = send(None)
313
325
  while True:
314
- yield_type = 0
315
- identity = False
316
- if isinstance(ret, YieldBase):
317
- yield_type = ret.yield_type
318
- ret, identity = ret
319
326
  try:
320
- if not identity:
321
- if isawaitable(ret):
322
- ret = await ret
323
- elif callable(ret):
324
- ret = ret()
325
- if isawaitable(ret):
326
- ret = await ret
327
- else:
328
- ret = ret
329
- except BaseException as e:
330
- if threaded:
331
- ret = await to_thread(throw, e)
332
- else:
333
- ret = throw(e)
334
- else:
327
+ yield_type, ret = await extract(ret)
335
328
  match yield_type:
336
329
  case 1:
337
330
  yield ret
338
331
  case 2:
339
332
  async for val in ensure_aiter(ret, threaded=threaded):
340
333
  yield val
334
+ except BaseException as e:
335
+ if threaded:
336
+ ret = await to_thread(throw, e)
337
+ else:
338
+ ret = throw(e)
339
+ else:
341
340
  if threaded:
342
341
  ret = await to_thread(send, ret)
343
342
  else:
344
343
  ret = send(ret)
345
- except (StopIteration, GeneratorExit):
346
- pass
344
+ except StopIteration as e:
345
+ ret = e.value
346
+ if isinstance(ret, YieldBase):
347
+ yield_type, ret = await extract(ret)
348
+ match yield_type:
349
+ case 1:
350
+ yield ret
351
+ case 2:
352
+ async for val in ensure_aiter(ret, threaded=threaded):
353
+ yield val
347
354
  finally:
348
355
  if close is not None:
349
356
  if threaded:
@@ -352,30 +359,39 @@ def run_gen_step_iter(
352
359
  close()
353
360
  else:
354
361
  def process():
362
+ def extract(ret):
363
+ yield_type = 0
364
+ identity = False
365
+ try_call_me = True
366
+ if isinstance(ret, YieldBase):
367
+ yield_type = ret.yield_type
368
+ ret, identity, try_call_me = ret
369
+ if not identity and try_call_me and callable(ret):
370
+ ret = ret()
371
+ return yield_type, ret
355
372
  try:
356
373
  ret = send(None)
357
374
  while True:
358
- yield_type = 0
359
- identity = False
360
- if isinstance(ret, YieldBase):
361
- yield_type = ret.yield_type
362
- ret, identity = ret
363
375
  try:
364
- if not identity:
365
- ret = ret() if callable(ret) else ret
366
- except BaseException as e:
367
- ret = throw(e)
368
- else:
376
+ yield_type, ret = extract(ret)
369
377
  match yield_type:
370
378
  case 1:
371
379
  yield ret
372
380
  case 2:
373
381
  yield from ret
382
+ except BaseException as e:
383
+ ret = throw(e)
384
+ else:
374
385
  ret = send(ret)
375
386
  except StopIteration as e:
376
- return e.value
377
- except GeneratorExit:
378
- pass
387
+ ret = e.value
388
+ if isinstance(ret, YieldBase):
389
+ yield_type, ret = extract(ret)
390
+ match yield_type:
391
+ case 1:
392
+ yield ret
393
+ case 2:
394
+ yield from ret
379
395
  finally:
380
396
  if close is not None:
381
397
  close()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-iterutils
3
- Version: 0.0.6
3
+ Version: 0.0.7
4
4
  Summary: Python another itertools.
5
5
  Home-page: https://github.com/ChenyangGao/web-mount-packs/tree/main/python-module/python-iterutils
6
6
  License: MIT
@@ -0,0 +1,7 @@
1
+ LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
2
+ iterutils/__init__.py,sha256=_oyqibVk_HLON3Kn8EGkmEggNxB9XZnPiNMQrO9z5u4,11992
3
+ iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ python_iterutils-0.0.7.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
5
+ python_iterutils-0.0.7.dist-info/METADATA,sha256=9lmNIU8a1YVGh3cO1TwUqh0sdXh__fjd3sSkha3BT0c,1382
6
+ python_iterutils-0.0.7.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
7
+ python_iterutils-0.0.7.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
2
- iterutils/__init__.py,sha256=aYUSOaw43HFhnmfoT8pawi-KKY4WDOH_iXngkjqQd6o,11355
3
- iterutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- python_iterutils-0.0.6.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
5
- python_iterutils-0.0.6.dist-info/METADATA,sha256=-WzkUWH49JTub_IGyT4aT65QEjso9tjiGWGLzdyc5AQ,1382
6
- python_iterutils-0.0.6.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
7
- python_iterutils-0.0.6.dist-info/RECORD,,