ez-a-sync 0.24.21__tar.gz → 0.24.22__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ez-a-sync might be problematic. Click here for more details.

Files changed (170) hide show
  1. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/PKG-INFO +1 -1
  2. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/ENVIRONMENT_VARIABLES.py +1 -3
  3. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/_smart.py +1 -3
  4. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_descriptor.py +17 -17
  5. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_meta.py +4 -13
  6. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/config.py +2 -6
  7. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/function.pyi +5 -15
  8. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.pyi +4 -12
  9. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/cache/__init__.py +1 -3
  10. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/cache/memory.py +3 -9
  11. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/limiter.py +1 -3
  12. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/property.c +136 -185
  13. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/property.pyi +8 -24
  14. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/property.pyx +0 -1
  15. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/executor.py +4 -14
  16. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/future.py +88 -256
  17. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/iter.pyi +2 -8
  18. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.pyi +3 -9
  19. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/queue.py +6 -18
  20. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/sphinx/ext.py +8 -18
  21. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/task.py +19 -49
  22. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/utils/iterators.py +1 -3
  23. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/PKG-INFO +1 -1
  24. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/SOURCES.txt +1 -1
  25. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_base.py +4 -12
  26. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_cache.py +4 -12
  27. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/asyncio/test_as_completed.py +10 -31
  28. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/fixtures.py +9 -27
  29. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_queue.py +1 -3
  30. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/task/test_task.py +4 -12
  31. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/task/test_task_mapping_views.py +2 -6
  32. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_iter.py +2 -6
  33. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.coverage +0 -0
  34. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/black.yaml +0 -0
  35. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/codeql.yaml +0 -0
  36. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/docs.yaml +0 -0
  37. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/mypy.yaml +0 -0
  38. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/pytest.yaml +0 -0
  39. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/release.yaml +0 -0
  40. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.gitignore +0 -0
  41. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.sourcery.yaml +0 -0
  42. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/LICENSE.txt +0 -0
  43. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/MANIFEST.in +0 -0
  44. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/Makefile +0 -0
  45. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/README.md +0 -0
  46. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/TODO +0 -0
  47. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/__init__.pxd +0 -0
  48. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/__init__.py +0 -0
  49. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/_typing.py +0 -0
  50. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/__init__.py +0 -0
  51. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_flags.c +0 -0
  52. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_flags.pxd +0 -0
  53. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_flags.pyx +0 -0
  54. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.c +0 -0
  55. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.pxd +0 -0
  56. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.pyi +0 -0
  57. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.pyx +0 -0
  58. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_kwargs.c +0 -0
  59. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_kwargs.pxd +0 -0
  60. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_kwargs.pyx +0 -0
  61. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/abstract.c +0 -0
  62. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/abstract.pyi +0 -0
  63. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/abstract.pyx +0 -0
  64. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/base.c +0 -0
  65. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/base.pyi +0 -0
  66. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/base.pyx +0 -0
  67. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/decorator.py +0 -0
  68. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/flags.py +0 -0
  69. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/function.c +0 -0
  70. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/function.pyx +0 -0
  71. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.c +0 -0
  72. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.pxd +0 -0
  73. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.pyx +0 -0
  74. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/__init__.py +0 -0
  75. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/manager.c +0 -0
  76. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/manager.pyi +0 -0
  77. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/manager.pyx +0 -0
  78. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/semaphores.py +0 -0
  79. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/singleton.py +0 -0
  80. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/aliases.py +0 -0
  81. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/__init__.py +0 -0
  82. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.c +0 -0
  83. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.pxd +0 -0
  84. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.pyi +0 -0
  85. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.pyx +0 -0
  86. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.c +0 -0
  87. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.pxd +0 -0
  88. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.pyi +0 -0
  89. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.pyx +0 -0
  90. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/gather.c +0 -0
  91. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/gather.pyi +0 -0
  92. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/gather.pyx +0 -0
  93. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/exceptions.py +0 -0
  94. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/iter.c +0 -0
  95. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/iter.pyx +0 -0
  96. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/__init__.pxd +0 -0
  97. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/__init__.py +0 -0
  98. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.c +0 -0
  99. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.pxd +0 -0
  100. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.pyi +0 -0
  101. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.pyx +0 -0
  102. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.c +0 -0
  103. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.pxd +0 -0
  104. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.pyi +0 -0
  105. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.pyx +0 -0
  106. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/__init__.pxd +0 -0
  107. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/__init__.py +0 -0
  108. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.c +0 -0
  109. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.pxd +0 -0
  110. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.pyi +0 -0
  111. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.pyx +0 -0
  112. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.c +0 -0
  113. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.pxd +0 -0
  114. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.pyi +0 -0
  115. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.pyx +0 -0
  116. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.c +0 -0
  117. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.pxd +0 -0
  118. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.pyx +0 -0
  119. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.c +0 -0
  120. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.pxd +0 -0
  121. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.pyi +0 -0
  122. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.pyx +0 -0
  123. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/py.typed +0 -0
  124. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/sphinx/__init__.py +0 -0
  125. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/utils/__init__.py +0 -0
  126. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/Makefile +0 -0
  127. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/alabaster.css +0 -0
  128. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/basic.css +0 -0
  129. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/custom.css +0 -0
  130. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/doctools.js +0 -0
  131. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/documentation_options.js +0 -0
  132. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/file.png +0 -0
  133. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/language_data.js +0 -0
  134. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/minus.png +0 -0
  135. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/plus.png +0 -0
  136. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/pygments.css +0 -0
  137. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/searchtools.js +0 -0
  138. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/sphinx_highlight.js +0 -0
  139. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/conf.py +0 -0
  140. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/index.rst +0 -0
  141. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/make.bat +0 -0
  142. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/dependency_links.txt +0 -0
  143. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/not-zip-safe +0 -0
  144. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/requires.txt +0 -0
  145. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/top_level.txt +0 -0
  146. /ez_a_sync-0.24.21/pyproject.yaml → /ez_a_sync-0.24.22/pyproject.toml +0 -0
  147. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/requirements-dev.txt +0 -0
  148. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/requirements.txt +0 -0
  149. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/setup.cfg +0 -0
  150. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/setup.py +0 -0
  151. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/__init__.py +0 -0
  152. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/modifiers/test_apply_semaphore.py +0 -0
  153. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_abstract.py +0 -0
  154. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_decorator.py +0 -0
  155. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_limiter.py +0 -0
  156. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_meta.py +0 -0
  157. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_modified.py +0 -0
  158. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_singleton.py +0 -0
  159. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/asyncio/test_create_task.py +0 -0
  160. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/asyncio/test_gather.py +0 -0
  161. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/conftest.py +0 -0
  162. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/executor.py +0 -0
  163. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_counter.py +0 -0
  164. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_event.py +0 -0
  165. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_prio_semaphore.py +0 -0
  166. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_semaphore.py +0 -0
  167. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_executor.py +0 -0
  168. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_future.py +0 -0
  169. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_helpers.py +0 -0
  170. {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_smart.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ez-a-sync
3
- Version: 0.24.21
3
+ Version: 0.24.22
4
4
  Summary: A library that makes it easy to define objects that can be used for both sync and async use cases.
5
5
  Home-page: https://github.com/BobTheBuidler/a-sync
6
6
  Author: BobTheBuidler
@@ -20,9 +20,7 @@ See Also:
20
20
  :func:`DEBUG_MODE` for enabling debug mode on all classes.
21
21
  """
22
22
 
23
- DEBUG_MODE = envs.create_env(
24
- "DEBUG_MODE", bool, default=bool(DEBUG_CLASS_NAME), verbose=False
25
- )
23
+ DEBUG_MODE = envs.create_env("DEBUG_MODE", bool, default=bool(DEBUG_CLASS_NAME), verbose=False)
26
24
  """bool: Enables debug mode on all classes.
27
25
 
28
26
  Set this environment variable to `True` to enable debug mode on all classes.
@@ -301,9 +301,7 @@ class SmartTask(_SmartFutureMixin[T], asyncio.Task):
301
301
  self.add_done_callback(SmartTask._self_done_cleanup_callback)
302
302
 
303
303
 
304
- def smart_task_factory(
305
- loop: asyncio.AbstractEventLoop, coro: Awaitable[T]
306
- ) -> SmartTask[T]:
304
+ def smart_task_factory(loop: asyncio.AbstractEventLoop, coro: Awaitable[T]) -> SmartTask[T]:
307
305
  """
308
306
  Task factory function that an event loop calls to create new tasks.
309
307
 
@@ -87,8 +87,8 @@ class ASyncDescriptor(_ModifiedMixin, Generic[I, P, T]):
87
87
  self.__wrapped__ = _fget
88
88
  elif asyncio.iscoroutinefunction(_fget):
89
89
  _validate_wrapped_fn(_fget)
90
- self.__wrapped__: AsyncUnboundMethod[I, P, T] = (
91
- self.modifiers.apply_async_modifiers(_fget)
90
+ self.__wrapped__: AsyncUnboundMethod[I, P, T] = self.modifiers.apply_async_modifiers(
91
+ _fget
92
92
  )
93
93
  else:
94
94
  _validate_wrapped_fn(_fget)
@@ -264,9 +264,9 @@ class ASyncDescriptor(_ModifiedMixin, Generic[I, P, T]):
264
264
  result = await instance.my_method._all([1, 2, 3])
265
265
  ```
266
266
  """
267
- return await self.map(
268
- *instances, concurrency=concurrency, name=name, **kwargs
269
- ).all(pop=True, sync=False)
267
+ return await self.map(*instances, concurrency=concurrency, name=name, **kwargs).all(
268
+ pop=True, sync=False
269
+ )
270
270
 
271
271
  async def _any(
272
272
  self,
@@ -295,9 +295,9 @@ class ASyncDescriptor(_ModifiedMixin, Generic[I, P, T]):
295
295
  result = await instance.my_method._any([-1, 0, 1])
296
296
  ```
297
297
  """
298
- return await self.map(
299
- *instances, concurrency=concurrency, name=name, **kwargs
300
- ).any(pop=True, sync=False)
298
+ return await self.map(*instances, concurrency=concurrency, name=name, **kwargs).any(
299
+ pop=True, sync=False
300
+ )
301
301
 
302
302
  async def _min(
303
303
  self,
@@ -326,9 +326,9 @@ class ASyncDescriptor(_ModifiedMixin, Generic[I, P, T]):
326
326
  result = await instance.my_method._min([3, 1, 2])
327
327
  ```
328
328
  """
329
- return await self.map(
330
- *instances, concurrency=concurrency, name=name, **kwargs
331
- ).min(pop=True, sync=False)
329
+ return await self.map(*instances, concurrency=concurrency, name=name, **kwargs).min(
330
+ pop=True, sync=False
331
+ )
332
332
 
333
333
  async def _max(
334
334
  self,
@@ -357,9 +357,9 @@ class ASyncDescriptor(_ModifiedMixin, Generic[I, P, T]):
357
357
  result = await instance.my_method._max([3, 1, 2])
358
358
  ```
359
359
  """
360
- return await self.map(
361
- *instances, concurrency=concurrency, name=name, **kwargs
362
- ).max(pop=True, sync=False)
360
+ return await self.map(*instances, concurrency=concurrency, name=name, **kwargs).max(
361
+ pop=True, sync=False
362
+ )
363
363
 
364
364
  async def _sum(
365
365
  self,
@@ -388,9 +388,9 @@ class ASyncDescriptor(_ModifiedMixin, Generic[I, P, T]):
388
388
  result = await instance.my_method._sum([1, 2, 3])
389
389
  ```
390
390
  """
391
- return await self.map(
392
- *instances, concurrency=concurrency, name=name, **kwargs
393
- ).sum(pop=True, sync=False)
391
+ return await self.map(*instances, concurrency=concurrency, name=name, **kwargs).sum(
392
+ pop=True, sync=False
393
+ )
394
394
 
395
395
  def __init_subclass__(cls) -> None:
396
396
  for attr in cls.__dict__.values():
@@ -123,18 +123,14 @@ class ASyncMeta(ABCMeta):
123
123
  attr_name,
124
124
  fn_modifiers,
125
125
  )
126
- if isinstance(
127
- attr_value, (ASyncPropertyDescriptor, ASyncCachedPropertyDescriptor)
128
- ):
126
+ if isinstance(attr_value, (ASyncPropertyDescriptor, ASyncCachedPropertyDescriptor)):
129
127
  # Wrap property
130
128
  logger.debug("`%s is a property, now let's wrap it", attr_name)
131
129
  logger.debug(
132
130
  "since `%s` is a property, we will add a hidden dundermethod so you can still access it both sync and async",
133
131
  attr_name,
134
132
  )
135
- attrs[attr_value.hidden_method_name] = (
136
- attr_value.hidden_method_descriptor
137
- )
133
+ attrs[attr_value.hidden_method_name] = attr_value.hidden_method_descriptor
138
134
  logger.debug(
139
135
  "`%s.%s` is now %s",
140
136
  new_class_name,
@@ -178,9 +174,7 @@ class ASyncSingletonMeta(ASyncMeta):
178
174
  - :class:`~a_sync.a_sync._meta.ASyncMeta`
179
175
  """
180
176
 
181
- def __init__(
182
- cls, name: str, bases: Tuple[type, ...], namespace: Dict[str, Any]
183
- ) -> None:
177
+ def __init__(cls, name: str, bases: Tuple[type, ...], namespace: Dict[str, Any]) -> None:
184
178
  cls.__instances: Dict[bool, object] = {}
185
179
  """Dictionary to store singleton instances."""
186
180
  cls.__lock = threading.Lock()
@@ -203,10 +197,7 @@ def _update_logger(new_class_name: str) -> None:
203
197
  Args:
204
198
  new_class_name: The name of the new class being created.
205
199
  """
206
- if (
207
- ENVIRONMENT_VARIABLES.DEBUG_MODE
208
- or ENVIRONMENT_VARIABLES.DEBUG_CLASS_NAME == new_class_name
209
- ):
200
+ if ENVIRONMENT_VARIABLES.DEBUG_MODE or ENVIRONMENT_VARIABLES.DEBUG_CLASS_NAME == new_class_name:
210
201
  logger.addHandler(_debug_handler)
211
202
  logger.setLevel(logging.DEBUG)
212
203
  logger.info("debug mode activated")
@@ -91,9 +91,7 @@ def get_default_executor() -> Executor:
91
91
  return ProcessPoolExecutor(EXECUTOR_VALUE)
92
92
  elif EXECUTOR_TYPE.lower().startswith("t"): # t, T, thread, THREADS, etc
93
93
  return ThreadPoolExecutor(EXECUTOR_VALUE)
94
- raise ValueError(
95
- "Invalid value for A_SYNC_EXECUTOR_TYPE. Please use 'threads' or 'processes'."
96
- )
94
+ raise ValueError("Invalid value for A_SYNC_EXECUTOR_TYPE. Please use 'threads' or 'processes'.")
97
95
 
98
96
 
99
97
  default_sync_executor = get_default_executor()
@@ -154,9 +152,7 @@ RUNS_PER_MINUTE = (
154
152
  """Sets the rate limit for function execution."""
155
153
 
156
154
  SEMAPHORE = (
157
- rpm
158
- if (rpm := int(os.environ.get("A_SYNC_SEMAPHORE", 0)))
159
- else null_modifiers["semaphore"]
155
+ rpm if (rpm := int(os.environ.get("A_SYNC_SEMAPHORE", 0))) else null_modifiers["semaphore"]
160
156
  )
161
157
  """Sets the semaphore limit for function execution."""
162
158
 
@@ -135,9 +135,7 @@ class ASyncFunction(_ModifiedMixin, Generic[P, T]):
135
135
  """
136
136
 
137
137
  @overload
138
- def __call__(
139
- self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs
140
- ) -> T:
138
+ def __call__(self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs) -> T:
141
139
  """
142
140
  Calls the wrapped function synchronously.
143
141
 
@@ -417,9 +415,7 @@ class ASyncFunctionSyncDefault(ASyncFunction[P, T]):
417
415
  self, *args: P.args, sync: Literal[False], **kwargs: P.kwargs
418
416
  ) -> Coroutine[Any, Any, T]: ...
419
417
  @overload
420
- def __call__(
421
- self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs
422
- ) -> T: ...
418
+ def __call__(self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs) -> T: ...
423
419
  @overload
424
420
  def __call__(
425
421
  self, *args: P.args, asynchronous: Literal[True], **kwargs: P.kwargs
@@ -458,9 +454,7 @@ class ASyncFunctionAsyncDefault(ASyncFunction[P, T]):
458
454
  self, *args: P.args, sync: Literal[False], **kwargs: P.kwargs
459
455
  ) -> Coroutine[Any, Any, T]: ...
460
456
  @overload
461
- def __call__(
462
- self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs
463
- ) -> T: ...
457
+ def __call__(self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs) -> T: ...
464
458
  @overload
465
459
  def __call__(
466
460
  self, *args: P.args, asynchronous: Literal[True], **kwargs: P.kwargs
@@ -471,9 +465,7 @@ class ASyncFunctionAsyncDefault(ASyncFunction[P, T]):
471
465
 
472
466
  class ASyncDecoratorSyncDefault(ASyncDecorator):
473
467
  @overload
474
- def __call__(
475
- self, func: AnyFn[Concatenate[B, P], T]
476
- ) -> ASyncBoundMethodSyncDefault[P, T]:
468
+ def __call__(self, func: AnyFn[Concatenate[B, P], T]) -> ASyncBoundMethodSyncDefault[P, T]:
477
469
  """
478
470
  Decorates a bound method with synchronous default behavior.
479
471
 
@@ -519,9 +511,7 @@ class ASyncDecoratorSyncDefault(ASyncDecorator):
519
511
 
520
512
  class ASyncDecoratorAsyncDefault(ASyncDecorator):
521
513
  @overload
522
- def __call__(
523
- self, func: AnyFn[Concatenate[B, P], T]
524
- ) -> ASyncBoundMethodAsyncDefault[P, T]:
514
+ def __call__(self, func: AnyFn[Concatenate[B, P], T]) -> ASyncBoundMethodAsyncDefault[P, T]:
525
515
  """
526
516
  Decorates a bound method with asynchronous default behavior.
527
517
 
@@ -204,9 +204,7 @@ class ASyncMethodDescriptorAsyncDefault(ASyncMethodDescriptor[I, P, T]):
204
204
  self, instance: None, owner: Type[I]
205
205
  ) -> ASyncMethodDescriptorAsyncDefault[I, P, T]: ...
206
206
  @overload
207
- def __get__(
208
- self, instance: I, owner: Type[I]
209
- ) -> ASyncBoundMethodAsyncDefault[I, P, T]: ...
207
+ def __get__(self, instance: I, owner: Type[I]) -> ASyncBoundMethodAsyncDefault[I, P, T]: ...
210
208
 
211
209
  class ASyncBoundMethod(ASyncFunction[P, T], Generic[I, P, T]):
212
210
  """
@@ -275,9 +273,7 @@ class ASyncBoundMethod(ASyncFunction[P, T], Generic[I, P, T]):
275
273
  self, *args: P.args, sync: Literal[False], **kwargs: P.kwargs
276
274
  ) -> Coroutine[Any, Any, T]: ...
277
275
  @overload
278
- def __call__(
279
- self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs
280
- ) -> T: ...
276
+ def __call__(self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs) -> T: ...
281
277
  @overload
282
278
  def __call__(
283
279
  self, *args: P.args, asynchronous: Literal[True], **kwargs: P.kwargs
@@ -473,9 +469,7 @@ class ASyncBoundMethodSyncDefault(ASyncBoundMethod[I, P, T]):
473
469
  self, *args: P.args, sync: Literal[False], **kwargs: P.kwargs
474
470
  ) -> Coroutine[Any, Any, T]: ...
475
471
  @overload
476
- def __call__(
477
- self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs
478
- ) -> T: ...
472
+ def __call__(self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs) -> T: ...
479
473
  @overload
480
474
  def __call__(
481
475
  self, *args: P.args, asynchronous: Literal[True], **kwargs: P.kwargs
@@ -518,9 +512,7 @@ class ASyncBoundMethodAsyncDefault(ASyncBoundMethod[I, P, T]):
518
512
  self, *args: P.args, sync: Literal[False], **kwargs: P.kwargs
519
513
  ) -> Coroutine[Any, Any, T]: ...
520
514
  @overload
521
- def __call__(
522
- self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs
523
- ) -> T: ...
515
+ def __call__(self, *args: P.args, asynchronous: Literal[False], **kwargs: P.kwargs) -> T: ...
524
516
  @overload
525
517
  def __call__(
526
518
  self, *args: P.args, asynchronous: Literal[True], **kwargs: P.kwargs
@@ -143,9 +143,7 @@ def apply_async_cache(
143
143
  # Validate
144
144
  elif coro_fn is None:
145
145
  if ram_cache_maxsize is not None and not isinstance(ram_cache_maxsize, int):
146
- raise TypeError(
147
- "'lru_cache_maxsize' must be an integer or None.", ram_cache_maxsize
148
- )
146
+ raise TypeError("'lru_cache_maxsize' must be an integer or None.", ram_cache_maxsize)
149
147
  elif not asyncio.iscoroutinefunction(coro_fn):
150
148
  raise exceptions.FunctionNotAsync(coro_fn)
151
149
 
@@ -39,9 +39,7 @@ def apply_async_memory_cache(**kwargs: Unpack[CacheKwargs]) -> AsyncDecorator[P,
39
39
 
40
40
 
41
41
  @overload
42
- def apply_async_memory_cache(
43
- coro_fn: int, **kwargs: Unpack[CacheKwargs]
44
- ) -> AsyncDecorator[P, T]:
42
+ def apply_async_memory_cache(coro_fn: int, **kwargs: Unpack[CacheKwargs]) -> AsyncDecorator[P, T]:
45
43
  """Creates a decorator with maxsize set by an integer.
46
44
 
47
45
  This overload is used when an integer is provided as the coroutine function,
@@ -63,9 +61,7 @@ def apply_async_memory_cache(
63
61
 
64
62
 
65
63
  @overload
66
- def apply_async_memory_cache(
67
- coro_fn: CoroFn[P, T], **kwargs: Unpack[CacheKwargs]
68
- ) -> CoroFn[P, T]:
64
+ def apply_async_memory_cache(coro_fn: CoroFn[P, T], **kwargs: Unpack[CacheKwargs]) -> CoroFn[P, T]:
69
65
  """
70
66
  Applies an asynchronous LRU cache to a provided coroutine function.
71
67
 
@@ -158,9 +154,7 @@ def apply_async_memory_cache(
158
154
  # Validate
159
155
  elif coro_fn is None:
160
156
  if maxsize not in [None, -1] and (not isinstance(maxsize, int) or maxsize <= 0):
161
- raise TypeError(
162
- "'lru_cache_maxsize' must be a positive integer or None.", maxsize
163
- )
157
+ raise TypeError("'lru_cache_maxsize' must be a positive integer or None.", maxsize)
164
158
 
165
159
  elif not asyncio.iscoroutinefunction(coro_fn):
166
160
  raise exceptions.FunctionNotAsync(coro_fn)
@@ -110,9 +110,7 @@ def apply_rate_limit(
110
110
  coro_fn = None
111
111
 
112
112
  elif coro_fn is None:
113
- if runs_per_minute is not None and not isinstance(
114
- runs_per_minute, (int, AsyncLimiter)
115
- ):
113
+ if runs_per_minute is not None and not isinstance(runs_per_minute, (int, AsyncLimiter)):
116
114
  raise TypeError("'runs_per_minute' must be an integer.", runs_per_minute)
117
115
 
118
116
  elif not asyncio.iscoroutinefunction(coro_fn):