ez-a-sync 0.33.4__cp313-cp313-musllinux_1_2_i686.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.
Files changed (177) hide show
  1. a_sync/ENVIRONMENT_VARIABLES.py +42 -0
  2. a_sync/__init__.pxd +2 -0
  3. a_sync/__init__.py +145 -0
  4. a_sync/_smart.c +22830 -0
  5. a_sync/_smart.cpython-313-i386-linux-musl.so +0 -0
  6. a_sync/_smart.pxd +2 -0
  7. a_sync/_smart.pyi +202 -0
  8. a_sync/_smart.pyx +674 -0
  9. a_sync/_typing.py +258 -0
  10. a_sync/a_sync/__init__.py +60 -0
  11. a_sync/a_sync/_descriptor.c +20537 -0
  12. a_sync/a_sync/_descriptor.cpython-313-i386-linux-musl.so +0 -0
  13. a_sync/a_sync/_descriptor.pyi +33 -0
  14. a_sync/a_sync/_descriptor.pyx +422 -0
  15. a_sync/a_sync/_flags.c +6082 -0
  16. a_sync/a_sync/_flags.cpython-313-i386-linux-musl.so +0 -0
  17. a_sync/a_sync/_flags.pxd +3 -0
  18. a_sync/a_sync/_flags.pyx +92 -0
  19. a_sync/a_sync/_helpers.c +14529 -0
  20. a_sync/a_sync/_helpers.cpython-313-i386-linux-musl.so +0 -0
  21. a_sync/a_sync/_helpers.pxd +3 -0
  22. a_sync/a_sync/_helpers.pyi +10 -0
  23. a_sync/a_sync/_helpers.pyx +167 -0
  24. a_sync/a_sync/_kwargs.c +12202 -0
  25. a_sync/a_sync/_kwargs.cpython-313-i386-linux-musl.so +0 -0
  26. a_sync/a_sync/_kwargs.pxd +2 -0
  27. a_sync/a_sync/_kwargs.pyx +64 -0
  28. a_sync/a_sync/_meta.py +210 -0
  29. a_sync/a_sync/abstract.c +12420 -0
  30. a_sync/a_sync/abstract.cpython-313-i386-linux-musl.so +0 -0
  31. a_sync/a_sync/abstract.pyi +141 -0
  32. a_sync/a_sync/abstract.pyx +221 -0
  33. a_sync/a_sync/base.c +14940 -0
  34. a_sync/a_sync/base.cpython-313-i386-linux-musl.so +0 -0
  35. a_sync/a_sync/base.pyi +60 -0
  36. a_sync/a_sync/base.pyx +271 -0
  37. a_sync/a_sync/config.py +168 -0
  38. a_sync/a_sync/decorator.py +651 -0
  39. a_sync/a_sync/flags.c +5272 -0
  40. a_sync/a_sync/flags.cpython-313-i386-linux-musl.so +0 -0
  41. a_sync/a_sync/flags.pxd +72 -0
  42. a_sync/a_sync/flags.pyi +74 -0
  43. a_sync/a_sync/flags.pyx +72 -0
  44. a_sync/a_sync/function.c +37856 -0
  45. a_sync/a_sync/function.cpython-313-i386-linux-musl.so +0 -0
  46. a_sync/a_sync/function.pxd +28 -0
  47. a_sync/a_sync/function.pyi +571 -0
  48. a_sync/a_sync/function.pyx +1381 -0
  49. a_sync/a_sync/method.c +29662 -0
  50. a_sync/a_sync/method.cpython-313-i386-linux-musl.so +0 -0
  51. a_sync/a_sync/method.pxd +9 -0
  52. a_sync/a_sync/method.pyi +523 -0
  53. a_sync/a_sync/method.pyx +1023 -0
  54. a_sync/a_sync/modifiers/__init__.pxd +1 -0
  55. a_sync/a_sync/modifiers/__init__.py +101 -0
  56. a_sync/a_sync/modifiers/cache/__init__.py +160 -0
  57. a_sync/a_sync/modifiers/cache/memory.py +165 -0
  58. a_sync/a_sync/modifiers/limiter.py +132 -0
  59. a_sync/a_sync/modifiers/manager.c +16157 -0
  60. a_sync/a_sync/modifiers/manager.cpython-313-i386-linux-musl.so +0 -0
  61. a_sync/a_sync/modifiers/manager.pxd +5 -0
  62. a_sync/a_sync/modifiers/manager.pyi +219 -0
  63. a_sync/a_sync/modifiers/manager.pyx +299 -0
  64. a_sync/a_sync/modifiers/semaphores.py +173 -0
  65. a_sync/a_sync/property.c +27268 -0
  66. a_sync/a_sync/property.cpython-313-i386-linux-musl.so +0 -0
  67. a_sync/a_sync/property.pyi +376 -0
  68. a_sync/a_sync/property.pyx +819 -0
  69. a_sync/a_sync/singleton.py +63 -0
  70. a_sync/aliases.py +3 -0
  71. a_sync/async_property/__init__.pxd +1 -0
  72. a_sync/async_property/__init__.py +1 -0
  73. a_sync/async_property/cached.c +20397 -0
  74. a_sync/async_property/cached.cpython-313-i386-linux-musl.so +0 -0
  75. a_sync/async_property/cached.pxd +10 -0
  76. a_sync/async_property/cached.pyi +45 -0
  77. a_sync/async_property/cached.pyx +178 -0
  78. a_sync/async_property/proxy.c +34662 -0
  79. a_sync/async_property/proxy.cpython-313-i386-linux-musl.so +0 -0
  80. a_sync/async_property/proxy.pxd +2 -0
  81. a_sync/async_property/proxy.pyi +124 -0
  82. a_sync/async_property/proxy.pyx +474 -0
  83. a_sync/asyncio/__init__.pxd +6 -0
  84. a_sync/asyncio/__init__.py +164 -0
  85. a_sync/asyncio/as_completed.c +18849 -0
  86. a_sync/asyncio/as_completed.cpython-313-i386-linux-musl.so +0 -0
  87. a_sync/asyncio/as_completed.pxd +8 -0
  88. a_sync/asyncio/as_completed.pyi +109 -0
  89. a_sync/asyncio/as_completed.pyx +269 -0
  90. a_sync/asyncio/create_task.c +15912 -0
  91. a_sync/asyncio/create_task.cpython-313-i386-linux-musl.so +0 -0
  92. a_sync/asyncio/create_task.pxd +2 -0
  93. a_sync/asyncio/create_task.pyi +51 -0
  94. a_sync/asyncio/create_task.pyx +271 -0
  95. a_sync/asyncio/gather.c +16687 -0
  96. a_sync/asyncio/gather.cpython-313-i386-linux-musl.so +0 -0
  97. a_sync/asyncio/gather.pyi +107 -0
  98. a_sync/asyncio/gather.pyx +218 -0
  99. a_sync/asyncio/igather.c +13080 -0
  100. a_sync/asyncio/igather.cpython-313-i386-linux-musl.so +0 -0
  101. a_sync/asyncio/igather.pxd +1 -0
  102. a_sync/asyncio/igather.pyi +8 -0
  103. a_sync/asyncio/igather.pyx +183 -0
  104. a_sync/asyncio/sleep.c +9601 -0
  105. a_sync/asyncio/sleep.cpython-313-i386-linux-musl.so +0 -0
  106. a_sync/asyncio/sleep.pyi +14 -0
  107. a_sync/asyncio/sleep.pyx +49 -0
  108. a_sync/debugging.c +15370 -0
  109. a_sync/debugging.cpython-313-i386-linux-musl.so +0 -0
  110. a_sync/debugging.pyi +76 -0
  111. a_sync/debugging.pyx +107 -0
  112. a_sync/exceptions.c +13320 -0
  113. a_sync/exceptions.cpython-313-i386-linux-musl.so +0 -0
  114. a_sync/exceptions.pyi +376 -0
  115. a_sync/exceptions.pyx +446 -0
  116. a_sync/executor.py +619 -0
  117. a_sync/functools.c +12746 -0
  118. a_sync/functools.cpython-313-i386-linux-musl.so +0 -0
  119. a_sync/functools.pxd +7 -0
  120. a_sync/functools.pyi +33 -0
  121. a_sync/functools.pyx +139 -0
  122. a_sync/future.py +1497 -0
  123. a_sync/iter.c +37279 -0
  124. a_sync/iter.cpython-313-i386-linux-musl.so +0 -0
  125. a_sync/iter.pxd +11 -0
  126. a_sync/iter.pyi +370 -0
  127. a_sync/iter.pyx +981 -0
  128. a_sync/primitives/__init__.pxd +1 -0
  129. a_sync/primitives/__init__.py +53 -0
  130. a_sync/primitives/_debug.c +15765 -0
  131. a_sync/primitives/_debug.cpython-313-i386-linux-musl.so +0 -0
  132. a_sync/primitives/_debug.pxd +12 -0
  133. a_sync/primitives/_debug.pyi +52 -0
  134. a_sync/primitives/_debug.pyx +223 -0
  135. a_sync/primitives/_loggable.c +11538 -0
  136. a_sync/primitives/_loggable.cpython-313-i386-linux-musl.so +0 -0
  137. a_sync/primitives/_loggable.pxd +4 -0
  138. a_sync/primitives/_loggable.pyi +66 -0
  139. a_sync/primitives/_loggable.pyx +102 -0
  140. a_sync/primitives/locks/__init__.pxd +8 -0
  141. a_sync/primitives/locks/__init__.py +17 -0
  142. a_sync/primitives/locks/counter.c +17938 -0
  143. a_sync/primitives/locks/counter.cpython-313-i386-linux-musl.so +0 -0
  144. a_sync/primitives/locks/counter.pxd +12 -0
  145. a_sync/primitives/locks/counter.pyi +151 -0
  146. a_sync/primitives/locks/counter.pyx +267 -0
  147. a_sync/primitives/locks/event.c +17072 -0
  148. a_sync/primitives/locks/event.cpython-313-i386-linux-musl.so +0 -0
  149. a_sync/primitives/locks/event.pxd +22 -0
  150. a_sync/primitives/locks/event.pyi +43 -0
  151. a_sync/primitives/locks/event.pyx +185 -0
  152. a_sync/primitives/locks/prio_semaphore.c +25635 -0
  153. a_sync/primitives/locks/prio_semaphore.cpython-313-i386-linux-musl.so +0 -0
  154. a_sync/primitives/locks/prio_semaphore.pxd +25 -0
  155. a_sync/primitives/locks/prio_semaphore.pyi +217 -0
  156. a_sync/primitives/locks/prio_semaphore.pyx +597 -0
  157. a_sync/primitives/locks/semaphore.c +26553 -0
  158. a_sync/primitives/locks/semaphore.cpython-313-i386-linux-musl.so +0 -0
  159. a_sync/primitives/locks/semaphore.pxd +21 -0
  160. a_sync/primitives/locks/semaphore.pyi +197 -0
  161. a_sync/primitives/locks/semaphore.pyx +454 -0
  162. a_sync/primitives/queue.py +1026 -0
  163. a_sync/py.typed +0 -0
  164. a_sync/sphinx/__init__.py +3 -0
  165. a_sync/sphinx/ext.py +289 -0
  166. a_sync/task.py +934 -0
  167. a_sync/utils/__init__.py +105 -0
  168. a_sync/utils/iterators.py +297 -0
  169. a_sync/utils/repr.c +15866 -0
  170. a_sync/utils/repr.cpython-313-i386-linux-musl.so +0 -0
  171. a_sync/utils/repr.pyi +2 -0
  172. a_sync/utils/repr.pyx +73 -0
  173. ez_a_sync-0.33.4.dist-info/METADATA +368 -0
  174. ez_a_sync-0.33.4.dist-info/RECORD +177 -0
  175. ez_a_sync-0.33.4.dist-info/WHEEL +5 -0
  176. ez_a_sync-0.33.4.dist-info/licenses/LICENSE.txt +17 -0
  177. ez_a_sync-0.33.4.dist-info/top_level.txt +1 -0
