ez-a-sync 0.30.0__tar.gz → 0.30.2__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.30.0 → ez_a_sync-0.30.2}/PKG-INFO +1 -1
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/debugging.py +25 -18
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/executor.py +3 -5
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/prio_semaphore.c +799 -532
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/prio_semaphore.pyx +49 -11
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/ez_a_sync.egg-info/PKG-INFO +1 -1
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.coverage +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.github/workflows/black.yaml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.github/workflows/codeql.yaml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.github/workflows/docs.yaml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.github/workflows/mypy.yaml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.github/workflows/pytest.yaml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.github/workflows/release.yaml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.gitignore +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/.sourcery.yaml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/LICENSE.txt +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/MANIFEST.in +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/Makefile +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/README.md +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/TODO +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/ENVIRONMENT_VARIABLES.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/__init__.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/_smart.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/_smart.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/_smart.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/_smart.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/_typing.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_descriptor.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_descriptor.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_descriptor.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_flags.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_flags.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_flags.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_helpers.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_helpers.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_helpers.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_helpers.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_kwargs.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_kwargs.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_kwargs.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/_meta.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/abstract.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/abstract.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/abstract.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/base.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/base.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/base.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/config.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/decorator.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/flags.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/flags.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/flags.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/flags.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/function.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/function.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/function.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/function.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/method.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/method.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/method.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/method.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/__init__.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/cache/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/cache/memory.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/limiter.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/manager.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/manager.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/manager.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/manager.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/modifiers/semaphores.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/property.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/property.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/property.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/a_sync/singleton.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/aliases.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/__init__.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/cached.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/cached.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/cached.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/cached.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/proxy.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/proxy.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/proxy.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/async_property/proxy.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/__init__.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/as_completed.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/as_completed.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/as_completed.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/as_completed.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/create_task.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/create_task.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/create_task.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/create_task.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/gather.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/gather.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/gather.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/igather.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/igather.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/igather.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/igather.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/sleep.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/sleep.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/asyncio/sleep.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/exceptions.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/exceptions.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/exceptions.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/functools.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/functools.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/functools.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/functools.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/future.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/iter.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/iter.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/iter.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/__init__.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_debug.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_debug.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_debug.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_debug.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_loggable.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_loggable.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_loggable.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/_loggable.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/__init__.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/counter.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/counter.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/counter.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/counter.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/event.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/event.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/event.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/event.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/prio_semaphore.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/prio_semaphore.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/semaphore.c +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/semaphore.pxd +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/semaphore.pyi +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/locks/semaphore.pyx +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/primitives/queue.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/py.typed +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/sphinx/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/sphinx/ext.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/task.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/utils/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/utils/iterators.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/a_sync/utils/repr.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/Makefile +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/alabaster.css +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/basic.css +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/custom.css +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/doctools.js +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/documentation_options.js +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/file.png +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/language_data.js +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/minus.png +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/plus.png +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/pygments.css +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/searchtools.js +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/_build/html/_static/sphinx_highlight.js +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/conf.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/index.rst +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/docs/make.bat +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/ez_a_sync.egg-info/SOURCES.txt +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/ez_a_sync.egg-info/dependency_links.txt +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/ez_a_sync.egg-info/not-zip-safe +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/ez_a_sync.egg-info/requires.txt +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/ez_a_sync.egg-info/top_level.txt +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/pyproject.toml +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/requirements-dev.txt +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/requirements.txt +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/setup.cfg +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/setup.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/__init__.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/modifiers/test_apply_semaphore.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_abstract.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_base.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_cache.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_decorator.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_limiter.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_meta.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_modified.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/a_sync/test_singleton.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/asyncio/test_as_completed.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/asyncio/test_create_task.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/asyncio/test_gather.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/conftest.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/executor.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/fixtures.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/primitives/test_counter.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/primitives/test_event.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/primitives/test_prio_semaphore.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/primitives/test_queue.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/primitives/test_semaphore.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/task/test_task.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/task/test_task_mapping_views.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/test_executor.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/test_future.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/test_helpers.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/test_iter.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/test_smart.py +0 -0
- {ez_a_sync-0.30.0 → ez_a_sync-0.30.2}/tests/utils/test_repr.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from asyncio import create_task, sleep
|
|
2
2
|
from inspect import isasyncgenfunction
|
|
3
|
-
from logging import DEBUG, getLogger
|
|
3
|
+
from logging import DEBUG, Logger, getLogger
|
|
4
4
|
from functools import wraps
|
|
5
5
|
from time import time
|
|
6
6
|
from typing import AsyncIterator, Awaitable, Callable, NoReturn, TypeVar, overload
|
|
@@ -17,46 +17,52 @@ __T = TypeVar("__T")
|
|
|
17
17
|
__B = TypeVar("__B", bound=ASyncGenericBase)
|
|
18
18
|
|
|
19
19
|
|
|
20
|
+
_FIVE_MINUTES = 300
|
|
21
|
+
|
|
20
22
|
logger = getLogger("a_sync.debugging")
|
|
21
|
-
__logger_is_enabled_for = logger.isEnabledFor
|
|
22
|
-
__logger_log = logger._log
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
@overload
|
|
26
26
|
def stuck_coro_debugger(
|
|
27
27
|
fn: Callable[Concatenate[__B, __P], AsyncIterator[__T]],
|
|
28
|
+
logger: Logger = logger,
|
|
29
|
+
interval: int = _FIVE_MINUTES,
|
|
28
30
|
) -> ASyncGeneratorFunction[__P, __T]: ...
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
@overload
|
|
32
34
|
def stuck_coro_debugger(
|
|
33
35
|
fn: Callable[Concatenate[__B, __P], Awaitable[__T]],
|
|
36
|
+
logger: Logger = logger,
|
|
37
|
+
interval: int = _FIVE_MINUTES,
|
|
34
38
|
) -> ASyncBoundMethod[__B, __P, __T]: ...
|
|
35
39
|
|
|
36
40
|
|
|
37
41
|
@overload
|
|
38
42
|
def stuck_coro_debugger(
|
|
39
|
-
fn: Callable[Concatenate[__B, __P], __T],
|
|
43
|
+
fn: Callable[Concatenate[__B, __P], __T], logger: Logger = logger, interval: int = _FIVE_MINUTES
|
|
40
44
|
) -> ASyncBoundMethod[__B, __P, __T]: ...
|
|
41
45
|
|
|
42
46
|
|
|
43
47
|
@overload
|
|
44
48
|
def stuck_coro_debugger(
|
|
45
|
-
fn: Callable[__P, AsyncIterator[__T]],
|
|
49
|
+
fn: Callable[__P, AsyncIterator[__T]], logger: Logger = logger, interval: int = _FIVE_MINUTES
|
|
46
50
|
) -> Callable[__P, AsyncIterator[__T]]: ...
|
|
47
51
|
|
|
48
52
|
|
|
49
53
|
@overload
|
|
50
|
-
def stuck_coro_debugger(
|
|
54
|
+
def stuck_coro_debugger(
|
|
55
|
+
fn: Callable[__P, Awaitable[__T]], logger: Logger = logger, interval: int = _FIVE_MINUTES
|
|
56
|
+
) -> Callable[__P, Awaitable[__T]]: ...
|
|
57
|
+
|
|
51
58
|
|
|
59
|
+
def stuck_coro_debugger(fn, logger=logger, interval=_FIVE_MINUTES):
|
|
60
|
+
__logger_is_enabled_for = logger.isEnabledFor
|
|
52
61
|
|
|
53
|
-
def stuck_coro_debugger(fn):
|
|
54
62
|
if isasyncgenfunction(fn):
|
|
55
63
|
|
|
56
64
|
@wraps(fn)
|
|
57
|
-
async def stuck_async_gen_wrap(
|
|
58
|
-
*args: __P.args, **kwargs: __P.kwargs
|
|
59
|
-
) -> AsyncIterator[__T]:
|
|
65
|
+
async def stuck_async_gen_wrap(*args: __P.args, **kwargs: __P.kwargs) -> AsyncIterator[__T]:
|
|
60
66
|
aiterator = fn(*args, **kwargs)
|
|
61
67
|
|
|
62
68
|
if not __logger_is_enabled_for(DEBUG):
|
|
@@ -65,7 +71,7 @@ def stuck_coro_debugger(fn):
|
|
|
65
71
|
return
|
|
66
72
|
|
|
67
73
|
task = create_task(
|
|
68
|
-
coro=_stuck_debug_task(fn, args, kwargs),
|
|
74
|
+
coro=_stuck_debug_task(logger, interval, fn, args, kwargs),
|
|
69
75
|
name="_stuck_debug_task",
|
|
70
76
|
)
|
|
71
77
|
try:
|
|
@@ -83,7 +89,7 @@ def stuck_coro_debugger(fn):
|
|
|
83
89
|
return await fn(*args, **kwargs)
|
|
84
90
|
|
|
85
91
|
task = create_task(
|
|
86
|
-
coro=_stuck_debug_task(fn, args, kwargs),
|
|
92
|
+
coro=_stuck_debug_task(logger, interval, fn, args, kwargs),
|
|
87
93
|
name="_stuck_debug_task",
|
|
88
94
|
)
|
|
89
95
|
try:
|
|
@@ -96,18 +102,19 @@ def stuck_coro_debugger(fn):
|
|
|
96
102
|
|
|
97
103
|
|
|
98
104
|
async def _stuck_debug_task(
|
|
99
|
-
fn: Callable[__P, __T], *args: __P.args, **kwargs: __P.kwargs
|
|
105
|
+
logger: Logger, interval: int, fn: Callable[__P, __T], *args: __P.args, **kwargs: __P.kwargs
|
|
100
106
|
) -> NoReturn:
|
|
101
107
|
# sleep early so fast-running coros can exit early
|
|
102
|
-
await sleep(
|
|
108
|
+
await sleep(interval)
|
|
103
109
|
|
|
104
|
-
start = time() -
|
|
110
|
+
start = time() - interval
|
|
105
111
|
module = fn.__module__
|
|
106
112
|
name = fn.__name__
|
|
107
113
|
formatted_args = tuple(map(str, args))
|
|
108
114
|
formatted_kwargs = dict(zip(kwargs.keys(), map(str, kwargs.values())))
|
|
115
|
+
log = logger._log
|
|
109
116
|
while True:
|
|
110
|
-
|
|
117
|
+
log(
|
|
111
118
|
DEBUG,
|
|
112
119
|
"%s.%s still executing after %sm with args %s kwargs %s",
|
|
113
120
|
(
|
|
@@ -118,7 +125,7 @@ async def _stuck_debug_task(
|
|
|
118
125
|
formatted_kwargs,
|
|
119
126
|
),
|
|
120
127
|
)
|
|
121
|
-
await sleep(
|
|
128
|
+
await sleep(interval)
|
|
122
129
|
|
|
123
130
|
|
|
124
|
-
__all__ = ["stuck_coro_debugger"]
|
|
131
|
+
__all__ = ["stuck_coro_debugger"]
|
|
@@ -155,7 +155,8 @@ class _AsyncExecutorMixin(concurrent.futures.Executor, _DebugDaemonMixin):
|
|
|
155
155
|
self.__super_submit(fn, *args, **kwargs)
|
|
156
156
|
return None
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
loop = self._get_loop()
|
|
159
|
+
fut = loop.create_future()
|
|
159
160
|
if self.sync_mode:
|
|
160
161
|
try:
|
|
161
162
|
_set_fut_result(fut, fn(*args, **kwargs))
|
|
@@ -176,7 +177,7 @@ class _AsyncExecutorMixin(concurrent.futures.Executor, _DebugDaemonMixin):
|
|
|
176
177
|
def _call_copy_future_state(cf_fut: "concurrent.futures.Future"):
|
|
177
178
|
if _fut_is_cancelled(fut):
|
|
178
179
|
return
|
|
179
|
-
|
|
180
|
+
loop.call_soon_threadsafe(
|
|
180
181
|
_copy_future_state,
|
|
181
182
|
cf_fut,
|
|
182
183
|
fut,
|
|
@@ -207,10 +208,7 @@ class _AsyncExecutorMixin(concurrent.futures.Executor, _DebugDaemonMixin):
|
|
|
207
208
|
|
|
208
209
|
def __init_mixin__(self):
|
|
209
210
|
self.sync_mode = self._max_workers == 0
|
|
210
|
-
loop = self._get_loop()
|
|
211
|
-
self._create_future = loop.create_future
|
|
212
211
|
self.__super_submit = super().submit
|
|
213
|
-
self._call_soon_threadsafe = loop.call_soon_threadsafe
|
|
214
212
|
|
|
215
213
|
async def _debug_daemon(self, fut: asyncio.Future, fn, *args, **kwargs) -> None:
|
|
216
214
|
"""
|