ez-a-sync 0.32.9__cp312-cp312-macosx_11_0_arm64.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 (177) hide show
  1. a_sync/ENVIRONMENT_VARIABLES.py +42 -0
  2. a_sync/__init__.pxd +2 -0
  3. a_sync/__init__.py +144 -0
  4. a_sync/_smart.c +22623 -0
  5. a_sync/_smart.cpython-312-darwin.so +0 -0
  6. a_sync/_smart.pxd +2 -0
  7. a_sync/_smart.pyi +202 -0
  8. a_sync/_smart.pyx +652 -0
  9. a_sync/_typing.py +258 -0
  10. a_sync/a_sync/__init__.py +60 -0
  11. a_sync/a_sync/_descriptor.c +19745 -0
  12. a_sync/a_sync/_descriptor.cpython-312-darwin.so +0 -0
  13. a_sync/a_sync/_descriptor.pyi +34 -0
  14. a_sync/a_sync/_descriptor.pyx +422 -0
  15. a_sync/a_sync/_flags.c +5687 -0
  16. a_sync/a_sync/_flags.cpython-312-darwin.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 +13718 -0
  20. a_sync/a_sync/_helpers.cpython-312-darwin.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 +10672 -0
  25. a_sync/a_sync/_kwargs.cpython-312-darwin.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 +11350 -0
  30. a_sync/a_sync/abstract.cpython-312-darwin.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 +14066 -0
  34. a_sync/a_sync/base.cpython-312-darwin.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 +562 -0
  39. a_sync/a_sync/flags.c +4471 -0
  40. a_sync/a_sync/flags.cpython-312-darwin.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 +37747 -0
  45. a_sync/a_sync/function.cpython-312-darwin.so +0 -0
  46. a_sync/a_sync/function.pxd +24 -0
  47. a_sync/a_sync/function.pyi +556 -0
  48. a_sync/a_sync/function.pyx +1363 -0
  49. a_sync/a_sync/method.c +28387 -0
  50. a_sync/a_sync/method.cpython-312-darwin.so +0 -0
  51. a_sync/a_sync/method.pxd +2 -0
  52. a_sync/a_sync/method.pyi +524 -0
  53. a_sync/a_sync/method.pyx +999 -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 +15262 -0
  60. a_sync/a_sync/modifiers/manager.cpython-312-darwin.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 +296 -0
  64. a_sync/a_sync/modifiers/semaphores.py +173 -0
  65. a_sync/a_sync/property.c +27952 -0
  66. a_sync/a_sync/property.cpython-312-darwin.so +0 -0
  67. a_sync/a_sync/property.pyi +376 -0
  68. a_sync/a_sync/property.pyx +813 -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 +20542 -0
  74. a_sync/async_property/cached.cpython-312-darwin.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 +36410 -0
  79. a_sync/async_property/proxy.cpython-312-darwin.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 +18198 -0
  86. a_sync/asyncio/as_completed.cpython-312-darwin.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 +15032 -0
  91. a_sync/asyncio/create_task.cpython-312-darwin.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 +268 -0
  95. a_sync/asyncio/gather.c +15735 -0
  96. a_sync/asyncio/gather.cpython-312-darwin.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 +12334 -0
  100. a_sync/asyncio/igather.cpython-312-darwin.so +0 -0
  101. a_sync/asyncio/igather.pxd +1 -0
  102. a_sync/asyncio/igather.pyi +7 -0
  103. a_sync/asyncio/igather.pyx +175 -0
  104. a_sync/asyncio/sleep.c +8916 -0
  105. a_sync/asyncio/sleep.cpython-312-darwin.so +0 -0
  106. a_sync/asyncio/sleep.pyi +14 -0
  107. a_sync/asyncio/sleep.pyx +49 -0
  108. a_sync/debugging.c +15156 -0
  109. a_sync/debugging.cpython-312-darwin.so +0 -0
  110. a_sync/debugging.pyi +73 -0
  111. a_sync/debugging.pyx +107 -0
  112. a_sync/exceptions.c +12952 -0
  113. a_sync/exceptions.cpython-312-darwin.so +0 -0
  114. a_sync/exceptions.pyi +376 -0
  115. a_sync/exceptions.pyx +443 -0
  116. a_sync/executor.py +575 -0
  117. a_sync/functools.c +11489 -0
  118. a_sync/functools.cpython-312-darwin.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 +37567 -0
  124. a_sync/iter.cpython-312-darwin.so +0 -0
  125. a_sync/iter.pxd +9 -0
  126. a_sync/iter.pyi +366 -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 +14737 -0
  131. a_sync/primitives/_debug.cpython-312-darwin.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 +10569 -0
  136. a_sync/primitives/_loggable.cpython-312-darwin.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 +16972 -0
  143. a_sync/primitives/locks/counter.cpython-312-darwin.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 +260 -0
  147. a_sync/primitives/locks/event.c +16127 -0
  148. a_sync/primitives/locks/event.cpython-312-darwin.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 +183 -0
  152. a_sync/primitives/locks/prio_semaphore.c +24084 -0
  153. a_sync/primitives/locks/prio_semaphore.cpython-312-darwin.so +0 -0
  154. a_sync/primitives/locks/prio_semaphore.pxd +24 -0
  155. a_sync/primitives/locks/prio_semaphore.pyi +217 -0
  156. a_sync/primitives/locks/prio_semaphore.pyx +554 -0
  157. a_sync/primitives/locks/semaphore.c +25816 -0
  158. a_sync/primitives/locks/semaphore.cpython-312-darwin.so +0 -0
  159. a_sync/primitives/locks/semaphore.pxd +21 -0
  160. a_sync/primitives/locks/semaphore.pyi +196 -0
  161. a_sync/primitives/locks/semaphore.pyx +452 -0
  162. a_sync/primitives/queue.py +1018 -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 +916 -0
  167. a_sync/utils/__init__.py +105 -0
  168. a_sync/utils/iterators.py +297 -0
  169. a_sync/utils/repr.c +14354 -0
  170. a_sync/utils/repr.cpython-312-darwin.so +0 -0
  171. a_sync/utils/repr.pyi +2 -0
  172. a_sync/utils/repr.pyx +73 -0
  173. ez_a_sync-0.32.9.dist-info/METADATA +367 -0
  174. ez_a_sync-0.32.9.dist-info/RECORD +177 -0
  175. ez_a_sync-0.32.9.dist-info/WHEEL +6 -0
  176. ez_a_sync-0.32.9.dist-info/licenses/LICENSE.txt +17 -0
  177. ez_a_sync-0.32.9.dist-info/top_level.txt +1 -0
