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.
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/PKG-INFO +1 -1
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/ENVIRONMENT_VARIABLES.py +1 -3
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/_smart.py +1 -3
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_descriptor.py +17 -17
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_meta.py +4 -13
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/config.py +2 -6
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/function.pyi +5 -15
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.pyi +4 -12
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/cache/__init__.py +1 -3
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/cache/memory.py +3 -9
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/limiter.py +1 -3
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/property.c +136 -185
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/property.pyi +8 -24
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/property.pyx +0 -1
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/executor.py +4 -14
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/future.py +88 -256
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/iter.pyi +2 -8
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.pyi +3 -9
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/queue.py +6 -18
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/sphinx/ext.py +8 -18
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/task.py +19 -49
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/utils/iterators.py +1 -3
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/PKG-INFO +1 -1
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/SOURCES.txt +1 -1
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_base.py +4 -12
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_cache.py +4 -12
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/asyncio/test_as_completed.py +10 -31
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/fixtures.py +9 -27
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_queue.py +1 -3
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/task/test_task.py +4 -12
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/task/test_task_mapping_views.py +2 -6
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_iter.py +2 -6
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.coverage +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/black.yaml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/codeql.yaml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/docs.yaml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/mypy.yaml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/pytest.yaml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.github/workflows/release.yaml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.gitignore +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/.sourcery.yaml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/LICENSE.txt +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/MANIFEST.in +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/Makefile +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/README.md +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/TODO +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/__init__.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/_typing.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_flags.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_flags.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_flags.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_helpers.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_kwargs.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_kwargs.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/_kwargs.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/abstract.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/abstract.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/abstract.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/base.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/base.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/base.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/decorator.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/flags.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/function.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/function.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/method.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/manager.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/manager.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/manager.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/modifiers/semaphores.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/a_sync/singleton.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/aliases.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/as_completed.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/create_task.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/gather.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/gather.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/asyncio/gather.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/exceptions.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/iter.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/iter.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/__init__.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_debug.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/_loggable.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/__init__.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/counter.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/event.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/prio_semaphore.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.c +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.pxd +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.pyi +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/primitives/locks/semaphore.pyx +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/py.typed +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/sphinx/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/a_sync/utils/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/Makefile +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/alabaster.css +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/basic.css +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/custom.css +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/doctools.js +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/documentation_options.js +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/file.png +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/language_data.js +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/minus.png +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/plus.png +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/pygments.css +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/searchtools.js +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/_build/html/_static/sphinx_highlight.js +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/conf.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/index.rst +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/docs/make.bat +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/dependency_links.txt +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/not-zip-safe +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/requires.txt +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/ez_a_sync.egg-info/top_level.txt +0 -0
- /ez_a_sync-0.24.21/pyproject.yaml → /ez_a_sync-0.24.22/pyproject.toml +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/requirements-dev.txt +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/requirements.txt +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/setup.cfg +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/setup.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/__init__.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/modifiers/test_apply_semaphore.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_abstract.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_decorator.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_limiter.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_meta.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_modified.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/a_sync/test_singleton.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/asyncio/test_create_task.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/asyncio/test_gather.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/conftest.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/executor.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_counter.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_event.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_prio_semaphore.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/primitives/test_semaphore.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_executor.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_future.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_helpers.py +0 -0
- {ez_a_sync-0.24.21 → ez_a_sync-0.24.22}/tests/test_smart.py +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
269
|
-
)
|
|
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
|
-
|
|
300
|
-
)
|
|
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
|
-
|
|
331
|
-
)
|
|
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
|
-
|
|
362
|
-
)
|
|
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
|
-
|
|
393
|
-
)
|
|
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):
|