ez-a-sync 0.22.14__py3-none-any.whl → 0.22.16__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.
Potentially problematic release.
This version of ez-a-sync might be problematic. Click here for more details.
- a_sync/ENVIRONMENT_VARIABLES.py +37 -5
- a_sync/__init__.py +53 -12
- a_sync/_smart.py +231 -28
- a_sync/_typing.py +112 -15
- a_sync/a_sync/__init__.py +35 -10
- a_sync/a_sync/_descriptor.py +248 -38
- a_sync/a_sync/_flags.py +78 -9
- a_sync/a_sync/_helpers.py +46 -13
- a_sync/a_sync/_kwargs.py +33 -8
- a_sync/a_sync/_meta.py +149 -28
- a_sync/a_sync/abstract.py +150 -28
- a_sync/a_sync/base.py +34 -16
- a_sync/a_sync/config.py +85 -14
- a_sync/a_sync/decorator.py +441 -139
- a_sync/a_sync/function.py +709 -147
- a_sync/a_sync/method.py +437 -110
- a_sync/a_sync/modifiers/__init__.py +85 -5
- a_sync/a_sync/modifiers/cache/__init__.py +116 -17
- a_sync/a_sync/modifiers/cache/memory.py +130 -20
- a_sync/a_sync/modifiers/limiter.py +101 -22
- a_sync/a_sync/modifiers/manager.py +142 -16
- a_sync/a_sync/modifiers/semaphores.py +121 -15
- a_sync/a_sync/property.py +383 -82
- a_sync/a_sync/singleton.py +44 -19
- a_sync/aliases.py +0 -1
- a_sync/asyncio/__init__.py +140 -1
- a_sync/asyncio/as_completed.py +213 -79
- a_sync/asyncio/create_task.py +70 -20
- a_sync/asyncio/gather.py +125 -58
- a_sync/asyncio/utils.py +3 -3
- a_sync/exceptions.py +248 -26
- a_sync/executor.py +164 -69
- a_sync/future.py +1227 -168
- a_sync/iter.py +173 -56
- a_sync/primitives/__init__.py +14 -2
- a_sync/primitives/_debug.py +72 -18
- a_sync/primitives/_loggable.py +41 -10
- a_sync/primitives/locks/__init__.py +5 -2
- a_sync/primitives/locks/counter.py +107 -38
- a_sync/primitives/locks/event.py +21 -7
- a_sync/primitives/locks/prio_semaphore.py +262 -63
- a_sync/primitives/locks/semaphore.py +138 -89
- a_sync/primitives/queue.py +601 -60
- a_sync/sphinx/__init__.py +0 -1
- a_sync/sphinx/ext.py +160 -50
- a_sync/task.py +313 -112
- a_sync/utils/__init__.py +12 -6
- a_sync/utils/iterators.py +170 -50
- {ez_a_sync-0.22.14.dist-info → ez_a_sync-0.22.16.dist-info}/METADATA +1 -1
- ez_a_sync-0.22.16.dist-info/RECORD +74 -0
- {ez_a_sync-0.22.14.dist-info → ez_a_sync-0.22.16.dist-info}/WHEEL +1 -1
- tests/conftest.py +1 -2
- tests/executor.py +250 -9
- tests/fixtures.py +61 -32
- tests/test_abstract.py +22 -4
- tests/test_as_completed.py +54 -21
- tests/test_base.py +264 -19
- tests/test_cache.py +31 -15
- tests/test_decorator.py +54 -28
- tests/test_executor.py +31 -13
- tests/test_future.py +45 -8
- tests/test_gather.py +8 -2
- tests/test_helpers.py +2 -0
- tests/test_iter.py +55 -13
- tests/test_limiter.py +5 -3
- tests/test_meta.py +23 -9
- tests/test_modified.py +4 -1
- tests/test_semaphore.py +15 -8
- tests/test_singleton.py +28 -11
- tests/test_task.py +162 -36
- ez_a_sync-0.22.14.dist-info/RECORD +0 -74
- {ez_a_sync-0.22.14.dist-info → ez_a_sync-0.22.16.dist-info}/LICENSE.txt +0 -0
- {ez_a_sync-0.22.14.dist-info → ez_a_sync-0.22.16.dist-info}/top_level.txt +0 -0
tests/test_task.py
CHANGED
|
@@ -3,43 +3,101 @@ import pytest
|
|
|
3
3
|
|
|
4
4
|
from a_sync import TaskMapping, create_task, exceptions
|
|
5
5
|
|
|
6
|
+
|
|
6
7
|
@pytest.mark.asyncio_cooperative
|
|
7
8
|
async def test_create_task():
|
|
8
|
-
|
|
9
|
+
"""Test the creation of an asynchronous task.
|
|
10
|
+
|
|
11
|
+
Verifies that a task can be created using the `create_task`
|
|
12
|
+
function with a coroutine and a specified name.
|
|
13
|
+
|
|
14
|
+
See Also:
|
|
15
|
+
- :func:`a_sync.create_task`
|
|
16
|
+
"""
|
|
17
|
+
t = create_task(coro=asyncio.sleep(0), name="test")
|
|
18
|
+
assert t.get_name() == "test", t
|
|
19
|
+
await t
|
|
20
|
+
|
|
9
21
|
|
|
10
22
|
@pytest.mark.asyncio_cooperative
|
|
11
|
-
async def test_persistent_task():
|
|
23
|
+
async def test_persistent_task(): # sourcery skip: simplify-boolean-comparison
|
|
24
|
+
"""Test the persistence of a task without a local reference.
|
|
25
|
+
|
|
26
|
+
Checks if a task created without a local reference
|
|
27
|
+
completes successfully by setting a nonlocal variable.
|
|
28
|
+
The test ensures that the task completes by verifying
|
|
29
|
+
the change in the nonlocal variable.
|
|
30
|
+
|
|
31
|
+
See Also:
|
|
32
|
+
- :func:`a_sync.create_task`
|
|
33
|
+
"""
|
|
12
34
|
check = False
|
|
35
|
+
|
|
13
36
|
async def task():
|
|
14
37
|
await asyncio.sleep(1)
|
|
15
38
|
nonlocal check
|
|
16
39
|
check = True
|
|
40
|
+
|
|
17
41
|
create_task(coro=task(), skip_gc_until_done=True)
|
|
18
|
-
# there is no local reference to the newly created task. does it still complete?
|
|
42
|
+
# there is no local reference to the newly created task. does it still complete?
|
|
19
43
|
await asyncio.sleep(2)
|
|
20
44
|
assert check is True
|
|
21
45
|
|
|
46
|
+
|
|
22
47
|
@pytest.mark.asyncio_cooperative
|
|
23
48
|
async def test_pruning():
|
|
49
|
+
"""Test task creation and handling without errors.
|
|
50
|
+
|
|
51
|
+
Ensures that tasks can be created without causing errors.
|
|
52
|
+
This test does not explicitly check for task pruning, despite
|
|
53
|
+
its name, but rather focuses on task creation stability.
|
|
54
|
+
|
|
55
|
+
See Also:
|
|
56
|
+
- :func:`a_sync.create_task`
|
|
57
|
+
"""
|
|
58
|
+
|
|
24
59
|
async def task():
|
|
25
60
|
return
|
|
61
|
+
|
|
26
62
|
create_task(coro=task(), skip_gc_until_done=True)
|
|
27
63
|
await asyncio.sleep(0)
|
|
28
64
|
# previously, it failed here
|
|
29
65
|
create_task(coro=task(), skip_gc_until_done=True)
|
|
30
66
|
|
|
67
|
+
|
|
31
68
|
@pytest.mark.asyncio_cooperative
|
|
32
69
|
async def test_task_mapping_init():
|
|
70
|
+
"""Test initialization of TaskMapping.
|
|
71
|
+
|
|
72
|
+
Verifies that the :class:`TaskMapping` class initializes correctly
|
|
73
|
+
with the provided coroutine function and arguments. Checks
|
|
74
|
+
the handling of function arguments and the task name.
|
|
75
|
+
|
|
76
|
+
See Also:
|
|
77
|
+
- :class:`a_sync.TaskMapping`
|
|
78
|
+
"""
|
|
33
79
|
tasks = TaskMapping(_coro_fn)
|
|
34
|
-
assert
|
|
80
|
+
assert (
|
|
81
|
+
tasks._wrapped_func is _coro_fn
|
|
82
|
+
), f"{tasks._wrapped_func} , {_coro_fn}, {tasks._wrapped_func == _coro_fn}"
|
|
35
83
|
assert tasks._wrapped_func_kwargs == {}
|
|
36
84
|
assert tasks._name is None
|
|
37
|
-
tasks = TaskMapping(_coro_fn, name=
|
|
38
|
-
assert tasks._wrapped_func_kwargs == {
|
|
85
|
+
tasks = TaskMapping(_coro_fn, name="test", kwarg0=1, kwarg1=None)
|
|
86
|
+
assert tasks._wrapped_func_kwargs == {"kwarg0": 1, "kwarg1": None}
|
|
39
87
|
assert tasks._name == "test"
|
|
40
88
|
|
|
89
|
+
|
|
41
90
|
@pytest.mark.asyncio_cooperative
|
|
42
91
|
async def test_task_mapping():
|
|
92
|
+
"""Test the functionality of TaskMapping.
|
|
93
|
+
|
|
94
|
+
Checks the behavior of :class:`TaskMapping`, including task
|
|
95
|
+
creation, retrieval, and execution. Verifies the ability
|
|
96
|
+
to await the mapping and checks the return values of tasks.
|
|
97
|
+
|
|
98
|
+
See Also:
|
|
99
|
+
- :class:`a_sync.TaskMapping`
|
|
100
|
+
"""
|
|
43
101
|
tasks = TaskMapping(_coro_fn)
|
|
44
102
|
# does it return the correct type
|
|
45
103
|
assert isinstance(tasks[0], asyncio.Task)
|
|
@@ -52,11 +110,28 @@ async def test_task_mapping():
|
|
|
52
110
|
# can we await the mapping?
|
|
53
111
|
assert await tasks == {0: "1", 1: "22"}
|
|
54
112
|
# can we await one from scratch?
|
|
55
|
-
assert await TaskMapping(_coro_fn, range(5)) == {
|
|
113
|
+
assert await TaskMapping(_coro_fn, range(5)) == {
|
|
114
|
+
0: "1",
|
|
115
|
+
1: "22",
|
|
116
|
+
2: "333",
|
|
117
|
+
3: "4444",
|
|
118
|
+
4: "55555",
|
|
119
|
+
}
|
|
56
120
|
assert len(tasks) == 2
|
|
57
|
-
|
|
121
|
+
|
|
122
|
+
|
|
58
123
|
@pytest.mark.asyncio_cooperative
|
|
59
124
|
async def test_task_mapping_map_with_sync_iter():
|
|
125
|
+
"""Test TaskMapping with a synchronous iterator.
|
|
126
|
+
|
|
127
|
+
Verifies that :class:`TaskMapping` can map over a synchronous
|
|
128
|
+
iterator and correctly handle keys, values, and items.
|
|
129
|
+
Ensures that mapping in progress raises a :class:`RuntimeError`
|
|
130
|
+
when attempted concurrently.
|
|
131
|
+
|
|
132
|
+
See Also:
|
|
133
|
+
- :class:`a_sync.TaskMapping`
|
|
134
|
+
"""
|
|
60
135
|
tasks = TaskMapping(_coro_fn)
|
|
61
136
|
i = 0
|
|
62
137
|
async for k, v in tasks.map(range(5)):
|
|
@@ -69,9 +144,9 @@ async def test_task_mapping_map_with_sync_iter():
|
|
|
69
144
|
...
|
|
70
145
|
i += 1
|
|
71
146
|
tasks = TaskMapping(_coro_fn)
|
|
72
|
-
async for k in tasks.map(range(5), pop=False, yields=
|
|
147
|
+
async for k in tasks.map(range(5), pop=False, yields="keys"):
|
|
73
148
|
assert isinstance(k, int)
|
|
74
|
-
|
|
149
|
+
|
|
75
150
|
# test keys
|
|
76
151
|
for k in tasks.keys():
|
|
77
152
|
assert isinstance(k, int)
|
|
@@ -81,7 +156,7 @@ async def test_task_mapping_map_with_sync_iter():
|
|
|
81
156
|
assert isinstance(k, int)
|
|
82
157
|
async for k in tasks.keys():
|
|
83
158
|
assert isinstance(k, int)
|
|
84
|
-
|
|
159
|
+
|
|
85
160
|
# test values
|
|
86
161
|
for v in tasks.values():
|
|
87
162
|
assert isinstance(v, asyncio.Future)
|
|
@@ -92,7 +167,7 @@ async def test_task_mapping_map_with_sync_iter():
|
|
|
92
167
|
assert isinstance(v, str)
|
|
93
168
|
async for v in tasks.values():
|
|
94
169
|
assert isinstance(v, str)
|
|
95
|
-
|
|
170
|
+
|
|
96
171
|
# test items
|
|
97
172
|
for k, v in tasks.items():
|
|
98
173
|
assert isinstance(k, int)
|
|
@@ -106,12 +181,25 @@ async def test_task_mapping_map_with_sync_iter():
|
|
|
106
181
|
async for k, v in tasks.items():
|
|
107
182
|
assert isinstance(k, int)
|
|
108
183
|
assert isinstance(v, str)
|
|
109
|
-
|
|
184
|
+
|
|
185
|
+
|
|
110
186
|
@pytest.mark.asyncio_cooperative
|
|
111
187
|
async def test_task_mapping_map_with_async_iter():
|
|
188
|
+
"""Test TaskMapping with an asynchronous iterator.
|
|
189
|
+
|
|
190
|
+
Verifies that :class:`TaskMapping` can map over an asynchronous
|
|
191
|
+
iterator and correctly handle keys, values, and items.
|
|
192
|
+
Ensures that mapping in progress raises a :class:`RuntimeError`
|
|
193
|
+
when attempted concurrently.
|
|
194
|
+
|
|
195
|
+
See Also:
|
|
196
|
+
- :class:`a_sync.TaskMapping`
|
|
197
|
+
"""
|
|
198
|
+
|
|
112
199
|
async def async_iter():
|
|
113
200
|
for i in range(5):
|
|
114
201
|
yield i
|
|
202
|
+
|
|
115
203
|
tasks = TaskMapping(_coro_fn)
|
|
116
204
|
i = 0
|
|
117
205
|
async for k, v in tasks.map(async_iter()):
|
|
@@ -124,9 +212,9 @@ async def test_task_mapping_map_with_async_iter():
|
|
|
124
212
|
...
|
|
125
213
|
i += 1
|
|
126
214
|
tasks = TaskMapping(_coro_fn)
|
|
127
|
-
async for k in tasks.map(async_iter(), pop=False, yields=
|
|
215
|
+
async for k in tasks.map(async_iter(), pop=False, yields="keys"):
|
|
128
216
|
assert isinstance(k, int)
|
|
129
|
-
|
|
217
|
+
|
|
130
218
|
# test keys
|
|
131
219
|
for k in tasks.keys():
|
|
132
220
|
assert isinstance(k, int)
|
|
@@ -138,9 +226,13 @@ async def test_task_mapping_map_with_async_iter():
|
|
|
138
226
|
assert isinstance(k, int)
|
|
139
227
|
assert await tasks.keys().aiterbykeys() == list(range(5))
|
|
140
228
|
assert await tasks.keys().aiterbyvalues() == list(range(5))
|
|
141
|
-
assert await tasks.keys().aiterbykeys(reverse=True) == sorted(
|
|
142
|
-
|
|
143
|
-
|
|
229
|
+
assert await tasks.keys().aiterbykeys(reverse=True) == sorted(
|
|
230
|
+
range(5), reverse=True
|
|
231
|
+
)
|
|
232
|
+
assert await tasks.keys().aiterbyvalues(reverse=True) == sorted(
|
|
233
|
+
range(5), reverse=True
|
|
234
|
+
)
|
|
235
|
+
|
|
144
236
|
# test values
|
|
145
237
|
for v in tasks.values():
|
|
146
238
|
assert isinstance(v, asyncio.Future)
|
|
@@ -153,9 +245,13 @@ async def test_task_mapping_map_with_async_iter():
|
|
|
153
245
|
assert isinstance(v, str)
|
|
154
246
|
assert await tasks.values().aiterbykeys() == [str(i) * i for i in range(1, 6)]
|
|
155
247
|
assert await tasks.values().aiterbyvalues() == [str(i) * i for i in range(1, 6)]
|
|
156
|
-
assert await tasks.values().aiterbykeys(reverse=True) == [
|
|
157
|
-
|
|
158
|
-
|
|
248
|
+
assert await tasks.values().aiterbykeys(reverse=True) == [
|
|
249
|
+
str(i) * i for i in sorted(range(1, 6), reverse=True)
|
|
250
|
+
]
|
|
251
|
+
assert await tasks.values().aiterbyvalues(reverse=True) == [
|
|
252
|
+
str(i) * i for i in sorted(range(1, 6), reverse=True)
|
|
253
|
+
]
|
|
254
|
+
|
|
159
255
|
# test items
|
|
160
256
|
for k, v in tasks.items():
|
|
161
257
|
assert isinstance(k, int)
|
|
@@ -169,42 +265,72 @@ async def test_task_mapping_map_with_async_iter():
|
|
|
169
265
|
async for k, v in tasks.items():
|
|
170
266
|
assert isinstance(k, int)
|
|
171
267
|
assert isinstance(v, str)
|
|
172
|
-
assert await tasks.items().aiterbykeys() == [
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
assert await tasks.items(
|
|
268
|
+
assert await tasks.items().aiterbykeys() == [
|
|
269
|
+
(i, str(i + 1) * (i + 1)) for i in range(5)
|
|
270
|
+
]
|
|
271
|
+
assert await tasks.items().aiterbyvalues() == [
|
|
272
|
+
(i, str(i + 1) * (i + 1)) for i in range(5)
|
|
273
|
+
]
|
|
274
|
+
assert await tasks.items().aiterbykeys(reverse=True) == [
|
|
275
|
+
(i, str(i + 1) * (i + 1)) for i in sorted(range(5), reverse=True)
|
|
276
|
+
]
|
|
277
|
+
assert await tasks.items(pop=True).aiterbyvalues(reverse=True) == [
|
|
278
|
+
(i, str(i + 1) * (i + 1)) for i in sorted(range(5), reverse=True)
|
|
279
|
+
]
|
|
176
280
|
assert not tasks # did pop work?
|
|
177
281
|
|
|
282
|
+
|
|
178
283
|
def test_taskmapping_views_sync():
|
|
284
|
+
"""Test synchronous views of TaskMapping.
|
|
285
|
+
|
|
286
|
+
Checks the synchronous access to keys, values, and items
|
|
287
|
+
in :class:`TaskMapping`. Verifies the state of these views before
|
|
288
|
+
and after gathering tasks.
|
|
289
|
+
|
|
290
|
+
See Also:
|
|
291
|
+
- :class:`a_sync.TaskMapping`
|
|
292
|
+
"""
|
|
179
293
|
tasks = TaskMapping(_coro_fn, range(5))
|
|
180
|
-
|
|
294
|
+
|
|
181
295
|
# keys are currently empty until the loop has a chance to run
|
|
182
|
-
|
|
183
|
-
assert len(tasks.values()) == 0
|
|
184
|
-
assert len(tasks.items()) == 0
|
|
185
|
-
|
|
296
|
+
_assert_len_dictviews(tasks, 0)
|
|
186
297
|
tasks.gather()
|
|
187
298
|
|
|
188
|
-
|
|
189
|
-
assert len(tasks.values()) == 5
|
|
190
|
-
assert len(tasks.items()) == 5
|
|
191
|
-
|
|
299
|
+
_assert_len_dictviews(tasks, 5)
|
|
192
300
|
for k in tasks.keys():
|
|
193
301
|
assert isinstance(k, int)
|
|
194
302
|
|
|
195
303
|
# test values
|
|
196
304
|
for v in tasks.values():
|
|
197
305
|
assert isinstance(v, asyncio.Future)
|
|
198
|
-
|
|
306
|
+
|
|
199
307
|
# test items
|
|
200
308
|
for k, v in tasks.items():
|
|
201
309
|
assert isinstance(k, int)
|
|
202
310
|
assert isinstance(v, asyncio.Future)
|
|
203
|
-
|
|
311
|
+
|
|
204
312
|
assert len(tasks.keys()) == 5
|
|
205
313
|
for k in tasks.keys():
|
|
206
314
|
assert isinstance(k, int)
|
|
207
315
|
|
|
316
|
+
|
|
317
|
+
def _assert_len_dictviews(tasks, i):
|
|
318
|
+
assert len(tasks.keys()) == i
|
|
319
|
+
assert len(tasks.values()) == i
|
|
320
|
+
assert len(tasks.items()) == i
|
|
321
|
+
|
|
322
|
+
|
|
208
323
|
async def _coro_fn(i: int) -> str:
|
|
324
|
+
"""Coroutine function for testing.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
i: An integer input.
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
A string representation of the incremented input.
|
|
331
|
+
|
|
332
|
+
See Also:
|
|
333
|
+
- :func:`a_sync.TaskMapping`
|
|
334
|
+
"""
|
|
209
335
|
i += 1
|
|
210
336
|
return str(i) * i
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
a_sync/ENVIRONMENT_VARIABLES.py,sha256=mbOTOeyDyc90OA0CcTNzaOHKm3YT3myanQvVcefdtBU,462
|
|
2
|
-
a_sync/__init__.py,sha256=iPrNPP5i2H02HmX050hz-XqAYwAwrlyh3hkXRegdy7E,2204
|
|
3
|
-
a_sync/_smart.py,sha256=mZ7zD8usbRG3dEjddwnz46gwFxcDjPri6na7vCPX9hw,6989
|
|
4
|
-
a_sync/_typing.py,sha256=GTCqBBgeCGoB_wLb0WoizBrrYf2a-2GXgK82CZQKP2E,5368
|
|
5
|
-
a_sync/aliases.py,sha256=kkv7JGdlJeyy2x8JauCy3D6spbYBCTMgNtC_QrT118s,213
|
|
6
|
-
a_sync/exceptions.py,sha256=0VHUEBgTVmaF8LIuFINCv1YCuC_GfCJgmwnPP3I9HRI,6597
|
|
7
|
-
a_sync/executor.py,sha256=ztaDCWQnQKoxrMHuEKPH1lm-gJWYinNjCeOTa3riBbk,13433
|
|
8
|
-
a_sync/future.py,sha256=zQy3Gv1UvX399Yx5-W-ygxYZSS_C3aEhQlEz8gyoB90,26093
|
|
9
|
-
a_sync/iter.py,sha256=riMXy2RSxmOtgv-L521YSWSTeZ8QXWhc8irU6mjEgkk,20804
|
|
10
|
-
a_sync/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
a_sync/task.py,sha256=FEf788GSKzBCOqjtljlqKlisT5ZyK_kCa-d_-KTSuOc,28213
|
|
12
|
-
a_sync/a_sync/__init__.py,sha256=V93WFLhKbDR9oSegknq6ub-M85HT983eIt_Tov0Reos,1092
|
|
13
|
-
a_sync/a_sync/_descriptor.py,sha256=jhcPnzJ3PJ4o7l_wf5DbmH-sKQxS14Yd1uh_riYq_rU,7851
|
|
14
|
-
a_sync/a_sync/_flags.py,sha256=2-97KHE-Hjb5RPnx4AU2h5TJ2nR7tBdnzqHWvkLgOs8,1669
|
|
15
|
-
a_sync/a_sync/_helpers.py,sha256=z6TRvqlXUdLKRyw0ZCZyzY6FvkNyoGt8_XgEGjV-UaU,1837
|
|
16
|
-
a_sync/a_sync/_kwargs.py,sha256=szblXLK1LF2S71LsLGQTCFM4v9E0xJP-rdkL6O2xKJo,1378
|
|
17
|
-
a_sync/a_sync/_meta.py,sha256=0rNZ1jZMhsHlxXsKeU88B5xOW8PMcis2Y8vbK0ZzrrM,5973
|
|
18
|
-
a_sync/a_sync/abstract.py,sha256=PzT_Uo7F4DR6cU1CGl8q_bFOiw95qbXnzCZXt_HfN0g,3261
|
|
19
|
-
a_sync/a_sync/base.py,sha256=qE7p2nXmpwpMulCnZcBV1I5sXiWGtcmtAEZVrqAt0rc,7363
|
|
20
|
-
a_sync/a_sync/config.py,sha256=b9YDs3cjoyxiwxIEld78dyVWsv1rGZMLutJVQauT29Y,2764
|
|
21
|
-
a_sync/a_sync/decorator.py,sha256=s_KqDzIki3NvsXnjd9dlUnHgmOlM8HwcjOjl9rlzOK0,8424
|
|
22
|
-
a_sync/a_sync/function.py,sha256=94qtv62rgJmIOwwYLdaTth53HJ3a_VSR4dDnwqpg-PU,28643
|
|
23
|
-
a_sync/a_sync/method.py,sha256=Iq1FaklAzBavNHIR9FHwRVik1dAGlAPhOhsjMrWZtWU,23291
|
|
24
|
-
a_sync/a_sync/property.py,sha256=--JEWuGLI47kV9-LL2psW5R6u1dlSgGISNgy-ZChCmA,18151
|
|
25
|
-
a_sync/a_sync/singleton.py,sha256=dHFwuSkOYP58Dn_I6zciMpJmeG1ENMOjJ1j8lOFQrl0,1459
|
|
26
|
-
a_sync/a_sync/modifiers/__init__.py,sha256=0kOpApvcDIBr37645vY50aG6lIdccNG_IupZZsAawBM,1052
|
|
27
|
-
a_sync/a_sync/modifiers/limiter.py,sha256=WtMh-F_4O6kxAYGiCKTnTYu2RrPQNov3dDYB4OTigjk,1763
|
|
28
|
-
a_sync/a_sync/modifiers/manager.py,sha256=Taknn8MjVbelzmRECd7mNvcSi-eX9_SZpW11bEWN8UQ,3637
|
|
29
|
-
a_sync/a_sync/modifiers/semaphores.py,sha256=zgIzzJ_c1UuJRMb6wMQ3D5PlCK-FaYkC0jnQsd02n0M,2446
|
|
30
|
-
a_sync/a_sync/modifiers/cache/__init__.py,sha256=cvjf_-M_UQFWXCs6NjEknlGT8Mq5tOuNDaU6zYw3kaQ,1838
|
|
31
|
-
a_sync/a_sync/modifiers/cache/memory.py,sha256=jA_GxZWxLIUxcOA8ji0EBnhqfZYlmOh2TIXABa-Zzso,1648
|
|
32
|
-
a_sync/asyncio/__init__.py,sha256=mgT590EGauaw_u-bknTKJUYX4-tvd7pHXH4hQr4GQcs,366
|
|
33
|
-
a_sync/asyncio/as_completed.py,sha256=BYSmJXXtMP5bu1M95-PUQX4rGAO82eKdXh94NM8wKFQ,7761
|
|
34
|
-
a_sync/asyncio/create_task.py,sha256=xhV_AlCldNffLQW1Ex_JmuxaFC2TNDT5WA8dVkXFacY,3591
|
|
35
|
-
a_sync/asyncio/gather.py,sha256=EyrYLJ5gyY1WQdYvRw0shmS9HcsQqnYG3rrIkNpzjwM,5622
|
|
36
|
-
a_sync/asyncio/utils.py,sha256=v4b3XtNyDEtW-wTRnM3snwx1A9vAzPcE17-KZon2L5U,389
|
|
37
|
-
a_sync/primitives/__init__.py,sha256=X0Ijv35WmfNnjlIzqX8a-2RPUwV5dC5HXPumzAqCJT8,442
|
|
38
|
-
a_sync/primitives/_debug.py,sha256=QOeb5Y2HQz_7eEpdKK2oGh6Q4fbYP2dNPFktfKfrN24,3121
|
|
39
|
-
a_sync/primitives/_loggable.py,sha256=2ojtipyqwLSAwleipDyvUjl_an3Jhic4-RbO4x7uO_Q,1217
|
|
40
|
-
a_sync/primitives/queue.py,sha256=wS1DekEG6Lj-3mS5YFOw5OJVM_dsEQA15pOPqLgjjjE,15907
|
|
41
|
-
a_sync/primitives/locks/__init__.py,sha256=yKzj48RBl1einM4YIUGp5tRm3QgBpmKz2WAr601oLz4,267
|
|
42
|
-
a_sync/primitives/locks/counter.py,sha256=J8kEv534IcRbL9r-CxU35ujQUwPkgnXHqNCD2otf0p8,5031
|
|
43
|
-
a_sync/primitives/locks/event.py,sha256=fKXP5d89ux5B-JJEWje0UZpldLkNyGZJ4aqALDHWQss,2888
|
|
44
|
-
a_sync/primitives/locks/prio_semaphore.py,sha256=IB850luLM-S8rFywh9Ed2_4z8d9Ux3qlsjDD4JcczR4,8238
|
|
45
|
-
a_sync/primitives/locks/semaphore.py,sha256=oIFoIOj2KyBPWtWUJKcq0Las7nLpuu53BwoUy3Dd6sA,6382
|
|
46
|
-
a_sync/sphinx/__init__.py,sha256=VcgVF_ea4HAVNxb8KXX-_fcLviBQGnN9OIRWaUjPhy4,50
|
|
47
|
-
a_sync/sphinx/ext.py,sha256=UjPf7s57mAOpzOSWyxv58pel022XADxUrnL-tRjZIvw,6586
|
|
48
|
-
a_sync/utils/__init__.py,sha256=MP2jX5G8-3WQSF3VxRNFQvbPFdlPPKBrd6rlcLqT9oM,3048
|
|
49
|
-
a_sync/utils/iterators.py,sha256=5GGWSFrO_bAcCK3JHLOVlfMQCkWJpe_Qt01ru2olRm0,8769
|
|
50
|
-
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
-
tests/conftest.py,sha256=Q7w6vrh3acUxttLU7Qx35KQS8jeV4ENQ7wzerK0OfLU,57
|
|
52
|
-
tests/executor.py,sha256=quJtFDPFLkhPXrYVWYM1F4NJ1DCeG4XxMz9MLcyx5zg,239
|
|
53
|
-
tests/fixtures.py,sha256=FcapEGhPmQFxcGm953AIdkBNWAXSq2T4m-QzEA20XWw,5532
|
|
54
|
-
tests/test_abstract.py,sha256=OPkHLFw7jI2xVmSHtEZLbslrCadAdf--wxqMtljthpc,518
|
|
55
|
-
tests/test_as_completed.py,sha256=t7_3n0XRe6Yeac4YXBF1pTX0kMhXANpPZVWWjZwsqYY,4328
|
|
56
|
-
tests/test_base.py,sha256=RUnnMk-WttX4g4z7aVtag_ofa4_E_4JKnTkMqsn5MCQ,8702
|
|
57
|
-
tests/test_cache.py,sha256=9GjBHBhPBAuabuzag2pVWSD468EMs3tGYd4ODIeo9-U,2489
|
|
58
|
-
tests/test_decorator.py,sha256=T5ZwLGOwFOmVi9cO6KV1V6houI10ftdXaG1sOpl4jqs,3684
|
|
59
|
-
tests/test_executor.py,sha256=LUa9tLtgG4SKBUQ9Llf2xIWFIIGrTcERlUzV3P_su8o,1164
|
|
60
|
-
tests/test_future.py,sha256=-rxexe_KNtYvIKuTuyHp3bTa7shF18_CylhxHAhyZIs,3405
|
|
61
|
-
tests/test_gather.py,sha256=W4V5NXwIkdDFJv-DVIP6D6bJ_2JboUfbU3xY7BL4CBQ,1376
|
|
62
|
-
tests/test_helpers.py,sha256=kUGnPvq71DxBDbZfSO0czr6cjv_gsIOLki0G58caBz8,347
|
|
63
|
-
tests/test_iter.py,sha256=OfB865Favt2bHsRgLOJfmMYS4joHfq4g7DF6umxpJAY,8908
|
|
64
|
-
tests/test_limiter.py,sha256=l2L4EZtDntkrnbRpMLJ-a5J2rgvUVUO8ao5x_8eXFlA,835
|
|
65
|
-
tests/test_meta.py,sha256=1EmUjgGlHfAwSZQfBZiBKyb_umeHvRrTPm1t4pFblPI,3569
|
|
66
|
-
tests/test_modified.py,sha256=H_Z98JNvy1Ze2Qae6Jgyo1gPqOGycVkwmGutrSmnQmk,247
|
|
67
|
-
tests/test_semaphore.py,sha256=pncCO3Y_xus9f85nCPY6Pr4WbUbHpNZNT5tBgwUAbZA,1628
|
|
68
|
-
tests/test_singleton.py,sha256=KGLLWr4eM3PHh_MBDubseTxAaS0r7Bddal2wY-qY4oA,539
|
|
69
|
-
tests/test_task.py,sha256=BpODWsy6I2LAZ4VZ4SGa4R6rly1U10gz0JjIPoW6GrI,7389
|
|
70
|
-
ez_a_sync-0.22.14.dist-info/LICENSE.txt,sha256=1on6-17OUMlja6vSPTcmlmeT_DwujCZJijYxaplBvZk,1075
|
|
71
|
-
ez_a_sync-0.22.14.dist-info/METADATA,sha256=T7dTZsYrPCtWhBGwFLBvXZwiYn8qdueqHxPkuc3HTpo,533
|
|
72
|
-
ez_a_sync-0.22.14.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
|
73
|
-
ez_a_sync-0.22.14.dist-info/top_level.txt,sha256=GVK_7kp7dgBLeHp84iIQdsJmiXnrXd-5sIf2x0Q-VKc,13
|
|
74
|
-
ez_a_sync-0.22.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|