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.

Files changed (73) hide show
  1. a_sync/ENVIRONMENT_VARIABLES.py +37 -5
  2. a_sync/__init__.py +53 -12
  3. a_sync/_smart.py +231 -28
  4. a_sync/_typing.py +112 -15
  5. a_sync/a_sync/__init__.py +35 -10
  6. a_sync/a_sync/_descriptor.py +248 -38
  7. a_sync/a_sync/_flags.py +78 -9
  8. a_sync/a_sync/_helpers.py +46 -13
  9. a_sync/a_sync/_kwargs.py +33 -8
  10. a_sync/a_sync/_meta.py +149 -28
  11. a_sync/a_sync/abstract.py +150 -28
  12. a_sync/a_sync/base.py +34 -16
  13. a_sync/a_sync/config.py +85 -14
  14. a_sync/a_sync/decorator.py +441 -139
  15. a_sync/a_sync/function.py +709 -147
  16. a_sync/a_sync/method.py +437 -110
  17. a_sync/a_sync/modifiers/__init__.py +85 -5
  18. a_sync/a_sync/modifiers/cache/__init__.py +116 -17
  19. a_sync/a_sync/modifiers/cache/memory.py +130 -20
  20. a_sync/a_sync/modifiers/limiter.py +101 -22
  21. a_sync/a_sync/modifiers/manager.py +142 -16
  22. a_sync/a_sync/modifiers/semaphores.py +121 -15
  23. a_sync/a_sync/property.py +383 -82
  24. a_sync/a_sync/singleton.py +44 -19
  25. a_sync/aliases.py +0 -1
  26. a_sync/asyncio/__init__.py +140 -1
  27. a_sync/asyncio/as_completed.py +213 -79
  28. a_sync/asyncio/create_task.py +70 -20
  29. a_sync/asyncio/gather.py +125 -58
  30. a_sync/asyncio/utils.py +3 -3
  31. a_sync/exceptions.py +248 -26
  32. a_sync/executor.py +164 -69
  33. a_sync/future.py +1227 -168
  34. a_sync/iter.py +173 -56
  35. a_sync/primitives/__init__.py +14 -2
  36. a_sync/primitives/_debug.py +72 -18
  37. a_sync/primitives/_loggable.py +41 -10
  38. a_sync/primitives/locks/__init__.py +5 -2
  39. a_sync/primitives/locks/counter.py +107 -38
  40. a_sync/primitives/locks/event.py +21 -7
  41. a_sync/primitives/locks/prio_semaphore.py +262 -63
  42. a_sync/primitives/locks/semaphore.py +138 -89
  43. a_sync/primitives/queue.py +601 -60
  44. a_sync/sphinx/__init__.py +0 -1
  45. a_sync/sphinx/ext.py +160 -50
  46. a_sync/task.py +313 -112
  47. a_sync/utils/__init__.py +12 -6
  48. a_sync/utils/iterators.py +170 -50
  49. {ez_a_sync-0.22.14.dist-info → ez_a_sync-0.22.16.dist-info}/METADATA +1 -1
  50. ez_a_sync-0.22.16.dist-info/RECORD +74 -0
  51. {ez_a_sync-0.22.14.dist-info → ez_a_sync-0.22.16.dist-info}/WHEEL +1 -1
  52. tests/conftest.py +1 -2
  53. tests/executor.py +250 -9
  54. tests/fixtures.py +61 -32
  55. tests/test_abstract.py +22 -4
  56. tests/test_as_completed.py +54 -21
  57. tests/test_base.py +264 -19
  58. tests/test_cache.py +31 -15
  59. tests/test_decorator.py +54 -28
  60. tests/test_executor.py +31 -13
  61. tests/test_future.py +45 -8
  62. tests/test_gather.py +8 -2
  63. tests/test_helpers.py +2 -0
  64. tests/test_iter.py +55 -13
  65. tests/test_limiter.py +5 -3
  66. tests/test_meta.py +23 -9
  67. tests/test_modified.py +4 -1
  68. tests/test_semaphore.py +15 -8
  69. tests/test_singleton.py +28 -11
  70. tests/test_task.py +162 -36
  71. ez_a_sync-0.22.14.dist-info/RECORD +0 -74
  72. {ez_a_sync-0.22.14.dist-info → ez_a_sync-0.22.16.dist-info}/LICENSE.txt +0 -0
  73. {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
- await create_task(coro=asyncio.sleep(0), name='test')
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 tasks._wrapped_func is _coro_fn, f"{tasks._wrapped_func} , {_coro_fn}, {tasks._wrapped_func == _coro_fn}"
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='test', kwarg0=1, kwarg1=None)
38
- assert tasks._wrapped_func_kwargs == {'kwarg0': 1, 'kwarg1': None}
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)) == {0: "1", 1: "22", 2: "333", 3: "4444", 4: "55555"}
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='keys'):
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='keys'):
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(range(5), reverse=True)
142
- assert await tasks.keys().aiterbyvalues(reverse=True) == sorted(range(5), reverse=True)
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) == [str(i) * i for i in sorted(range(1, 6), reverse=True)]
157
- assert await tasks.values().aiterbyvalues(reverse=True) == [str(i) * i for i in sorted(range(1, 6), reverse=True)]
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() == [(i, str(i+1) * (i+1)) for i in range(5)]
173
- assert await tasks.items().aiterbyvalues() == [(i, str(i+1) * (i+1)) for i in range(5)]
174
- assert await tasks.items().aiterbykeys(reverse=True) == [(i, str(i+1) * (i+1)) for i in sorted(range(5), reverse=True)]
175
- assert await tasks.items(pop=True).aiterbyvalues(reverse=True) == [(i, str(i+1) * (i+1)) for i in sorted(range(5), reverse=True)]
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
- assert len(tasks.keys()) == 0
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
- assert len(tasks.keys()) == 5
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,,