Binary file
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,367 @@
1
+ Metadata-Version: 2.4
2
+ Name: ez-a-sync
3
+ Version: 0.32.9
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.8
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: Implementation :: CPython
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Topic :: Software Development :: Libraries
19
+ Requires-Python: >=3.8,<3.14
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE.txt
22
+ Requires-Dist: aiolimiter>=1
23
+ Requires-Dist: async_lru_threadsafe==2.0.4
24
+ Requires-Dist: async_property==0.2.1
25
+ Requires-Dist: typed_envs>=0.0.5
26
+ Requires-Dist: typing_extensions>=4.1.0
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: license
34
+ Dynamic: license-file
35
+ Dynamic: requires-dist
36
+ Dynamic: requires-python
37
+ Dynamic: summary
38
+
39
+ ## Table of Contents
40
+ <!-- TOC -->
41
+
42
+ - [Table of Contents](#table-of-contents)
43
+ - [Introduction](#introduction)
44
+ - [Installation](#installation)
45
+ - [Usage](#usage)
46
+ - [Decorators](#decorators)
47
+ - [@a_sync'async'](#a_syncasync)
48
+ - [@a_sync'sync'](#a_syncsync)
49
+ - [Classes](#classes)
50
+ - [Modifiers](#modifiers)
51
+ - [async modifiers](#async-modifiers)
52
+ - [sync modifiers](#sync-modifiers)
53
+ - [Default Modifiers](#default-modifiers)
54
+ - [Other Helpful Classes](#other-helpful-modules)
55
+ - [ASyncIterable](#asynciterable)
56
+ - [ASyncIterator](#asynciterator)
57
+ - [ASyncFilter](#asyncfilter)
58
+ - [ASyncSorter](#asyncsorter)
59
+ - [Other Helpful Modules](#other-helpful-modules)
60
+ - [future](#future)
61
+ - [ASyncFuture](#asyncfuture)
62
+ - [future decorator](#future-decorator)
63
+ - [asyncio](#asyncio)
64
+
65
+ <!-- /TOC -->
66
+ ## Introduction
67
+
68
+ `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.
69
+
70
+ It also contains implementations of various asyncio primitives with extra functionality, including queues and various types of locks.
71
+ \# TODO add links to various objects' docs
72
+
73
+ ## Installation
74
+
75
+ `ez-a-sync` can be installed via pip:
76
+
77
+ ```
78
+ pip install ez-a-sync
79
+ ```
80
+
81
+ ## Usage
82
+
83
+ ### Decorators
84
+
85
+ `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')`
86
+
87
+ #### `@a_sync('async')`
88
+
89
+ The `@a_sync('async')` decorator can be used to define an asynchronous function that can also be executed synchronously.
90
+
91
+ ```python
92
+ @a_sync('async')
93
+ def some_function():
94
+ ...
95
+ ```
96
+
97
+ This function can then be executed asynchronously using `await`:
98
+
99
+ ```python
100
+ aaa = await some_function()
101
+ ```
102
+
103
+ It can also be executed synchronously by passing `sync=True` or `asynchronous=False`:
104
+
105
+ ```python
106
+ aaa = some_function(sync=True)
107
+ ```
108
+
109
+ #### `@a_sync('sync')`
110
+
111
+ The `@a_sync('sync')` decorator can be used to define a synchronous function that can also be executed asynchronously.
112
+
113
+ ```python
114
+ @a_sync('sync')
115
+ async def some_function():
116
+ ...
117
+ ```
118
+
119
+ This function can then be executed synchronously:
120
+
121
+ ```python
122
+ aaa = some_function()
123
+ ```
124
+
125
+ It can also be overridden asynchronously by passing `sync=False` or `asynchronous=True` and using `await`:
126
+
127
+ ```python
128
+ aaa = await some_function(sync=False)
129
+ ```
130
+
131
+ ### Classes
132
+
133
+ `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`:
134
+
135
+ ```python
136
+ class CoolAsyncClass(ASyncGenericBase):
137
+ asynchronous=True
138
+
139
+ def some_sync_fn():
140
+ ...
141
+ ```
142
+
143
+ In this example, `CoolAsyncClass` has `asynchronous=True`, which means it is an asynchronous class. You can call `some_sync_fn` asynchronously using `await`:
144
+
145
+ ```python
146
+ aaa = await CoolAsyncClass().some_sync_fn()
147
+ ```
148
+
149
+ `CoolAsyncClass` functions can also be called synchronously by passing `sync=True`:
150
+
151
+ ```python
152
+ aaa = CoolAsyncClass().some_sync_fn(sync=True)
153
+ ```
154
+
155
+ Similarly, you can create a synchronous class by setting `sync=True` or `asynchronous=False`:
156
+
157
+ ```python
158
+ class CoolSyncClass(ASyncGenericBase):
159
+ asynchronous=False
160
+
161
+ async def some_async_fn():
162
+ ...
163
+ ```
164
+
165
+ `CoolSyncClass` functions can be called synchronously:
166
+
167
+ ```python
168
+ aaa = CoolSyncClass().some_async_fn()
169
+ ```
170
+
171
+ It can also be called asynchronously by passing `sync=False` or `asynchronous=True` and using `await`:
172
+
173
+ ```python
174
+ aaa = await CoolSyncClass().some_async_fn(sync=False)
175
+ ```
176
+
177
+ 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:
178
+
179
+ ```python
180
+ class CoolDualClass(ASyncGenericBase):
181
+ def __init__(self, asynchronous):
182
+ self.asynchronous=asynchronous
183
+
184
+ async def some_async_fn():
185
+ ...
186
+ ```
187
+
188
+ You can create an instance of `CoolDualClass` with `sync=False` or `asynchronous=True` to call it asynchronously:
189
+
190
+ ```python
191
+ async_instance = CoolDualClass(asynchronous=True)
192
+ aaa = await async_instance.some_async_fn()
193
+ aaa = async_instance.some_async_fn(sync=True)
194
+ ```
195
+
196
+ You can also create an instance with `sync=True` or `asynchronous=False` to call it synchronously:
197
+
198
+ ```python
199
+ sync_instance = CoolDualClass(asynchronous=False)
200
+ aaa = sync_instance.some_async_fn()
201
+ aaa = sync_instance.some_async_fn(sync=False)
202
+ ```
203
+
204
+ ### Modifiers
205
+
206
+ The `ez-a-sync` library provides several settings that can be used to customize the behavior of the decorators and classes.
207
+
208
+ To apply settings to the decorators or base classes, simply pass them as keyword arguments when calling the decorator or creating an instance.
209
+
210
+ For example, to apply `cache_type='memory'` to a function decorated with `@a_sync('async')`, you would do the following:
211
+
212
+ ```python
213
+ @a_sync('async', cache_type='memory')
214
+ def some_function():
215
+ ...
216
+ ```
217
+
218
+ #### async modifiers
219
+
220
+ The `@a_sync('async')` decorator has the following settings:
221
+
222
+ - `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.
223
+ - `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.
224
+ - `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.
225
+ - `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.
226
+ - `runs_per_minute`: Setting this value enables a rate limiter for the decorated function.
227
+ - `semaphore`: Drop in a Semaphore for your async defined functions.
228
+
229
+ #### sync modifiers
230
+
231
+ The `@a_sync('sync')` decorator has the following setting:
232
+
233
+ - `executor`: The executor for the synchronous function. Set to the library's default of `config.default_sync_executor`.
234
+
235
+ #### Default Modifiers
236
+
237
+ Instead of setting modifiers one by one in functions, you can set a default value for modifiers using ENV variables:
238
+
239
+ - `DEFAULT_MODE`
240
+ - `CACHE_TYPE`
241
+ - `CACHE_TYPED`
242
+ - `RAM_CACHE_MAXSIZE`
243
+ - `RAM_CACHE_TTL`
244
+ - `RUNS_PER_MINUTE`
245
+ - `SEMAPHORE`
246
+
247
+ ### Other Helpful Classes
248
+ #### ASyncIterable
249
+ 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.
250
+
251
+ ```python
252
+ from a_sync import ASyncIterable
253
+
254
+ async_iterable = ASyncIterable(some_async_iterable)
255
+
256
+ # Asynchronous iteration
257
+ async for item in async_iterable:
258
+ ...
259
+
260
+ # Synchronous iteration
261
+ for item in async_iterable:
262
+ ...
263
+ ```
264
+
265
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncIterable) for more information.
266
+
267
+ #### ASyncIterator
268
+
269
+ 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.
270
+
271
+ ```python
272
+ from a_sync import ASyncIterator
273
+
274
+ async_iterator = ASyncIterator(some_async_iterator)
275
+
276
+ # Asynchronous iteration
277
+ async for item in async_iterator:
278
+ ...
279
+
280
+ # Synchronous iteration
281
+ for item in async_iterator:
282
+ ...
283
+ ```
284
+
285
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncIterator) for more information.
286
+
287
+ #### ASyncFilter
288
+
289
+ 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.
290
+
291
+ ```python
292
+ from a_sync import ASyncFilter
293
+
294
+ async def is_even(x):
295
+ return x % 2 == 0
296
+
297
+ filtered_iterable = ASyncFilter(is_even, some_async_iterable)
298
+
299
+ # or use the alias
300
+ import a_sync
301
+
302
+ filtered_iterable = a_sync.filter(is_even, some_async_iterable)
303
+
304
+ # Asynchronous iteration
305
+ async for item in filtered_iterable:
306
+ ...
307
+
308
+ # Synchronous iteration
309
+ for item in filtered_iterable:
310
+ ...
311
+ ```
312
+
313
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncFilter) for more information.
314
+
315
+ #### ASyncSorter
316
+
317
+ 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.
318
+
319
+ ```python
320
+ from a_sync import ASyncSorter
321
+
322
+ sorted_iterable = ASyncSorter(some_async_iterable, key=lambda x: x.value)
323
+
324
+ # or use the alias
325
+ import a_sync
326
+
327
+ sorted_iterable = a_sync.sort(some_async_iterable, key=lambda x: x.value)
328
+
329
+ # Asynchronous iteration
330
+ async for item in sorted_iterable:
331
+ ...
332
+
333
+ # Synchronous iteration
334
+ for item in sorted_iterable:
335
+ ...
336
+ ```
337
+
338
+ See the [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.ASyncSorter) for more information.
339
+
340
+ ## Other Helpful Modules
341
+ The stuff here is unrelated to the main purpose of ez-a-sync, but cool and useful nonetheless
342
+
343
+ ### asyncio
344
+
345
+ The `ez-a-sync` library extends the functionality of Python's `asyncio` module with additional utilities to simplify asynchronous programming.
346
+
347
+ - **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).
348
+
349
+ - **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).
350
+
351
+ - **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).
352
+
353
+ - **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).
354
+
355
+ 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)
356
+
357
+ ### future
358
+ The future module is something totally different.
359
+ TODO: short explainer of module value prop and use case
360
+
361
+ #### ASyncFuture
362
+ [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.future.ASyncFuture)
363
+ TODO: short explainers on ASyncFuture class
364
+
365
+ #### future decorator
366
+ [documentation](#https://bobthebuidler.github.io/ez-a-sync/source/a_sync.html#a_sync.future.future)
367
+ TODO: short explainers on future fn
@@ -0,0 +1,177 @@
1
+ a_sync/debugging.c,sha256=0DDVbUYYKbezBHshu4_b-mzZ0cuvxFE6CpfrqsMV00w,589308
2
+ a_sync/task.py,sha256=Es9UpImBgCtggVTzcw40ta2pVnphLinK3qI3Ei_SKdw,34632
3
+ a_sync/_smart.c,sha256=5AW9OmH7jMhhslYLPBTjprIyMIGCGD3cqFjKOtwERgg,914664
4
+ a_sync/_smart.pyi,sha256=mUQwUiiSsMsbtJTKdXm076ua5B2A9USaKgjZq1Se_ZQ,5390
5
+ a_sync/functools.pyi,sha256=HGM208HKg5FOUbu9CbfnIOx3sdQB1OwO1t-0tZKd-T4,1404
6
+ a_sync/_typing.py,sha256=x24VIVjxz8sUWPmQR072pHAQxJO769Nn02f3eakFpe8,6850
7
+ a_sync/functools.cpython-312-darwin.so,sha256=MIFa_wbEf2pK703aa4vLtK_KzajryOL3FrGyc87SGaE,121904
8
+ a_sync/ENVIRONMENT_VARIABLES.py,sha256=YgIB8mQRqQBLbD3DdwMjx4ylqO8pK3GUvSNCerWJzx8,1280
9
+ a_sync/iter.pyx,sha256=TKzdMQkI74oKdgW-Us1WSgE5_KdS_7dOUykAmTHiXgU,37486
10
+ a_sync/__init__.pxd,sha256=ol4jqkvuweaaU8GQU_Mq9rak8IIsagYTdhYhbKK74ac,81
11
+ a_sync/_smart.cpython-312-darwin.so,sha256=Hi8hlX0Hhh8IqEqSff60rUPA06zq2S6dhklYqna_g-o,224912
12
+ a_sync/functools.pxd,sha256=hhygzVpa5tXnDWR1pi_WLkOBd_1mC60K3279wYFEfA8,187
13
+ a_sync/_smart.pxd,sha256=3FlPqSvAtmGXIDFzfm7wpkvL6xt8z8w-vwow4Lura2g,76
14
+ a_sync/exceptions.pyi,sha256=NnBEKUBzBCl0kLj75ukwyQeWXjwPSkDg-NxKsXh-Ans,10834
15
+ a_sync/__init__.py,sha256=UrDqNkHGqvSY4O9wM9ObaoOP00cLq1sM-ucRnUvLyKk,5726
16
+ a_sync/debugging.pyx,sha256=Z29Lek1NyUXVFHjfk9O6XWxPNk1uRFyY6tK6fTfgxGM,3045
17
+ a_sync/aliases.py,sha256=TbLyuLeFfJEmcC5-NP6h4DQ9QXlQjGny2NUP_x1tflw,212
18
+ a_sync/debugging.cpython-312-darwin.so,sha256=Uic6M0pqNrfkiGCbxXTjOHFIOFeda7LWAyKJj1_4v8o,150080
19
+ a_sync/_smart.pyx,sha256=8L8yIEJwEnhb_VgqjMTtTEF7EHt5CeWxi2LUw7meFrY,18730
20
+ a_sync/functools.c,sha256=KwvIpLg4DT2z4P-VlvJLL2pR3CeWdQslyKLOY4xrQlI,450421
21
+ a_sync/functools.pyx,sha256=F-Vp5JrhEt4jaFQDx48FadI7NGLlPfoIPWRWHTQob0Q,4837
22
+ a_sync/iter.c,sha256=XmEDM2hAUhyvwT_pGhivBBk5OdIb01HAjZpfsjkiFJY,1611802
23
+ a_sync/iter.pxd,sha256=UcuWgdezhjgMQ05x3KaUrmsQJkXwqWZbI6mod31qEXc,351
24
+ a_sync/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ a_sync/future.py,sha256=CK3t7BE1AfuFhWLFw50rFaCox0IRYW2x0HqVpOJC6o8,48675
26
+ a_sync/iter.pyi,sha256=785C3RAcRT69ngv3LfEE56Sf8hyLqapxS94uqfz1na8,15412
27
+ a_sync/exceptions.c,sha256=7juaOwpPuyUNyMcN3KavW1QM6uUIDHYKwTQBf3PYpH8,550527
28
+ a_sync/iter.cpython-312-darwin.so,sha256=AFMKdG7rSnrPOcjDJEFEMHXQrpD5MQ8V_PXSmngZ9ZQ,408296
29
+ a_sync/exceptions.pyx,sha256=MGgpBVAESC-5TtEEECgs74ZIx5ToR6qi_stfmnCyoaQ,13201
30
+ a_sync/debugging.pyi,sha256=82AWVId_ghlFnIZkB3IQiEPqW9Yn3gKwknWNX6CCRLM,2257
31
+ a_sync/exceptions.cpython-312-darwin.so,sha256=MtbXnm88e35vRMFm08RukCrw_qw_uk84VGnJxwwEfFo,158384
32
+ a_sync/executor.py,sha256=bacluNlegqlioPxlcFOTaGiH2ylXJYkfBSsUMnQqOWQ,21401
33
+ a_sync/a_sync/_kwargs.pxd,sha256=RdEVKGXeBvq5_O4WkRXtjKdi8FV6oNPGhtJ-epUnr1M,92
34
+ a_sync/a_sync/abstract.pyx,sha256=OUp1CJ3NnBInC5agJ-6Ob_n6HfjkHY-f_6gPgZxaGx8,7864
35
+ a_sync/a_sync/_kwargs.cpython-312-darwin.so,sha256=ce1eL2Buarm4x7Yy_F7AdP9nsM-DiZxzoDDh4rv9rTc,106016
36
+ a_sync/a_sync/base.pyi,sha256=t7AsaZzf74djHjkAA7Dnzf12sG1ppoxpwm0Iyn1GM3w,2326
37
+ a_sync/a_sync/_helpers.cpython-312-darwin.so,sha256=lf2MaRkhahuSH-mVjpU7r9cgQH77CsF97GdvbrJDbmE,146688
38
+ a_sync/a_sync/_meta.py,sha256=PnmPbTSGOB3WMjJUj8FfhafrkGcWJ-SzjYeENfS37NI,9427
39
+ a_sync/a_sync/_flags.pyx,sha256=suOkvo37BZ9RIOdCpAdsXgk_98IOkn6jr1Ss5yunvdU,2806
40
+ a_sync/a_sync/flags.pxd,sha256=Jxe9hvWn-mPfGXHXLEvRPM2i44c4y2D4iq4ZqZZst80,2238
41
+ a_sync/a_sync/property.pyi,sha256=GWXCWpJBa_qxBYfbv_Lmt02Md8WK9nJYTu7blO4O2ew,13680
42
+ a_sync/a_sync/_helpers.pxd,sha256=VG28VRW-jlTZJ-0H-W8Y8u5gw8zUVIbsb3nW-REI_Z4,118
43
+ a_sync/a_sync/config.py,sha256=siXP4CFLQ_vswuG5K-G6cOSjQ6xKc1gN7-XNHFN2tFU,6221
44
+ a_sync/a_sync/_flags.c,sha256=hxVtZT5faViQExnKIQnSBb-p9Rbqpxpor9dNxQH9dZA,217269
45
+ a_sync/a_sync/decorator.py,sha256=CdZuy_ql4oxzg4qbxCHTtHrGnMkxJKs1LwzlmLdX3Uc,17188
46
+ a_sync/a_sync/flags.cpython-312-darwin.so,sha256=--g4gAQ3l7SREBigsYM0pL0k144eVwYNXl9epmf3NuQ,56472
47
+ a_sync/a_sync/property.c,sha256=wc1wMcSHqMKxZ7MgijEDUH88d0BiA1SpaS5FIBAJPPs,1237719
48
+ a_sync/a_sync/_helpers.pyi,sha256=t2iBYRsG3qCfhzEfO6aG4KLQv_LWe8yjYDZ4RppnOak,319
49
+ a_sync/a_sync/method.pyx,sha256=gTyPQn1znZCsIHnqeXC2nPRoRNBrnpHTx7fAQwW9nEk,35131
50
+ a_sync/a_sync/flags.pyi,sha256=PPAqrtJOvabVudb_yT32yZ95PP15uzzuXD2NirkWqTw,2229
51
+ a_sync/a_sync/function.pyx,sha256=yV4I_xTWZ02Z7gm_gtsHUGCEKNIIWlsEqh3AFddbaHM,45603
52
+ a_sync/a_sync/base.c,sha256=H5myWP3tyqTOkIR3692XiDibekzJlCJ0XA-QeL8u7ZI,562178
53
+ a_sync/a_sync/__init__.py,sha256=P8AO0TBmYPW5BYVk0TohOwLq8jurpRKfXnaPO-qDMJw,2200
54
+ a_sync/a_sync/function.c,sha256=12-cYu-_CbCPan-pW5N_4R-AeiUEkDOgyAgtjRZTp70,1692632
55
+ a_sync/a_sync/_descriptor.pyi,sha256=N77KA4DQbXUXKeAf-vTpAXc7E4Bk1d-Khtr7vjzwRwI,1343
56
+ a_sync/a_sync/_helpers.c,sha256=H3xMbljWjqkTByQmwyFkdJGoMXH_EeEQfHPtn9qeAng,550837
57
+ a_sync/a_sync/abstract.pyi,sha256=IGEh74mnvZECWpSr0bh-ZQeFc-6Q4cu9EefhEaDLp2c,5071
58
+ a_sync/a_sync/base.pyx,sha256=73vU-pr2XClsKLcGlQbhAhjLFHMoBQrb6UH-YuCBhxU,10603
59
+ a_sync/a_sync/method.cpython-312-darwin.so,sha256=IGDqGKXrjt1con-VVZDak9BEU5Jl2Rs9aO6KVs5LGvg,336096
60
+ a_sync/a_sync/function.pxd,sha256=WLkHI94wFFFMoOwgEg3A83FIR_1h3ViZWENHE3VWHno,679
61
+ a_sync/a_sync/_descriptor.c,sha256=BIV7KxjkbqOuOsjuSy1Lspvhv4Z-kwhoYZp4fUlPvZQ,843727
62
+ a_sync/a_sync/_descriptor.cpython-312-darwin.so,sha256=m_IRLyGvMPEImLtRGpf0ILAZjHduLtqJpC2yCbw2uVI,225648
63
+ a_sync/a_sync/method.pxd,sha256=3kcpKfsO6rtO8wFokzShcwlAeSKxy9WNq2t710zi8dw,123
64
+ a_sync/a_sync/property.pyx,sha256=zQTVic_262ldWPvxlS2tgZbfpnaaOf6cU10GYSwiUNY,27480
65
+ a_sync/a_sync/singleton.py,sha256=WRJ9FEqeFB8T59NSOiLLcm-QmMCI0H7nwEpvDIUp9IQ,2492
66
+ a_sync/a_sync/base.cpython-312-darwin.so,sha256=dUa7eqQJXo_RTO3NbP4KYPiNvMbxz9Vr-Tz-FuJ2NaM,142152
67
+ a_sync/a_sync/function.cpython-312-darwin.so,sha256=eDZ7zjeItHJxrBvzXLAyEXdTeb-T-ksBvi6vp-Zo4qI,384672
68
+ a_sync/a_sync/abstract.c,sha256=my8pajUN_xUqEIJitvZ7ZN5Mxy8e4lJv-iXgV308oQE,461336
69
+ a_sync/a_sync/flags.c,sha256=pnoCgI2Cochd4fMayKEKI82lw8f83fwhhUkNajLvxJk,175737
70
+ a_sync/a_sync/abstract.cpython-312-darwin.so,sha256=aq3e-Vl59VukmqMIenxbdCSnqWSbjhefjmlYOuaVKZQ,122640
71
+ a_sync/a_sync/method.c,sha256=t3BPxuFhK8z8ZODABEx1L_whq6JUTwPwoJkY-s7yjw4,1261576
72
+ a_sync/a_sync/_flags.cpython-312-darwin.so,sha256=klNJ8MdjsQtrnVsihM4Zrp5LZtfdDON6mkKoYu16KBA,76496
73
+ a_sync/a_sync/method.pyi,sha256=DpzdpuYSi7wiZkkX9xB0pg1oFcCYxJbVrWj3J_ISo3M,17815
74
+ a_sync/a_sync/_helpers.pyx,sha256=rvsCXR7tvddUIymUQCSi4eGzNCstYi5zGAdLCTPaIFQ,5409
75
+ a_sync/a_sync/flags.pyx,sha256=PU_DAZzoXhn-Z-okbTu0p6stnwnKsSEn781TryRRs0E,2305
76
+ a_sync/a_sync/_flags.pxd,sha256=w8CBx5wDoCBRHFmeQOuVwWefDC3LP3zIWGaao_-y_uY,188
77
+ a_sync/a_sync/function.pyi,sha256=3F4BQplDW0IU5wDlkvc0T9n58qMQHtop3EPo1GYV0rg,17737
78
+ a_sync/a_sync/property.cpython-312-darwin.so,sha256=mAYE0pOTHUkF3BTa5AcoQnkWaupJ5RjoIk7_w_LC6hE,301856
79
+ a_sync/a_sync/_kwargs.c,sha256=blxZEu_yTOZAAn1aARwbJlTKoSgC3ojhSWeGgG6Y6ws,405231
80
+ a_sync/a_sync/_kwargs.pyx,sha256=0hHXMlOpJmtNJ7yApnwEr7U_sub5yrOuZbSn_oBMxwk,1975
81
+ a_sync/a_sync/_descriptor.pyx,sha256=jlQ8VgBmUB7fMUBsb3cIqyREmspkTgLQv5jZNqowkwg,13602
82
+ a_sync/a_sync/modifiers/manager.pyi,sha256=oSMpBaZJPxzqaAyLT8ikA1DNHvyPRVqVIXrL0EvDe4A,6222
83
+ a_sync/a_sync/modifiers/__init__.pxd,sha256=17tPpMY2ByVbMGIpI5kiP3WX8V9IM5ZHJp0Y3eT6LvE,60
84
+ a_sync/a_sync/modifiers/semaphores.py,sha256=V1_jjxwuXq55y6Lv4yP4mymVj5AOCMIZXSkaZSKwEdw,6916
85
+ a_sync/a_sync/modifiers/manager.pxd,sha256=s7zw1kllYYGpe5uFETRIUFsgbVdtFM8jGh4RxZgm25M,183
86
+ a_sync/a_sync/modifiers/__init__.py,sha256=JXyupO5h2hICMd-ha642ttCEFib_gAA6v-Ll6cyHNCA,4159
87
+ a_sync/a_sync/modifiers/manager.pyx,sha256=OCGpDw_-1dZK-CZajh7xYyyf0QkcojTteTdu6tX4ELk,9309
88
+ a_sync/a_sync/modifiers/manager.cpython-312-darwin.so,sha256=wxWkoK51lQFt58fvcgVWuoZbR-8lt9XQRZ524i9m0Qo,170336
89
+ a_sync/a_sync/modifiers/manager.c,sha256=FCYzM8z51tk-6bhkPWGMaJqKnMbbqx42yuyuFDoYdgQ,643550
90
+ a_sync/a_sync/modifiers/limiter.py,sha256=WjO32P4vZLvyJnwpm2qFgqwRmCM7eEHxcdXzilzLlps,4303
91
+ a_sync/a_sync/modifiers/cache/memory.py,sha256=vON9K6K3nMkGphfUHCTrtURJUXZ3IE9B757wa-H1oFk,5335
92
+ a_sync/a_sync/modifiers/cache/__init__.py,sha256=SJlZ1EyyzBkYlWMU4XbiAlW9SCqCQbOAmDgVAP7CDN0,5532
93
+ a_sync/utils/repr.pyx,sha256=xdsVdK75Zi5pAoh-8qRG0q7F0ySAq1zDkksZw37FoL4,2632
94
+ a_sync/utils/__init__.py,sha256=Y6R-IcD5ROzp2Zs3ZMv3bapkcfOpJHlBeD838bntd-Q,3213
95
+ a_sync/utils/repr.cpython-312-darwin.so,sha256=zNbceB3wSb3Jm9MRRlDDne7ky_Tm04IWtSKoliK7dRY,145688
96
+ a_sync/utils/iterators.py,sha256=GkT2fgMVKDorT-BKPPOPOIDj5Zt4yl-5vAmpn4H5wGA,11055
97
+ a_sync/utils/repr.pyi,sha256=PWdsa6sF9_3nBqEgLaxtaHty7o7gwL--jPqvcelHY10,131
98
+ a_sync/utils/repr.c,sha256=4HDcDzNN4_R5Z_QrhMy9kxWXK7iALDKpa--_D0k6_-Y,571751
99
+ a_sync/primitives/queue.py,sha256=k1ldYX7ni-W5vdVXRFrupyVD1JV5P6CYMqfndzPWwV8,33113
100
+ a_sync/primitives/_loggable.pyi,sha256=MxE1kINwYiXBFq6tPSWppWs4hToR-6vfBZwIhGJ11z8,1934
101
+ a_sync/primitives/_debug.pyi,sha256=mcGGn_C9ICgn2mcP-cER1ps-q1pdei-2niu-fEQnFXQ,2175
102
+ a_sync/primitives/__init__.pxd,sha256=FIO-eD4HaJ259mz3XB6HE1YF4tDej6ojrxQ_kx-tMwM,38
103
+ a_sync/primitives/_debug.pxd,sha256=EaMH5xgQHs7hwnWFUocHEl9pAmUZs9J1aRVtb62zvw0,464
104
+ a_sync/primitives/_loggable.cpython-312-darwin.so,sha256=JCd7_Cwm54oAoA_kX7IFodntxXHbIsOsZHloc2zbCak,104112
105
+ a_sync/primitives/_debug.c,sha256=i2c5IcDvCJXiiPUw7BOOrE37_0TxU7TAA4MqbGtJwEc,600616
106
+ a_sync/primitives/__init__.py,sha256=U5r-Do_TKR1FbfLEHuckiYs87QkN4HsYNZfunRhX52c,1642
107
+ a_sync/primitives/_loggable.pxd,sha256=1YRkqc20KcPoTukbWXn7qpbZ8zA16X1h_84vadCqSPc,133
108
+ a_sync/primitives/_debug.cpython-312-darwin.so,sha256=iMwphA1tgJQOOH2aMSyfbetRb0-AqnH6trzDxRwr96s,149536
109
+ a_sync/primitives/_loggable.pyx,sha256=jxKSBCs4VlXuYC7LsxbUJw0FJInjBKOkEdBSoqCndxY,3003
110
+ a_sync/primitives/_debug.pyx,sha256=NH2hr-yQLz1pKnmleIpIeDVTy75KSguQpUiuoza_ahc,7849
111
+ a_sync/primitives/_loggable.c,sha256=Us1P0zNcyclaIoWNOwRQp92ejJTqgX0aHyIdBBVb2DI,419940
112
+ a_sync/primitives/locks/prio_semaphore.pyi,sha256=w3xGj3-kdFEjw4k8vzt4TiWsG8j5KC6erXBNNrEhaL0,7644
113
+ a_sync/primitives/locks/event.pyx,sha256=oLbALE5DMKtYDn1XEqvMB_vffUoM3tjn1qXbkgGhY5k,5953
114
+ a_sync/primitives/locks/semaphore.pyx,sha256=EZcbrVvgc4XrLqJeP0K62L1_OxmSxYfazA_T6_t65FQ,14836
115
+ a_sync/primitives/locks/prio_semaphore.c,sha256=WjkhyZ0o1fX4IJ83lJgVfifcpF9nPvBYF8pRoaQx9oE,1108766
116
+ a_sync/primitives/locks/__init__.pxd,sha256=DuPhDRldnCwqBUxgo9V5K0GmA8BWLf5fC266ujDQ9pc,302
117
+ a_sync/primitives/locks/prio_semaphore.pxd,sha256=HaZNcPioDb_USZJseyI0OHEBYo8X1COM17WTuc5GQ5E,889
118
+ a_sync/primitives/locks/counter.pyx,sha256=H_3LN50-zDvBSgHoKXXOMlUKs78aZSFDhu8gQrhWV5Y,9055
119
+ a_sync/primitives/locks/__init__.py,sha256=XPiWbxxPyaCC-NnfNm42up2qf61LdqFgzGkq082DL1Q,436
120
+ a_sync/primitives/locks/counter.cpython-312-darwin.so,sha256=A_egWYiJTrq5V18sZhFRi3YsCbGgiWgR8dvFCrPzyLU,170512
121
+ a_sync/primitives/locks/prio_semaphore.cpython-312-darwin.so,sha256=vRMGpTajmADAwF72PilqjEMVnFjOXLCtfvCF4eRMRiU,255000
122
+ a_sync/primitives/locks/counter.pxd,sha256=_HoPXPMTRY3Gw3GPUB2jAx7lUpjJ4QyO75YiR_BehAQ,409
123
+ a_sync/primitives/locks/semaphore.c,sha256=WHja99K-tsUeqhjx2AIEGEHxTyeGnDTER3__dnRxI9Q,1135760
124
+ a_sync/primitives/locks/event.c,sha256=Ps1XlK9raKRKsEl0UbuL3ae6TwYwG3sDZ3fsSd4qlXw,656012
125
+ a_sync/primitives/locks/event.pyi,sha256=cWK5LPzpbERpaXjYh5LqDcDuJDIexJjhP606mYMbKBw,1456
126
+ a_sync/primitives/locks/prio_semaphore.pyx,sha256=cyGGObKgzzVXh3ucRvL30mziJRYWtnS0ly373rkY4h4,20494
127
+ a_sync/primitives/locks/semaphore.pyi,sha256=ynHIA0k9HMzbsTfhMAwCEfpZSECVhXxhcNAwwQmsSlI,5975
128
+ a_sync/primitives/locks/counter.c,sha256=MiG2k0PhWJHpC5NBh87GJbLBYOjOhzuf9uGXb86nPjc,713260
129
+ a_sync/primitives/locks/semaphore.pxd,sha256=zy-PgktLUsFaXxvrSbB3m6gxisgzchCpKrcX8Zzwq_I,585
130
+ a_sync/primitives/locks/event.pxd,sha256=Wk1wLD8P6Nml1mzrRM6H34bD06LZWovjEYKnRhGcXE4,696
131
+ a_sync/primitives/locks/counter.pyi,sha256=d83iZwFj5mK9fIohh7n1uRdRiGAnfi2FNMZSyKtli9A,5077
132
+ a_sync/primitives/locks/event.cpython-312-darwin.so,sha256=a84EHWRLKrORUawtGFHXMNx7jccUuzL-QtSU2JHCR_w,167720
133
+ a_sync/primitives/locks/semaphore.cpython-312-darwin.so,sha256=UjoSkzy_x-_9N8j3zR98OeInP0YzltoXi1KSxrdf1h8,257776
134
+ a_sync/sphinx/__init__.py,sha256=UvdsakVmkn0Lw4vEd3jA3_Acymde95-78o87lel8ikk,49
135
+ a_sync/sphinx/ext.py,sha256=E93N5AmGcfGksN1J3oUsvewJZVZ3dNYcr0mwKJQ3ALk,8917
136
+ a_sync/async_property/proxy.c,sha256=nMXGrx7jZNuTdlhfQC4DmWWTZgDe6DRlednm07ozysA,1514493
137
+ a_sync/async_property/proxy.pyi,sha256=4GCwklkt5bjp2ADP6SQtVOkL6E9xiyBAf_twX5Cvatg,4218
138
+ a_sync/async_property/cached.pyi,sha256=kL7Cvn7z26R7JROFDQ22GaWll-TvOL79Q-OeQ2oaqbo,1814
139
+ a_sync/async_property/cached.c,sha256=70ERIMLrNtYymVNVB_dThQUQFH7a7LwUzeDM8oE8znc,858352
140
+ a_sync/async_property/__init__.pxd,sha256=EGawuQLZIz7ZZLOFmaOQAFUVvabadR0aPYBW7U4TaCo,74
141
+ a_sync/async_property/cached.pxd,sha256=u4XHDFvvaRv7y65VyDI8gVmYzlGD-kFlN1H2lc48EqU,339
142
+ a_sync/async_property/cached.cpython-312-darwin.so,sha256=dFPmGwcWPXWz5kbuL9KHduMBIBqPCtSv95I1MfeylQo,206224
143
+ a_sync/async_property/proxy.pxd,sha256=fyc5IGOcwNzBP6XsG3vYKjbLP6dOfSVCtGb1EEWDxVU,47
144
+ a_sync/async_property/__init__.py,sha256=L0JYdB7p3RLDRVNExPKl9MtcHaPLIqo5lnpGmHVUI9E,63
145
+ a_sync/async_property/proxy.pyx,sha256=0_qGYnr6ZyBtQQGIRI2cMB_o0Bz7RZxJKwuVQGFTgTI,13295
146
+ a_sync/async_property/proxy.cpython-312-darwin.so,sha256=VLBy9b_b9HqeVdmKIb9UZlm0kVuvqDJIR5d1Q4uHIUs,350392
147
+ a_sync/async_property/cached.pyx,sha256=4UoHk6yACkpwKjD_DBHLMb2JIAAhKVmhDGU7WZYg-Cc,6314
148
+ a_sync/asyncio/sleep.pyx,sha256=kjNeRimAfMZB6vJs7t-SbtMgnRqhybO3cZ7uijkosJs,1273
149
+ a_sync/asyncio/as_completed.pxd,sha256=mISE2jdb2jOS0q3TKg0F_k-Zf-d3hzdBNKU1PT-Tn40,162
150
+ a_sync/asyncio/igather.c,sha256=X7Pcp1euFrTaUY3fkHHfaYmYexKIPapI9I_NmFYpMG8,485487
151
+ a_sync/asyncio/create_task.pyx,sha256=rsPzNlNXOiKX7KoQUO8IUPQdk6uTkSneW43tk0FdiMA,8387
152
+ a_sync/asyncio/create_task.c,sha256=e329MwOaq5DCFMB2HB7uoSXfdc4wQSm_Qm5akrXD0FI,600665
153
+ a_sync/asyncio/as_completed.cpython-312-darwin.so,sha256=Jtr-VtCL1c5UeNoiZidu2s6YQLR_v6zc8Yref80xTPI,187952
154
+ a_sync/asyncio/igather.pxd,sha256=M9hMUtgp6118pa0ddR9daQubvnceefnbt4pbvEl0doE,71
155
+ a_sync/asyncio/igather.pyi,sha256=ms6FY78h_8D3aiuPsPo0h3AheTzLGy-73ja-s2gmW_A,201
156
+ a_sync/asyncio/create_task.cpython-312-darwin.so,sha256=OPMGGwmTQjuIxD_mU_zm5YyClnw3gO_uMVLxx0zWdK0,165376
157
+ a_sync/asyncio/gather.pyi,sha256=7P_GapnZAz4z3xDZeg4wKpM1zD-6nVd15tRzG6b_jKk,4515
158
+ a_sync/asyncio/__init__.pxd,sha256=Hsy-wTlG1iLWv4mNIRQ9g2rs_8w5ooVIgFFe6VnL7nc,336
159
+ a_sync/asyncio/sleep.cpython-312-darwin.so,sha256=vUQRstEqkWO6EbLmehRT9lhQXemCX6GKpfWFA-Ec-rw,84088
160
+ a_sync/asyncio/__init__.py,sha256=Z-_qJgdLFqIacrKRABlk64c1aroLUmgKAqXTeE_GQfU,6333
161
+ a_sync/asyncio/as_completed.pyi,sha256=-VdtfMlX0XdkqJbJm8C0gEAi_BfRbkz3Xkdver6vHs4,3753
162
+ a_sync/asyncio/sleep.pyi,sha256=ab8OtiZm4Py0-sVQA2pzGVZiHUoTItkJG_Nd02xduuE,537
163
+ a_sync/asyncio/sleep.c,sha256=vrlY1_8dMSyk1ggO6tk5Td43gujjXiJAt2FFUgMMpoU,342937
164
+ a_sync/asyncio/as_completed.c,sha256=jbM1c_UmHWd_oXnWAYNDDNz1kKCRw0Ev8vBOzxri52A,735119
165
+ a_sync/asyncio/gather.cpython-312-darwin.so,sha256=DcEAaL7MZS6PwGSo73nOkfUeIfixvxFwZm1gQdaRtGE,167312
166
+ a_sync/asyncio/create_task.pyi,sha256=5H2z4k_2dGG2QTGjGEgP1N6ITuClYYWzkPbzaeQwKks,1864
167
+ a_sync/asyncio/igather.pyx,sha256=TctS1kLzaYztLrZJmLwIOOvJTthKiEwsy-AaW1ObnKg,6325
168
+ a_sync/asyncio/gather.pyx,sha256=4ALHvhJPQsNtw7b9dsbhwmKpXEbiRzOCjMqagi3sTXs,8566
169
+ a_sync/asyncio/igather.cpython-312-darwin.so,sha256=CyvdyLAYivC1G_eXaAun4Y0qurqA1FA4jMmXgawHsnk,120768
170
+ a_sync/asyncio/gather.c,sha256=MLhPvLSGGCpxgMNtiA8Xcx3nniDOLzMSVYnFbSFWukE,637555
171
+ a_sync/asyncio/create_task.pxd,sha256=x-sZVX-26NoqxYb5mH33uh2Mg-3AqqdYGXx4Ai7xZwU,143
172
+ a_sync/asyncio/as_completed.pyx,sha256=ar0gJ3iN6-4Jw8xy6i7KVJ54RnAGt1JWE85Wh6kPF48,9052
173
+ ez_a_sync-0.32.9.dist-info/RECORD,,
174
+ ez_a_sync-0.32.9.dist-info/WHEEL,sha256=7z6R-Qb3oX6AbIyac4zsWRt7MdK_oveZJob0CtHumU8,136
175
+ ez_a_sync-0.32.9.dist-info/top_level.txt,sha256=ew2xVyFeZE_a5XMEL64h7-vJIbaBQieaFcvBAWUpU_s,7
176
+ ez_a_sync-0.32.9.dist-info/METADATA,sha256=iGA7bzuEU4o_shcW8Axw3N-preqlnFs1DdbgiXfTuQo,13196
177
+ ez_a_sync-0.32.9.dist-info/licenses/LICENSE.txt,sha256=1on6-17OUMlja6vSPTcmlmeT_DwujCZJijYxaplBvZk,1075
@@ -0,0 +1,6 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.2.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp312-cp312-macosx_11_0_arm64
5
+ Generator: delocate 0.13.0
6
+
@@ -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