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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-iterutils
3
- Version: 0.2.5.2
3
+ Version: 0.2.5.3
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
@@ -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, ""with_iter_next",
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 isawaitable, iscoroutinefunction, signature
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
- def iterable(obj, /) -> bool:
67
- """判断对象是不是 Iterable
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: Awaitable = send(None)
110
+ ret: Any = send(None)
118
111
  while True:
119
- try:
120
- value: Any = await ret
121
- except BaseException as e:
122
- ret = throw(e)
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(value)
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: Awaitable | Yield | YieldFrom = send(None)
177
+ ret: Any = send(None)
182
178
  while True:
183
179
  try:
184
- if isinstance(ret, Awaitable):
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:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "python-iterutils"
3
- version = "0.2.5.2"
3
+ version = "0.2.5.3"
4
4
  description = "Python another itertools."
5
5
  authors = ["ChenyangGao <wosiwujm@gmail.com>"]
6
6
  license = "MIT"