# aioplus
[![PyPI Version][shields/pypi/version]][pypi/homepage]
[![PyPI Downloads][shields/pypi/downloads]][pypi/homepage]
[![License][shields/pypi/license]][github/license]
[![Python Version][shields/python/version]][pypi/homepage]
[![Documentation][shields/readthedocs]][docs/aioplus]
## Key Features
* As easy as built-ins - but asynchronous;
* Early returns never cause unawaited coroutine warnings;
* Nearly the same API as the Python 3.13 standard blocking API.
## Getting Started
### Installation
The library is available as [`aioplus`][pypi/homepage] on PyPI:
```shell
pip install aioplus
```
### Usage
#### *aall*
For more, see the [documentation][docs/aioplus/aall].
```python
import asyncio
from aioplus import aall, arange
async def main() -> None:
"""Run the program."""
aiterable = (num > 0 async for num in arange(2304))
flg = await aall(aiterable)
if __name__ == "__main__":
asyncio.run(main())
```
#### *aany*
For more, see the [documentation][docs/aioplus/aany].
```python
import asyncio
from aioplus import aany, arange
async def main() -> None:
"""Run the program."""
aiterable = (num % 2 == 0 async for num in arange(2304))
flg = await aany(aiterable)
if __name__ == "__main__":
asyncio.run(main())
```
#### *abatched*
For more, see the [documentation][docs/aioplus/abatched].
```python
import asyncio
from aioplus import abatched, arange
async def main() -> None:
"""Run the program."""
async for batch in abatched(arange(23), n=4):
print(batch)
if __name__ == "__main__":
asyncio.run(main())
```
#### *acount*
For more, see the [documentation][docs/aioplus/acount].
```python
import asyncio
from aioplus import acount
async def main() -> None:
"""Run the program."""
async for num in acount(start=23, step=4):
print(num)
if __name__ == "__main__":
asyncio.run(main())
```
#### *aenumerate*
For more, see the [documentation][docs/aioplus/aenumerate].
```python
import asyncio
from aioplus import aenumerate, arange
async def main() -> None:
"""Run the program."""
async for index, num in aenumerate(arange(2304)):
print(index, num)
if __name__ == "__main__":
asyncio.run(main())
```
#### *aislice*
For more, see the [documentation][docs/aioplus/aislice].
```python
import asyncio
from aioplus import aislice, arange
async def main() -> None:
"""Run the program."""
async for num in aislice(arange(23), 4):
print(num)
if __name__ == "__main__":
asyncio.run(main())
```
#### *alen*
For more, see the [documentation][docs/aioplus/alen].
```python
import asyncio
from aioplus import alen, arange
async def main() -> None:
"""Run the program."""
aiterable = arange(2304)
length = await alen(aiterable)
print(f"len(aiterable) == {length}")
if __name__ == "__main__":
asyncio.run(main())
```
#### *arange*
For more, see the [documentation][docs/aioplus/arange].
```python
import asyncio
from aioplus import arange
async def main() -> None:
"""Run the program."""
async for num in arange(2304):
print(num)
if __name__ == "__main__":
asyncio.run(main())
```
#### *arepeat*
For more, see the [documentation][docs/aioplus/arepeat].
```python
import asyncio
from aioplus import arepeat
async def main() -> None:
"""Run the program."""
async for num in arepeat(23, times=4):
print(num)
if __name__ == "__main__":
asyncio.run(main())
```
#### *areversed*
For more, see the [documentation][docs/aioplus/areversed].
```python
import asyncio
from aioplus import arange, areversed
async def main() -> None:
"""Run the program."""
async for num in areversed(arange(2304)):
print(num)
if __name__ == "__main__":
asyncio.run(main())
```
#### *awaitify*
For more, see the [documentation][docs/aioplus/awaitify].
```python
import asyncio
from aioplus import awaitify
def func(num: int) -> None:
"""Print the number."""
print(f"Num: {num}")
async def main() -> None:
"""Run the program."""
afunc = awaitify(func)
await afunc(num=2304)
if __name__ == "__main__":
asyncio.run(main())
```
## License
MIT License, Copyright (c) 2025 Sergei Y. Bogdanov. See [LICENSE][github/license] file.
<!-- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -->
[docs/aioplus]: https://aioplus.readthedocs.io/
[docs/aioplus/aall]: https://aioplus.readthedocs.io/en/latest/aall.html
[docs/aioplus/aany]: https://aioplus.readthedocs.io/en/latest/aany.html
[docs/aioplus/abatched]: https://aioplus.readthedocs.io/en/latest/abatched.html
[docs/aioplus/acount]: https://aioplus.readthedocs.io/en/latest/acount.html
[docs/aioplus/aenumerate]: https://aioplus.readthedocs.io/en/latest/aenumerate.html
[docs/aioplus/aislice]: https://aioplus.readthedocs.io/en/latest/aislice.html
[docs/aioplus/alen]: https://aioplus.readthedocs.io/en/latest/alen.html
[docs/aioplus/arange]: https://aioplus.readthedocs.io/en/latest/arange.html
[docs/aioplus/areversed]: https://aioplus.readthedocs.io/en/latest/areversed.html
[docs/aioplus/awaitify]: https://aioplus.readthedocs.io/en/latest/awaitify.html
[github/license]: https://github.com/syubogdanov/aioplus/tree/main/LICENSE
[pypi/homepage]: https://pypi.org/project/aioplus/
[shields/pypi/downloads]: https://img.shields.io/pypi/dm/aioplus.svg?color=green
[shields/pypi/license]: https://img.shields.io/pypi/l/aioplus.svg?color=green
[shields/pypi/version]: https://img.shields.io/pypi/v/aioplus.svg?color=green
[shields/python/version]: https://img.shields.io/pypi/pyversions/aioplus.svg?color=green
[shields/readthedocs]: https://img.shields.io/readthedocs/aioplus?style=flat&color=green
Raw data
{
"_id": null,
"home_page": "https://github.com/syubogdanov/aioplus",
"name": "aioplus",
"maintainer": "Sergei Y. Bogdanov",
"docs_url": null,
"requires_python": "<3.14,>=3.11",
"maintainer_email": "syubogdanov@outlook.com",
"keywords": "async, asyncio, builtins, concurrency, itertools, python, stdlib",
"author": "Sergei Y. Bogdanov",
"author_email": "syubogdanov@outlook.com",
"download_url": "https://files.pythonhosted.org/packages/65/05/2057bb7cd21b1f590a15ce67f6bd7ea7849c6a11a1a5c353143a711cea99/aioplus-0.0.0.tar.gz",
"platform": null,
"description": "# aioplus\n\n[![PyPI Version][shields/pypi/version]][pypi/homepage]\n[![PyPI Downloads][shields/pypi/downloads]][pypi/homepage]\n[![License][shields/pypi/license]][github/license]\n[![Python Version][shields/python/version]][pypi/homepage]\n[![Documentation][shields/readthedocs]][docs/aioplus]\n\n## Key Features\n\n* As easy as built-ins - but asynchronous;\n* Early returns never cause unawaited coroutine warnings;\n* Nearly the same API as the Python 3.13 standard blocking API.\n\n## Getting Started\n\n### Installation\n\nThe library is available as [`aioplus`][pypi/homepage] on PyPI:\n\n```shell\npip install aioplus\n```\n\n### Usage\n\n#### *aall*\n\nFor more, see the [documentation][docs/aioplus/aall].\n\n```python\nimport asyncio\n\nfrom aioplus import aall, arange\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n aiterable = (num > 0 async for num in arange(2304))\n flg = await aall(aiterable)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *aany*\n\nFor more, see the [documentation][docs/aioplus/aany].\n\n```python\nimport asyncio\n\nfrom aioplus import aany, arange\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n aiterable = (num % 2 == 0 async for num in arange(2304))\n flg = await aany(aiterable)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *abatched*\n\nFor more, see the [documentation][docs/aioplus/abatched].\n\n```python\nimport asyncio\n\nfrom aioplus import abatched, arange\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n async for batch in abatched(arange(23), n=4):\n print(batch)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *acount*\n\nFor more, see the [documentation][docs/aioplus/acount].\n\n```python\nimport asyncio\n\nfrom aioplus import acount\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n async for num in acount(start=23, step=4):\n print(num)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *aenumerate*\n\nFor more, see the [documentation][docs/aioplus/aenumerate].\n\n```python\nimport asyncio\n\nfrom aioplus import aenumerate, arange\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n async for index, num in aenumerate(arange(2304)):\n print(index, num)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *aislice*\n\nFor more, see the [documentation][docs/aioplus/aislice].\n\n```python\nimport asyncio\n\nfrom aioplus import aislice, arange\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n async for num in aislice(arange(23), 4):\n print(num)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *alen*\n\nFor more, see the [documentation][docs/aioplus/alen].\n\n```python\nimport asyncio\n\nfrom aioplus import alen, arange\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n aiterable = arange(2304)\n length = await alen(aiterable)\n print(f\"len(aiterable) == {length}\")\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *arange*\n\nFor more, see the [documentation][docs/aioplus/arange].\n\n```python\nimport asyncio\n\nfrom aioplus import arange\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n async for num in arange(2304):\n print(num)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *arepeat*\n\nFor more, see the [documentation][docs/aioplus/arepeat].\n\n```python\nimport asyncio\n\nfrom aioplus import arepeat\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n async for num in arepeat(23, times=4):\n print(num)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *areversed*\n\nFor more, see the [documentation][docs/aioplus/areversed].\n\n```python\nimport asyncio\n\nfrom aioplus import arange, areversed\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n async for num in areversed(arange(2304)):\n print(num)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n#### *awaitify*\n\nFor more, see the [documentation][docs/aioplus/awaitify].\n\n```python\nimport asyncio\n\nfrom aioplus import awaitify\n\ndef func(num: int) -> None:\n \"\"\"Print the number.\"\"\"\n print(f\"Num: {num}\")\n\nasync def main() -> None:\n \"\"\"Run the program.\"\"\"\n afunc = awaitify(func)\n await afunc(num=2304)\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n## License\n\nMIT License, Copyright (c) 2025 Sergei Y. Bogdanov. See [LICENSE][github/license] file.\n\n<!-- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -->\n\n[docs/aioplus]: https://aioplus.readthedocs.io/\n[docs/aioplus/aall]: https://aioplus.readthedocs.io/en/latest/aall.html\n[docs/aioplus/aany]: https://aioplus.readthedocs.io/en/latest/aany.html\n[docs/aioplus/abatched]: https://aioplus.readthedocs.io/en/latest/abatched.html\n[docs/aioplus/acount]: https://aioplus.readthedocs.io/en/latest/acount.html\n[docs/aioplus/aenumerate]: https://aioplus.readthedocs.io/en/latest/aenumerate.html\n[docs/aioplus/aislice]: https://aioplus.readthedocs.io/en/latest/aislice.html\n[docs/aioplus/alen]: https://aioplus.readthedocs.io/en/latest/alen.html\n[docs/aioplus/arange]: https://aioplus.readthedocs.io/en/latest/arange.html\n[docs/aioplus/areversed]: https://aioplus.readthedocs.io/en/latest/areversed.html\n[docs/aioplus/awaitify]: https://aioplus.readthedocs.io/en/latest/awaitify.html\n\n[github/license]: https://github.com/syubogdanov/aioplus/tree/main/LICENSE\n\n[pypi/homepage]: https://pypi.org/project/aioplus/\n\n[shields/pypi/downloads]: https://img.shields.io/pypi/dm/aioplus.svg?color=green\n[shields/pypi/license]: https://img.shields.io/pypi/l/aioplus.svg?color=green\n[shields/pypi/version]: https://img.shields.io/pypi/v/aioplus.svg?color=green\n[shields/python/version]: https://img.shields.io/pypi/pyversions/aioplus.svg?color=green\n[shields/readthedocs]: https://img.shields.io/readthedocs/aioplus?style=flat&color=green\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Because asyncio.gather() is not enough!",
"version": "0.0.0",
"project_urls": {
"Documentation": "https://aioplus.readthedocs.io",
"Homepage": "https://github.com/syubogdanov/aioplus",
"Repository": "https://github.com/syubogdanov/aioplus"
},
"split_keywords": [
"async",
" asyncio",
" builtins",
" concurrency",
" itertools",
" python",
" stdlib"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d92321e4acc2ea3c0bbddc2d76961d6def82e09b997de7546f2754c5aeadb05c",
"md5": "d76828fd0b32a15027bfdc89c0749926",
"sha256": "f01e010733a2dfc2ebfae32e6455f78ae3b30566245949a154aded1753c8d991"
},
"downloads": -1,
"filename": "aioplus-0.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d76828fd0b32a15027bfdc89c0749926",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.14,>=3.11",
"size": 15954,
"upload_time": "2025-07-27T13:35:32",
"upload_time_iso_8601": "2025-07-27T13:35:32.943913Z",
"url": "https://files.pythonhosted.org/packages/d9/23/21e4acc2ea3c0bbddc2d76961d6def82e09b997de7546f2754c5aeadb05c/aioplus-0.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "65052057bb7cd21b1f590a15ce67f6bd7ea7849c6a11a1a5c353143a711cea99",
"md5": "3b6921bbc077ef5bc0215c533bb9234b",
"sha256": "1c5a1794a692ae7bab02b934877ecd52659679bc67f1f2fbedabf22afe22a79b"
},
"downloads": -1,
"filename": "aioplus-0.0.0.tar.gz",
"has_sig": false,
"md5_digest": "3b6921bbc077ef5bc0215c533bb9234b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.14,>=3.11",
"size": 8458,
"upload_time": "2025-07-27T13:35:34",
"upload_time_iso_8601": "2025-07-27T13:35:34.073321Z",
"url": "https://files.pythonhosted.org/packages/65/05/2057bb7cd21b1f590a15ce67f6bd7ea7849c6a11a1a5c353143a711cea99/aioplus-0.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-27 13:35:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "syubogdanov",
"github_project": "aioplus",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "aioplus"
}