aioplus


Nameaioplus JSON
Version 0.0.0 PyPI version JSON
download
home_pagehttps://github.com/syubogdanov/aioplus
SummaryBecause asyncio.gather() is not enough!
upload_time2025-07-27 13:35:34
maintainerSergei Y. Bogdanov
docs_urlNone
authorSergei Y. Bogdanov
requires_python<3.14,>=3.11
licenseMIT
keywords async asyncio builtins concurrency itertools python stdlib
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 1.56106s