a_sync/utils/repr.pyi ADDED
@@ -0,0 +1,2 @@
1
+ def repr_trunc(iterable: Iterable[Any]) -> str:
2
+ """Returns a truncated `repr` for `iterable`, limited to the first 5 items."""
a_sync/utils/repr.pyx ADDED
@@ -0,0 +1,73 @@
1
+ from itertools import islice
2
+ from typing import Any, Iterable
3
+
4
+ from cpython.dict cimport PyDict_Size
5
+ from cpython.list cimport PyList_GET_SIZE
6
+ from cpython.object cimport Py_TYPE, PyObject_Repr
7
+ from cpython.tuple cimport PyTuple_GET_SIZE
8
+
9
+ cdef extern from "Python.h":
10
+ ctypedef struct PyTypeObject:
11
+ pass
12
+
13
+
14
+ L, S, D = [], set(), {}
15
+ cdef PyTypeObject *List_ptr = Py_TYPE(L)
16
+ cdef PyTypeObject *Tuple_ptr = Py_TYPE(())
17
+ cdef PyTypeObject *Dict_ptr = Py_TYPE(D)
18
+ cdef PyTypeObject *DictKeys_ptr = Py_TYPE(D.keys())
19
+ cdef PyTypeObject *DictValues_ptr = Py_TYPE(D.values())
20
+ cdef PyTypeObject *DictItems_ptr = Py_TYPE(D.items())
21
+ cdef PyTypeObject *Set_ptr = Py_TYPE(S)
22
+ del L, S, D
23
+
24
+
25
+ def repr_trunc(iterable: Iterable[Any]) -> str:
26
+ """Returns a truncated `repr` for `iterable`, limited to the first 5 items."""
27
+ cdef PyTypeObject *itype = Py_TYPE(iterable)
28
+ if itype == List_ptr:
29
+ return _join_first_5_reprs_list(iterable)
30
+ elif itype == Tuple_ptr:
31
+ return _join_first_5_reprs_tuple(iterable)
32
+ elif itype == Dict_ptr:
33
+ if PyDict_Size(iterable) <= 5:
34
+ return "{" + ", ".join(
35
+ f"{PyObject_Repr(k)}: {repr(iterable[k])}"
36
+ for k in iterable
37
+ ) + "}"
38
+ else:
39
+ return "{" + ", ".join(
40
+ f"{PyObject_Repr(k)}: {repr(iterable[k])}"
41
+ for k in islice(iterable, 5)
42
+ ) + ", ...}"
43
+ elif itype == DictKeys_ptr:
44
+ return f"dict_keys([{_join_first_5_reprs_generic(iterable)}])"
45
+ elif itype == DictValues_ptr:
46
+ return f"dict_values([{_join_first_5_reprs_generic(iterable)}])"
47
+ elif itype == DictItems_ptr:
48
+ return f"dict_items([{_join_first_5_reprs_generic(iterable)}])"
49
+ elif itype == Set_ptr:
50
+ return "{" + _join_first_5_reprs_generic(iterable) + "}"
51
+ else:
52
+ return PyObject_Repr(iterable)
53
+
54
+
55
+ cdef inline str _join_first_5_reprs_list(list[object] lst):
56
+ if PyList_GET_SIZE(lst) <= 5:
57
+ return f"[{', '.join(PyObject_Repr(obj) for obj in lst)}]"
58
+ else:
59
+ return f"[{', '.join(PyObject_Repr(obj) for obj in lst[:5])}, ...]"
60
+
61
+
62
+ cdef inline str _join_first_5_reprs_tuple(tuple[object, ...] tup):
63
+ if PyTuple_GET_SIZE(tup) <= 5:
64
+ return f"({', '.join(PyObject_Repr(obj) for obj in tup)})"
65
+ else:
66
+ return f"({', '.join(PyObject_Repr(obj) for obj in tup[:5])}, ...)"
67
+
68
+
69
+ cdef str _join_first_5_reprs_generic(iterable: Iterable[Any]):
70
+ if len(iterable) <= 5:
71
+ return ", ".join(PyObject_Repr(obj) for obj in iterable)
72
+ else:
73
+ return f"{', '.join(PyObject_Repr(obj) for obj in islice(iterable, 5))}, ..."
@@ -0,0 +1,368 @@
1
+ Metadata-Version: 2.4
2
+ Name: ez_a_sync
3
+ Version: 0.33.4
4
+ Summary: A library that makes it easy to define objects that can be used for both sync and async use cases.
5
+ Home-page: https://github.com/BobTheBuidler/a-sync
6
+ Author: BobTheBuidler
7
+ Author-email: bobthebuidlerdefi@gmail.com
8
+ License: MIT
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3 :: Only
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Classifier: Programming Language :: Python :: Implementation :: CPython
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Topic :: Software Development :: Libraries
20
+ Requires-Python: >=3.10,<3.15
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE.txt
23
+ Requires-Dist: aiolimiter>=1
24
+ Requires-Dist: async_lru_threadsafe==2.0.5
25
+ Requires-Dist: async_property==0.2.2
26
+ Requires-Dist: typed_envs>=0.0.5
27
+ Requires-Dist: typing_extensions>=4.1.0
28
+ Dynamic: author
29
+ Dynamic: author-email
30
+ Dynamic: classifier
31
+ Dynamic: description
32
+ Dynamic: description-content-type
33
+ Dynamic: home-page
34
+ Dynamic: license
35
+ Dynamic: license-file
36
+ Dynamic: requires-dist
37
+ Dynamic: requires-python
38
+ Dynamic: summary
39
+
40
+ ## Table of Contents
41
+ <!-- TOC -->
42
+
43
+ - [Table of Contents](#table-of-contents)
44
+ - [Introduction](#introduction)
45
+ - [Installation](#installation)
46
+ - [Usage](#usage)
47
+ - [Decorators](#decorators)
48
+ - [@a_sync'async'](#a_syncasync)
49
+ - [@a_sync'sync'](#a_syncsync)
50
+ - [Classes](#classes)
51
+ - [Modifiers](#modifiers)
52
+ - [async modifiers](#async-modifiers)
53
+ - [sync modifiers](#sync-modifiers)
54
+ - [Default Modifiers](#default-modifiers)
55
+ - [Other Helpful Classes](#other-helpful-modules)
56
+ - [ASyncIterable](#asynciterable)
57
+ - [ASyncIterator](#asynciterator)
58
+ - [ASyncFilter](#asyncfilter)
59
+ - [ASyncSorter](#asyncsorter)
60
+ - [Other Helpful Modules](#other-helpful-modules)
61
+ - [future](#future)
62
+ - [ASyncFuture](#asyncfuture)
63
+ - [future decorator](#future-decorator)
64
+ - [asyncio](#asyncio)
65
+
66
+ <!-- /TOC -->
67
+ ## Introduction
68
+
69
+ `ez-a-sync` is a Python library that enables developers to write both synchronous and asynchronous code without having to write redundant code. It provides a decorator `@a_sync()`, as well as a base class `ASyncGenericBase` which can be used to create classes that can be executed in both synchronous and asynchronous contexts.
70
+
71
+ It also contains implementations of various asyncio primitives with extra functionality, including queues and various types of locks.
72
+ \# TODO add links to various objects' docs
73
+
74
+ ## Installation
75
+
76
+ `ez-a-sync` can be installed via pip:
77
+
78
+ ```
79
+ pip install ez-a-sync
80
+ ```
81
+
82
+ ## Usage
83
+
84
+ ### Decorators
85
+
86
+ `ez-a-sync` provides one decorator: `@a_sync()`. You can explicitly pass the type of function you want with `@a_sync('sync')` or `@a_sync('async')`
87
+
88
+ #### `@a_sync('async')`
89
+
90
+ The `@a_sync('async')` decorator can be used to define an asynchronous function that can also be executed synchronously.
91
+
92
+ ```python
93
+ @a_sync('async')
94
+ def some_function():
95
+ ...
96
+ ```
97
+
98
+ This function can then be executed asynchronously using `await`:
99
+
100
+ ```python
101
+ aaa = await some_function()
102
+ ```
103
+
104
+ It can also be executed synchronously by passing `sync=True` or `asynchronous=False`:
105
+
106
+ ```python
107
+ aaa = some_function(sync=True)
108
+ ```
109
+
110
+ #### `@a_sync('sync')`
111
+
112
+ The `@a_sync('sync')` decorator can be used to define a synchronous function that can also be executed asynchronously.
113
+
114
+ ```python
115
+ @a_sync('sync')
116
+ async def some_function():
117
+ ...
118
+ ```
119
+
120
+ This function can then be executed synchronously:
121
+
122
+ ```python
123
+ aaa = some_function()
124
+ ```
125
+
126
+ It can also be overridden asynchronously by passing `sync=False` or `asynchronous=True` and using `await`:
127
+
128
+ ```python
129
+ aaa = await some_function(sync=False)
130
+ ```
131
+
132
+ ### Classes
133
+
134
+ `ez-a-sync` also provides a base class `ASyncGenericBase` that can be used to create classes that can be executed in both synchronous and asynchronous contexts. To create an asynchronous class, simply inherit from `ASyncGenericBase` and set `asynchronous=True`:
135
+
136
+ ```python
137
+ class CoolAsyncClass(ASyncGenericBase):
138
+ asynchronous=True
139
+
140
+ def some_sync_fn():
141
+ ...
142
+ ```
143
+
144
+ In this example, `CoolAsyncClass` has `asynchronous=True`, which means it is an asynchronous class. You can call `some_sync_fn` asynchronously using `await`:
145
+
146
+ ```python
147
+ aaa = await CoolAsyncClass().some_sync_fn()
148
+ ```
149
+
150
+ `CoolAsyncClass` functions can also be called synchronously by passing `sync=True`:
151
+
152
+ ```python
153
+ aaa = CoolAsyncClass().some_sync_fn(sync=True)
154
+ ```
155
+
156
+ Similarly, you can create a synchronous class by setting `sync=True` or `asynchronous=False`:
157
+
158
+ ```python
159
+ class CoolSyncClass(ASyncGenericBase):
160
+ asynchronous=False
161
+
162
+ async def some_async_fn():
163
+ ...
164
+ ```
165
+
166
+ `CoolSyncClass` functions can be called synchronously:
167
+
168
+ ```python
169
+ aaa = CoolSyncClass().some_async_fn()
170
+ ```
171
+
172
+ It can also be called asynchronously by passing `sync=False` or `asynchronous=True` and using `await`:
173
+
174
+ ```python
175
+ aaa = await CoolSyncClass().some_async_fn(sync=False)
176
+ ```
177
+
178
+ You can also create a class which functions can be executed in both synchronous and asynchronous contexts by not setting the `asynchronous` or `sync` attribute (both can be used interchangeably, pick your favorite) and passing it as an argument when creating an instance:
179
+
180
+ ```python
181
+ class CoolDualClass(ASyncGenericBase):
182
+ def __init__(self, asynchronous):
183
+ self.asynchronous=asynchronous
184
+
185
+ async def some_async_fn():
186
+ ...
187
+ ```
188
+
189
+ You can create an instance of `CoolDualClass` with `sync=False` or `asynchronous=True` to call it asynchronously:
190
+
191
+ ```python
192
+ async_instance = CoolDualClass(asynchronous=True)
193
+ aaa = await async_instance.some_async_fn()
194
+ aaa = async_instance.some_async_fn(sync=True)
195
+ ```
196
+
197
+ You can also create an instance with `sync=True` or `asynchronous=False` to call it synchronously:
198
+
199
+ ```python
200
+ sync_instance = CoolDualClass(asynchronous=False)
201
+ aaa = sync_instance.some_async_fn()
202
+ aaa = sync_instance.some_async_fn(sync=False)
203
+ ```
204
+
205
+ ### Modifiers
206
+
207
+ The `ez-a-sync` library provides several settings that can be used to customize the behavior of the decorators and classes.
208
+
209
+ To apply settings to the decorators or base classes, simply pass them as keyword arguments when calling the decorator or creating an instance.
210
+
211
+ For example, to apply `cache_type='memory'` to a function decorated with `@a_sync('async')`, you would do the following:
212
+
213
+ ```python
214
+ @a_sync('async', cache_type='memory')
215
+ def some_function():
216
+ ...
217
+ ```
218
+
219
+ #### async modifiers
220
+
221
+ The `@a_sync('async')` decorator has the following settings:
222
+
223
+ - `cache_type`: This can be set to `None` or `'memory'`. `'memory'` is a LRU cache which can be modified with the `cache_typed`, `ram_cache_maxsize`, and `ram_cache_ttl` modifiers.
224
+ - `cache_typed`: Set to `True` if you want types considered treated for cache keys. i.e. with `cache_typed=True`, `Decimal(0)` and `0` will be considered separate keys.
225
+ - `ram_cache_maxsize`: The maxsize for your LRU cache. Set to `None` if the cache is unbounded. If you set this value without specifying a cache type, `'memory'` will automatically be applied.
226
+ - `ram_cache_ttl`: The TTL for items in your LRU cache. Set to `None`. If you set this value without specifying a cache type, `'memory'` will automatically be applied.
227
+ - `runs_per_minute`: Setting this value enables a rate limiter for the decorated function.
228
+ - `semaphore`: Drop in a Semaphore for your async defined functions.
229
+
230
+ #### sync modifiers
231
+
232
+ The `@a_sync('sync')` decorator has the following setting:
233
+
234
+ - `executor`: The executor for the synchronous function. Set to the library's default of `config.default_sync_executor`.
235
+
236
+ #### Default Modifiers
237
+
238
+ Instead of setting modifiers one by one in functions, you can set a default value for modifiers using ENV variables:
239
+
240
+ - `DEFAULT_MODE`
241
+ - `CACHE_TYPE`
242
+ - `CACHE_TYPED`
243
+ - `RAM_CACHE_MAXSIZE`
244
+ - `RAM_CACHE_TTL`
245
+ - `RUNS_PER_MINUTE`
246
+ - `SEMAPHORE`
247
+
248
+ ### Other Helpful Classes
249
+ #### ASyncIterable
250
+ The [ASyncIterable](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncIterable) class allows objects to be iterated over using either a standard `for` loop or an `async for` loop. This is particularly useful in scenarios where the mode of iteration needs to be flexible or is determined at runtime.
251
+
252
+ ```python
253
+ from a_sync import ASyncIterable
254
+
255
+ async_iterable = ASyncIterable(some_async_iterable)
256
+
257
+ # Asynchronous iteration
258
+ async for item in async_iterable:
259
+ ...
260
+
261
+ # Synchronous iteration
262
+ for item in async_iterable:
263
+ ...
264
+ ```
265
+
266
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncIterable) for more information.
267
+
268
+ #### ASyncIterator
269
+
270
+ The [ASyncIterator](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncIterator) class provides a unified interface for iteration that can operate in both synchronous and asynchronous contexts. It allows the wrapping of asynchronous iterable objects or async generator functions.
271
+
272
+ ```python
273
+ from a_sync import ASyncIterator
274
+
275
+ async_iterator = ASyncIterator(some_async_iterator)
276
+
277
+ # Asynchronous iteration
278
+ async for item in async_iterator:
279
+ ...
280
+
281
+ # Synchronous iteration
282
+ for item in async_iterator:
283
+ ...
284
+ ```
285
+
286
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncIterator) for more information.
287
+
288
+ #### ASyncFilter
289
+
290
+ The [ASyncFilter](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncFilter) class filters items of an async iterable based on a provided function. It can handle both synchronous and asynchronous filter functions.
291
+
292
+ ```python
293
+ from a_sync import ASyncFilter
294
+
295
+ async def is_even(x):
296
+ return x % 2 == 0
297
+
298
+ filtered_iterable = ASyncFilter(is_even, some_async_iterable)
299
+
300
+ # or use the alias
301
+ import a_sync
302
+
303
+ filtered_iterable = a_sync.filter(is_even, some_async_iterable)
304
+
305
+ # Asynchronous iteration
306
+ async for item in filtered_iterable:
307
+ ...
308
+
309
+ # Synchronous iteration
310
+ for item in filtered_iterable:
311
+ ...
312
+ ```
313
+
314
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncFilter) for more information.
315
+
316
+ #### ASyncSorter
317
+
318
+ The [ASyncSorter](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncSorter) class sorts items of an async iterable based on a provided key function. It supports both synchronous and asynchronous key functions.
319
+
320
+ ```python
321
+ from a_sync import ASyncSorter
322
+
323
+ sorted_iterable = ASyncSorter(some_async_iterable, key=lambda x: x.value)
324
+
325
+ # or use the alias
326
+ import a_sync
327
+
328
+ sorted_iterable = a_sync.sort(some_async_iterable, key=lambda x: x.value)
329
+
330
+ # Asynchronous iteration
331
+ async for item in sorted_iterable:
332
+ ...
333
+
334
+ # Synchronous iteration
335
+ for item in sorted_iterable:
336
+ ...
337
+ ```
338
+
339
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncSorter) for more information.
340
+
341
+ ## Other Helpful Modules
342
+ The stuff here is unrelated to the main purpose of ez-a-sync, but cool and useful nonetheless
343
+
344
+ ### asyncio
345
+
346
+ The `ez-a-sync` library extends the functionality of Python's `asyncio` module with additional utilities to simplify asynchronous programming.
347
+
348
+ - **as_completed**: This function allows you to iterate over awaitables as they complete, similar to `asyncio.as_completed`. It supports both synchronous and asynchronous iteration. [Learn more about `as_completed`](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.asyncio.as_completed).
349
+
350
+ - **gather**: A utility to run multiple asynchronous operations concurrently and wait for all of them to complete. It is similar to `asyncio.gather` but integrates seamlessly with the `ez-a-sync` library. [Learn more about `gather`](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.asyncio.gather).
351
+
352
+ - **create_task**: A function to create a new task from a coroutine, similar to `asyncio.create_task`, but with additional features provided by `ez-a-sync`. [Learn more about `create_task`](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.asyncio.create_task).
353
+
354
+ - **as_completed**: This function allows you to iterate over awaitables as they complete, similar to `asyncio.as_completed`. It supports both synchronous and asynchronous iteration. [Learn more about `as_completed`](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.asyncio.as_completed).
355
+
356
+ These utilities enhance the standard `asyncio` module, providing more flexibility and control over asynchronous operations. For detailed documentation and examples, please refer to the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.asyncio)
357
+
358
+ ### future
359
+ The future module is something totally different.
360
+ TODO: short explainer of module value prop and use case
361
+
362
+ #### ASyncFuture
363
+ [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.future.ASyncFuture)
364
+ TODO: short explainers on ASyncFuture class
365
+
366
+ #### future decorator
367
+ [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.future.future)
368
+ TODO: short explainers on future fn
@@ -0,0 +1,177 @@
1
+ a_sync/ENVIRONMENT_VARIABLES.py,sha256=YgIB8mQRqQBLbD3DdwMjx4ylqO8pK3GUvSNCerWJzx8,1280
2
+ a_sync/__init__.pxd,sha256=ol4jqkvuweaaU8GQU_Mq9rak8IIsagYTdhYhbKK74ac,81
3
+ a_sync/__init__.py,sha256=lgwXsFYALBp0ORHRLKlpfPE79GIqbhR_MP8JbZStBGc,5750
4
+ a_sync/_smart.c,sha256=1iPll1hDwNmOIFDF9R-VBFNRQgUcvr-cNqIcVzvfqXU,962424
5
+ a_sync/_smart.cpython-313-i386-linux-musl.so,sha256=RNyBJwL_9pPiKyry0p0E7D7Jy8Y5mp9NqbTLxE3srRk,1016952
6
+ a_sync/_smart.pxd,sha256=3FlPqSvAtmGXIDFzfm7wpkvL6xt8z8w-vwow4Lura2g,76
7
+ a_sync/_smart.pyi,sha256=mUQwUiiSsMsbtJTKdXm076ua5B2A9USaKgjZq1Se_ZQ,5390
8
+ a_sync/_smart.pyx,sha256=88-mSxJLUHoF_4d7re18QUy6iwV7Y7mcPjNp6MYaviU,19828
9
+ a_sync/_typing.py,sha256=x24VIVjxz8sUWPmQR072pHAQxJO769Nn02f3eakFpe8,6850
10
+ a_sync/aliases.py,sha256=TbLyuLeFfJEmcC5-NP6h4DQ9QXlQjGny2NUP_x1tflw,212
11
+ a_sync/debugging.c,sha256=oYspkrpx0ORiuJhoFF99dQV1N-1eCxWr1WGroq7pGr4,636524
12
+ a_sync/debugging.cpython-313-i386-linux-musl.so,sha256=Zx5rAPf_tWa_oSkrdaks3Mgt0wORBraIfL9vuuIn5hI,652060
13
+ a_sync/debugging.pyi,sha256=AELgYmG2aLEBrkSHL7WKUrJGzyk-XXDq_abS8W6ccck,2311
14
+ a_sync/debugging.pyx,sha256=Z29Lek1NyUXVFHjfk9O6XWxPNk1uRFyY6tK6fTfgxGM,3045
15
+ a_sync/exceptions.c,sha256=y-_WM1VukXtCjw_H7QK4tFHQr0EeDhp4GQKs-tNopps,593521
16
+ a_sync/exceptions.cpython-313-i386-linux-musl.so,sha256=02g5uMzrTT8nfPh9PpVW52SxG4qng30JJdScDb3YvhM,645732
17
+ a_sync/exceptions.pyi,sha256=NnBEKUBzBCl0kLj75ukwyQeWXjwPSkDg-NxKsXh-Ans,10834
18
+ a_sync/exceptions.pyx,sha256=XxT1cOZ3qehVuQd00NbiY72YMLeFLzi6aRBvisQF6TA,13274
19
+ a_sync/executor.py,sha256=F24fsgf2ypi5NCyhpG-ufyXw6DWcBRpCv0kaGmcq8Is,22855
20
+ a_sync/functools.c,sha256=bREWSj_Mf8969BHBiza7hxr6c5z5lbBl5uTUSJTtLt8,522661
21
+ a_sync/functools.cpython-313-i386-linux-musl.so,sha256=FAQhDvPcqihV6BRAj1BE-F8E79QStydFXIV07mwMtVc,488788
22
+ a_sync/functools.pxd,sha256=hhygzVpa5tXnDWR1pi_WLkOBd_1mC60K3279wYFEfA8,187
23
+ a_sync/functools.pyi,sha256=HGM208HKg5FOUbu9CbfnIOx3sdQB1OwO1t-0tZKd-T4,1404
24
+ a_sync/functools.pyx,sha256=F-Vp5JrhEt4jaFQDx48FadI7NGLlPfoIPWRWHTQob0Q,4837
25
+ a_sync/future.py,sha256=CK3t7BE1AfuFhWLFw50rFaCox0IRYW2x0HqVpOJC6o8,48675
26
+ a_sync/iter.c,sha256=CQSi9xfEGtlhX-WVeiUHFXGvho1thJE7RK4MifeItwU,1704694
27
+ a_sync/iter.cpython-313-i386-linux-musl.so,sha256=dqAP_bGC0TlSmQc1cULItTPyfj-ondHZJPivwEMBVSs,2105420
28
+ a_sync/iter.pxd,sha256=VQKDAzm1M4snbrL9vwhU2zl04H4LeJrWtqksw6yGWOc,427
29
+ a_sync/iter.pyi,sha256=-KwT1FEaDZ--T7RZ2FEV8G1xQowL-jgJ0XAeL32sAjY,15460
30
+ a_sync/iter.pyx,sha256=TKzdMQkI74oKdgW-Us1WSgE5_KdS_7dOUykAmTHiXgU,37486
31
+ a_sync/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ a_sync/task.py,sha256=UMnOwi_-2MhRoTatf4pa8zAJUfnKAqKxXwoZsiKthjs,35085
33
+ a_sync/a_sync/__init__.py,sha256=P8AO0TBmYPW5BYVk0TohOwLq8jurpRKfXnaPO-qDMJw,2200
34
+ a_sync/a_sync/_descriptor.c,sha256=yptyxez2B6JActPvVX6QVvTjKVHHo0ZtKhgTgP_iS-4,916748
35
+ a_sync/a_sync/_descriptor.cpython-313-i386-linux-musl.so,sha256=W2witK--Ozefsq2bsNsYVMu23SstnfJF0Ph0ZpEXauo,1034488
36
+ a_sync/a_sync/_descriptor.pyi,sha256=5TXA9w97liFmLeF6ryYgVdDtPh6kmoOew-ekqzjices,1200
37
+ a_sync/a_sync/_descriptor.pyx,sha256=jlQ8VgBmUB7fMUBsb3cIqyREmspkTgLQv5jZNqowkwg,13602
38
+ a_sync/a_sync/_flags.c,sha256=kf6xFmdQ6_t85YRUlIApTrjS-lNlM3qb_Y9esi6tdDk,242982
39
+ a_sync/a_sync/_flags.cpython-313-i386-linux-musl.so,sha256=91paw8GyyoLR5YgTxfuRg4utjmP65l1LxC3xWgKcNm8,145176
40
+ a_sync/a_sync/_flags.pxd,sha256=w8CBx5wDoCBRHFmeQOuVwWefDC3LP3zIWGaao_-y_uY,188
41
+ a_sync/a_sync/_flags.pyx,sha256=suOkvo37BZ9RIOdCpAdsXgk_98IOkn6jr1Ss5yunvdU,2806
42
+ a_sync/a_sync/_helpers.c,sha256=kga5pj9beihxcD9gdhLwr5CP3Sb5q4EB64USoc6szzM,617803
43
+ a_sync/a_sync/_helpers.cpython-313-i386-linux-musl.so,sha256=wtLE3bW77hkaIGbJvXuYEc-uqTnZMbwNLUcbSskdVBA,612748
44
+ a_sync/a_sync/_helpers.pxd,sha256=VG28VRW-jlTZJ-0H-W8Y8u5gw8zUVIbsb3nW-REI_Z4,118
45
+ a_sync/a_sync/_helpers.pyi,sha256=t2iBYRsG3qCfhzEfO6aG4KLQv_LWe8yjYDZ4RppnOak,319
46
+ a_sync/a_sync/_helpers.pyx,sha256=rvsCXR7tvddUIymUQCSi4eGzNCstYi5zGAdLCTPaIFQ,5409
47
+ a_sync/a_sync/_kwargs.c,sha256=m4f6na-Ro5Ha3IszS7HbF2k85xCkf-xYjSslt6lIbEs,488361
48
+ a_sync/a_sync/_kwargs.cpython-313-i386-linux-musl.so,sha256=jzemUz0UCfbE7rUbjz1SjuV9dKcIV-XPiMHTCzoVPpc,372308
49
+ a_sync/a_sync/_kwargs.pxd,sha256=RdEVKGXeBvq5_O4WkRXtjKdi8FV6oNPGhtJ-epUnr1M,92
50
+ a_sync/a_sync/_kwargs.pyx,sha256=0hHXMlOpJmtNJ7yApnwEr7U_sub5yrOuZbSn_oBMxwk,1975
51
+ a_sync/a_sync/_meta.py,sha256=iET1qFtqdMZmMRc_-e1rWL2VgYJ7ymsZ6_JdWrrcDS0,9429
52
+ a_sync/a_sync/abstract.c,sha256=2A22ACjNxQaeBGOL5CJ5cy8GRS_gN_zGUT6OSpj6zpg,526018
53
+ a_sync/a_sync/abstract.cpython-313-i386-linux-musl.so,sha256=pQFGYtqsnIgmbYEDPs35bYplEQRnxECPiHFFHcUoHx0,493916
54
+ a_sync/a_sync/abstract.pyi,sha256=g5598V3OtF4wGufOElEZRfUl5B9ox-DPJbPoxp5y2Jk,5057
55
+ a_sync/a_sync/abstract.pyx,sha256=OUp1CJ3NnBInC5agJ-6Ob_n6HfjkHY-f_6gPgZxaGx8,7864
56
+ a_sync/a_sync/base.c,sha256=kU964Lw-L_3SCqnt516XPkZiL1ZvUfFDfIO4V5h42aY,631497
57
+ a_sync/a_sync/base.cpython-313-i386-linux-musl.so,sha256=mgS8PFKp-pICjEainPageXAcC1GhVPSM6bpJ7twGmbU,688568
58
+ a_sync/a_sync/base.pyi,sha256=VncS-3K-0G65hfFS19uLNNqRloU-EecQmzMZnjGB4So,2312
59
+ a_sync/a_sync/base.pyx,sha256=73vU-pr2XClsKLcGlQbhAhjLFHMoBQrb6UH-YuCBhxU,10603
60
+ a_sync/a_sync/config.py,sha256=siXP4CFLQ_vswuG5K-G6cOSjQ6xKc1gN7-XNHFN2tFU,6221
61
+ a_sync/a_sync/decorator.py,sha256=mCSp2KxOsPObANAwR6VK4UzhuelxAOwPDGQ8-jxe8dk,19750
62
+ a_sync/a_sync/flags.c,sha256=6n9K7SOJ13DRkRUmS1oO4jotydVYKWtPv6j8otc6glI,218601
63
+ a_sync/a_sync/flags.cpython-313-i386-linux-musl.so,sha256=2jbX1Z2-PjjU3lvyjqwg9pLy2Q6AZwITKhlwMxQW-OU,62908
64
+ a_sync/a_sync/flags.pxd,sha256=Jxe9hvWn-mPfGXHXLEvRPM2i44c4y2D4iq4ZqZZst80,2238
65
+ a_sync/a_sync/flags.pyi,sha256=PPAqrtJOvabVudb_yT32yZ95PP15uzzuXD2NirkWqTw,2229
66
+ a_sync/a_sync/flags.pyx,sha256=PU_DAZzoXhn-Z-okbTu0p6stnwnKsSEn781TryRRs0E,2305
67
+ a_sync/a_sync/function.c,sha256=mHs2OVkUQT6agEBX-Skf1TLwekKbKiKW3a6YfSRWT0k,1811545
68
+ a_sync/a_sync/function.cpython-313-i386-linux-musl.so,sha256=-7BYaSZIn-lzu2hTy98ixgEgJaAUEdsNRSLevyG3mrs,2261632
69
+ a_sync/a_sync/function.pxd,sha256=QOGVstj2s4oQy18QwjCy--eu4pOlheVwWg3oiT2KDno,830
70
+ a_sync/a_sync/function.pyi,sha256=Ui6VrM_i7Vw7PPye3X4hOQ3Za7ikD0qbI26HIs7wqow,17990
71
+ a_sync/a_sync/function.pyx,sha256=9btAdzY428QkPd7ggQpomhaD7h8BCdzjTvhT4ayw7-g,46400
72
+ a_sync/a_sync/method.c,sha256=1RHiuIrWd8kz37i-k2svKbdcJOdTKEVyHcpc1z1sHWg,1441391
73
+ a_sync/a_sync/method.cpython-313-i386-linux-musl.so,sha256=DHhHyfC2vKKx3VqQm_uI6S-zbSfTXDZWvZYj5-0eX6Q,1840484
74
+ a_sync/a_sync/method.pxd,sha256=TMlVXxWOGc6r-4duaRSi_kEPe24Be1mpeISZNqktqXg,472
75
+ a_sync/a_sync/method.pyi,sha256=Cs3-hormh9RQ9IbWLcf5SsXvOrhvs6RjahjPNP2woes,17806
76
+ a_sync/a_sync/method.pyx,sha256=LFzWxMIdRO8NBS_oNwfRaFNd5riiNttvDP1KwiY-dUc,36125
77
+ a_sync/a_sync/property.c,sha256=4E10LQ0nbpFbBFovr_duMtIDO65hCDUQ47K9NZIjovg,1278916
78
+ a_sync/a_sync/property.cpython-313-i386-linux-musl.so,sha256=UIVH6ArmYuTbjvPWoaaRb0h_aLGa2D9UbPUm8uYraYk,1650572
79
+ a_sync/a_sync/property.pyi,sha256=GWXCWpJBa_qxBYfbv_Lmt02Md8WK9nJYTu7blO4O2ew,13680
80
+ a_sync/a_sync/property.pyx,sha256=LlppqhtT7Ej8XFcsEacBrFTKONCD3nNdzZf_cghjNbo,27791
81
+ a_sync/a_sync/singleton.py,sha256=WRJ9FEqeFB8T59NSOiLLcm-QmMCI0H7nwEpvDIUp9IQ,2492
82
+ a_sync/a_sync/modifiers/__init__.pxd,sha256=17tPpMY2ByVbMGIpI5kiP3WX8V9IM5ZHJp0Y3eT6LvE,60
83
+ a_sync/a_sync/modifiers/__init__.py,sha256=JXyupO5h2hICMd-ha642ttCEFib_gAA6v-Ll6cyHNCA,4159
84
+ a_sync/a_sync/modifiers/limiter.py,sha256=WjO32P4vZLvyJnwpm2qFgqwRmCM7eEHxcdXzilzLlps,4303
85
+ a_sync/a_sync/modifiers/manager.c,sha256=4rAF2p26dsmrEPJ8cxceiJeC1HCRjNpssCYkX-uTvfQ,699669
86
+ a_sync/a_sync/modifiers/manager.cpython-313-i386-linux-musl.so,sha256=ufQGNHFYDYugZTcZx5rjlk-f3LqbbZZ17RfaCp6S0_M,659648
87
+ a_sync/a_sync/modifiers/manager.pxd,sha256=s7zw1kllYYGpe5uFETRIUFsgbVdtFM8jGh4RxZgm25M,183
88
+ a_sync/a_sync/modifiers/manager.pyi,sha256=oSMpBaZJPxzqaAyLT8ikA1DNHvyPRVqVIXrL0EvDe4A,6222
89
+ a_sync/a_sync/modifiers/manager.pyx,sha256=PcyGpRnWgTZlPRukzPotwtUn43SYcbiR2TXaKSgEioI,9396
90
+ a_sync/a_sync/modifiers/semaphores.py,sha256=V1_jjxwuXq55y6Lv4yP4mymVj5AOCMIZXSkaZSKwEdw,6916
91
+ a_sync/a_sync/modifiers/cache/__init__.py,sha256=SJlZ1EyyzBkYlWMU4XbiAlW9SCqCQbOAmDgVAP7CDN0,5532
92
+ a_sync/a_sync/modifiers/cache/memory.py,sha256=vON9K6K3nMkGphfUHCTrtURJUXZ3IE9B757wa-H1oFk,5335
93
+ a_sync/async_property/__init__.pxd,sha256=EGawuQLZIz7ZZLOFmaOQAFUVvabadR0aPYBW7U4TaCo,74
94
+ a_sync/async_property/__init__.py,sha256=L0JYdB7p3RLDRVNExPKl9MtcHaPLIqo5lnpGmHVUI9E,63
95
+ a_sync/async_property/cached.c,sha256=yOveA3r8qwB2gnPKHsoOQsssSENWxzmWgSOY26HjsNw,899222
96
+ a_sync/async_property/cached.cpython-313-i386-linux-musl.so,sha256=A6ZzmnQgq04oO_0X-OigLww5uvkgMSSE8fmh2Q-tPDw,1052800
97
+ a_sync/async_property/cached.pxd,sha256=u4XHDFvvaRv7y65VyDI8gVmYzlGD-kFlN1H2lc48EqU,339
98
+ a_sync/async_property/cached.pyi,sha256=kL7Cvn7z26R7JROFDQ22GaWll-TvOL79Q-OeQ2oaqbo,1814
99
+ a_sync/async_property/cached.pyx,sha256=4UoHk6yACkpwKjD_DBHLMb2JIAAhKVmhDGU7WZYg-Cc,6314
100
+ a_sync/async_property/proxy.c,sha256=bEPwRv3cevrDXTq1y15htnyJx-63rEMEkbWvLa6AUvQ,1538511
101
+ a_sync/async_property/proxy.cpython-313-i386-linux-musl.so,sha256=-EnN6sfKMC77ty7mUY6lg0pyqpulhHhsvWWSByj2UCI,2099568
102
+ a_sync/async_property/proxy.pxd,sha256=fyc5IGOcwNzBP6XsG3vYKjbLP6dOfSVCtGb1EEWDxVU,47
103
+ a_sync/async_property/proxy.pyi,sha256=4GCwklkt5bjp2ADP6SQtVOkL6E9xiyBAf_twX5Cvatg,4218
104
+ a_sync/async_property/proxy.pyx,sha256=0_qGYnr6ZyBtQQGIRI2cMB_o0Bz7RZxJKwuVQGFTgTI,13295
105
+ a_sync/asyncio/__init__.pxd,sha256=Hsy-wTlG1iLWv4mNIRQ9g2rs_8w5ooVIgFFe6VnL7nc,336
106
+ a_sync/asyncio/__init__.py,sha256=Z-_qJgdLFqIacrKRABlk64c1aroLUmgKAqXTeE_GQfU,6333
107
+ a_sync/asyncio/as_completed.c,sha256=UtrUxHfWkLkMEPJf_8vtyxKYFHWfaRPGpyvkMVdZE6A,813080
108
+ a_sync/asyncio/as_completed.cpython-313-i386-linux-musl.so,sha256=8JI36x3dAkc2o2MlL-VLO3tqQQNK4ReI4Qh3va9sju8,869844
109
+ a_sync/asyncio/as_completed.pxd,sha256=mISE2jdb2jOS0q3TKg0F_k-Zf-d3hzdBNKU1PT-Tn40,162
110
+ a_sync/asyncio/as_completed.pyi,sha256=-VdtfMlX0XdkqJbJm8C0gEAi_BfRbkz3Xkdver6vHs4,3753
111
+ a_sync/asyncio/as_completed.pyx,sha256=ar0gJ3iN6-4Jw8xy6i7KVJ54RnAGt1JWE85Wh6kPF48,9052
112
+ a_sync/asyncio/create_task.c,sha256=BNDfgQDJkGDAx8t1CJSYp6Ad_-SzC1V-p75jdW0tJeU,677335
113
+ a_sync/asyncio/create_task.cpython-313-i386-linux-musl.so,sha256=ejZglj-jBZ5_FYgkEissmPeIB7rnGvzqrjJUdhE1mrY,687816
114
+ a_sync/asyncio/create_task.pxd,sha256=x-sZVX-26NoqxYb5mH33uh2Mg-3AqqdYGXx4Ai7xZwU,143
115
+ a_sync/asyncio/create_task.pyi,sha256=5H2z4k_2dGG2QTGjGEgP1N6ITuClYYWzkPbzaeQwKks,1864
116
+ a_sync/asyncio/create_task.pyx,sha256=SUpoo1h0m_a4dPavfQyoOulkgtsKR4KucJZixU1ebhc,8722
117
+ a_sync/asyncio/gather.c,sha256=Fh8o08smNhGZzInZ5nsXvZYI-J8esYsqbGx-AAKaIQo,714678
118
+ a_sync/asyncio/gather.cpython-313-i386-linux-musl.so,sha256=8yv8kPViVbC6WL5nu0OL3aeCk66SmSR8YG3dkh2yJOE,723012
119
+ a_sync/asyncio/gather.pyi,sha256=7P_GapnZAz4z3xDZeg4wKpM1zD-6nVd15tRzG6b_jKk,4515
120
+ a_sync/asyncio/gather.pyx,sha256=4ALHvhJPQsNtw7b9dsbhwmKpXEbiRzOCjMqagi3sTXs,8566
121
+ a_sync/asyncio/igather.c,sha256=r8RkMVmr4f1eAui1LS-9lbgtuGIUh7VUoFWCTAg6CuU,545693
122
+ a_sync/asyncio/igather.cpython-313-i386-linux-musl.so,sha256=jp5kEE_WYanAZSNW95eu-ppuGavK1-B7dWm1u1YAxIY,420456
123
+ a_sync/asyncio/igather.pxd,sha256=M9hMUtgp6118pa0ddR9daQubvnceefnbt4pbvEl0doE,71
124
+ a_sync/asyncio/igather.pyi,sha256=pAlGWqZlOvjmmYmHce9RQCzi5_Rbbilp-sdgu8i_HUE,243
125
+ a_sync/asyncio/igather.pyx,sha256=atNQIKcYSO14zSoJYT9h4stjFLW_caTfTOJlXf82xvc,6618
126
+ a_sync/asyncio/sleep.c,sha256=TGF5AZr9zxCDWvy4nLrXQOzJdj7zBjy4lOnFVZJoxBY,381486
127
+ a_sync/asyncio/sleep.cpython-313-i386-linux-musl.so,sha256=nqbqLmjRWOwvOYa5ejsPy_wDe6T8nNXEddsKYZTjKIg,237064
128
+ a_sync/asyncio/sleep.pyi,sha256=ab8OtiZm4Py0-sVQA2pzGVZiHUoTItkJG_Nd02xduuE,537
129
+ a_sync/asyncio/sleep.pyx,sha256=kjNeRimAfMZB6vJs7t-SbtMgnRqhybO3cZ7uijkosJs,1273
130
+ a_sync/primitives/__init__.pxd,sha256=FIO-eD4HaJ259mz3XB6HE1YF4tDej6ojrxQ_kx-tMwM,38
131
+ a_sync/primitives/__init__.py,sha256=U5r-Do_TKR1FbfLEHuckiYs87QkN4HsYNZfunRhX52c,1642
132
+ a_sync/primitives/_debug.c,sha256=XC3eOtvFA_235OoCwjH7w-zwb_2O4iBIezKOS0E7-x4,671343
133
+ a_sync/primitives/_debug.cpython-313-i386-linux-musl.so,sha256=PdKcPPrlMN6W2_noj1q06ltxnm-QUSFtJ4Cr-j5gHJM,660284
134
+ a_sync/primitives/_debug.pxd,sha256=EaMH5xgQHs7hwnWFUocHEl9pAmUZs9J1aRVtb62zvw0,464
135
+ a_sync/primitives/_debug.pyi,sha256=mcGGn_C9ICgn2mcP-cER1ps-q1pdei-2niu-fEQnFXQ,2175
136
+ a_sync/primitives/_debug.pyx,sha256=NH2hr-yQLz1pKnmleIpIeDVTy75KSguQpUiuoza_ahc,7849
137
+ a_sync/primitives/_loggable.c,sha256=qlfdSVsoc2Hqr2m74ierb503joOm3W15P6FCo8ft_WI,481379
138
+ a_sync/primitives/_loggable.cpython-313-i386-linux-musl.so,sha256=Z83al5oW3re5YUU7KwjQre4xOsxndJovV9pFYugNBUs,356336
139
+ a_sync/primitives/_loggable.pxd,sha256=1YRkqc20KcPoTukbWXn7qpbZ8zA16X1h_84vadCqSPc,133
140
+ a_sync/primitives/_loggable.pyi,sha256=MxE1kINwYiXBFq6tPSWppWs4hToR-6vfBZwIhGJ11z8,1934
141
+ a_sync/primitives/_loggable.pyx,sha256=jxKSBCs4VlXuYC7LsxbUJw0FJInjBKOkEdBSoqCndxY,3003
142
+ a_sync/primitives/queue.py,sha256=2ur5_W_zGOVlkFCuBVFq-DaPSsQ0rH-LcUTeWfNI6OA,33470
143
+ a_sync/primitives/locks/__init__.pxd,sha256=DuPhDRldnCwqBUxgo9V5K0GmA8BWLf5fC266ujDQ9pc,302
144
+ a_sync/primitives/locks/__init__.py,sha256=XPiWbxxPyaCC-NnfNm42up2qf61LdqFgzGkq082DL1Q,436
145
+ a_sync/primitives/locks/counter.c,sha256=HNcykoUwDooOs_hMakfW_jZs6FierNwbGUuqZZY2v9E,796625
146
+ a_sync/primitives/locks/counter.cpython-313-i386-linux-musl.so,sha256=x9qfSL3QaKaidHgLf2Uyqw_BvZuslmPkm-Nijv4Tw8c,769684
147
+ a_sync/primitives/locks/counter.pxd,sha256=_HoPXPMTRY3Gw3GPUB2jAx7lUpjJ4QyO75YiR_BehAQ,409
148
+ a_sync/primitives/locks/counter.pyi,sha256=d83iZwFj5mK9fIohh7n1uRdRiGAnfi2FNMZSyKtli9A,5077
149
+ a_sync/primitives/locks/counter.pyx,sha256=PzP3nBWDJCACRQGgOzSb6OX5DMfKSBHKzZ2ZKaSQPJ4,9311
150
+ a_sync/primitives/locks/event.c,sha256=r5XNsUboY58gXd2L2WSNL6rRAK5TlGIva9EkZeqBD7c,732305
151
+ a_sync/primitives/locks/event.cpython-313-i386-linux-musl.so,sha256=p1U6eN74qozV_Jb4IEozOwEVwQfGaTZf_hVGZE-fQrs,720952
152
+ a_sync/primitives/locks/event.pxd,sha256=Wk1wLD8P6Nml1mzrRM6H34bD06LZWovjEYKnRhGcXE4,696
153
+ a_sync/primitives/locks/event.pyi,sha256=cWK5LPzpbERpaXjYh5LqDcDuJDIexJjhP606mYMbKBw,1456
154
+ a_sync/primitives/locks/event.pyx,sha256=PFQoQVZ9DozV2LOdKK-03fWpX_MrvBqxikKk4k3PjHs,6049
155
+ a_sync/primitives/locks/prio_semaphore.c,sha256=O1IvH4BmcmWTTgeRsbSHn-tskrJ1hMdDwexjm58kTH8,1239278
156
+ a_sync/primitives/locks/prio_semaphore.cpython-313-i386-linux-musl.so,sha256=P2bCwMPPuovanUP-YN7MJqc-xna8AOqw8G3xt4NS6fY,1322976
157
+ a_sync/primitives/locks/prio_semaphore.pxd,sha256=SZXX1jH12m9PKH9VmrKpLdTctY0c_wYS75YGWoDdlzE,1041
158
+ a_sync/primitives/locks/prio_semaphore.pyi,sha256=3YwrIq8yi21oAiIQK_jlL738GmYfQb8Olqsq8n3-pUA,7630
159
+ a_sync/primitives/locks/prio_semaphore.pyx,sha256=DAgcufTedvvPBj5BfM56chjplEi0QUd1qAV49bSb-oM,22096
160
+ a_sync/primitives/locks/semaphore.c,sha256=gAzVopdXuBDzlAne6g8nhZS5qANdUN6L6a1IHju89NQ,1217989
161
+ a_sync/primitives/locks/semaphore.cpython-313-i386-linux-musl.so,sha256=bz6IJ-bPDyJM5HJudEVHpYQcd_fL8KHnzch_wAsGrZQ,1351056
162
+ a_sync/primitives/locks/semaphore.pxd,sha256=zy-PgktLUsFaXxvrSbB3m6gxisgzchCpKrcX8Zzwq_I,585
163
+ a_sync/primitives/locks/semaphore.pyi,sha256=TTyGOw4iAsul3qITuEqN9xIqTVcNNj3Kl4BDW5NeJww,6023
164
+ a_sync/primitives/locks/semaphore.pyx,sha256=eQX6J5SdWK5qnXNPs6frO6BpQf9RuExNwZIjMlkNnHI,14965
165
+ a_sync/sphinx/__init__.py,sha256=UvdsakVmkn0Lw4vEd3jA3_Acymde95-78o87lel8ikk,49
166
+ a_sync/sphinx/ext.py,sha256=E93N5AmGcfGksN1J3oUsvewJZVZ3dNYcr0mwKJQ3ALk,8917
167
+ a_sync/utils/__init__.py,sha256=Y6R-IcD5ROzp2Zs3ZMv3bapkcfOpJHlBeD838bntd-Q,3213
168
+ a_sync/utils/iterators.py,sha256=CbpZDFrl6Vv81I_1IbCHtqwrSFs5sYnVv0KsvZe9Reo,11094
169
+ a_sync/utils/repr.c,sha256=uXyKB6BfVAqagrb5uBYGEoH6dkK-TDvnT423NcZn-ws,658388
170
+ a_sync/utils/repr.cpython-313-i386-linux-musl.so,sha256=izLjEY_p90C83KH_BXFr2oi738hwsAyix_1N5mNAi9U,613284
171
+ a_sync/utils/repr.pyi,sha256=PWdsa6sF9_3nBqEgLaxtaHty7o7gwL--jPqvcelHY10,131
172
+ a_sync/utils/repr.pyx,sha256=xdsVdK75Zi5pAoh-8qRG0q7F0ySAq1zDkksZw37FoL4,2632
173
+ ez_a_sync-0.33.4.dist-info/METADATA,sha256=lU8kKZQjGC1Rz9pESlm7y8wBwOfjJh96OheuwKCz3SY,13255
174
+ ez_a_sync-0.33.4.dist-info/WHEEL,sha256=I3qXEeYII2DAKChe42mwue5TBWcnIOptn9ocRU9pF-E,110
175
+ ez_a_sync-0.33.4.dist-info/top_level.txt,sha256=ew2xVyFeZE_a5XMEL64h7-vJIbaBQieaFcvBAWUpU_s,7
176
+ ez_a_sync-0.33.4.dist-info/RECORD,,
177
+ ez_a_sync-0.33.4.dist-info/licenses/LICENSE.txt,sha256=1on6-17OUMlja6vSPTcmlmeT_DwujCZJijYxaplBvZk,1075
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp313-cp313-musllinux_1_2_i686
5
+
@@ -0,0 +1,17 @@
1
+ MIT License
2
+ Copyright (c) 2023 Posted On The Block LLC
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+ The above copyright notice and this permission notice shall be included in all
10
+ copies or substantial portions of the Software.
11
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ a_sync