{ "info": { "author": "", "author_email": "Anton Patrushev ", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries" ], "description": "# aioflows\n![Github Actions](https://github.com/apatrushev/aioflows/workflows/Spherical%20Python%20CI/badge.svg)\n[![PyPI](https://img.shields.io/pypi/v/aioflows?logo=python&logoColor=%23cccccc)](https://pypi.org/project/aioflows)\n\n

Asynchronous actors framework

\n\n---\n\n**Documentation**: https://aioflows.github.io\n\n**Source**: https://github.com/apatrushev/aioflows\n\n---\nThis project aims to create a support library for constructing asynchronous applications in Python, using the concept of structured data flows and actors. The current phase is purely a proof-of-concept and serves as a basis for discussion with colleagues and the community. It is not intended for use in any production or personal projects.\n\n\n## Minimal working example\n```python\nimport asyncio\n\nfrom aioflows.simple import Printer, Ticker\n\n\nasync def start():\n await (Ticker() >> Printer()).start()\n\n\nasyncio.run(start())\n```\n\n## Udp echo example\n```python\nimport asyncio\n\nfrom aioflows.network import Udp\nfrom aioflows.simple import Printer, Tee\n\n\nasync def start():\n udp = Udp(local_addr=('127.0.0.1', 5353), reuse_port=True)\n await (udp >> Tee(Printer()) >> udp).start()\n\n\nasyncio.run(start())\n```\n\nYou can test it with socat:\n```bash\nsocat - UDP:localhost:5353\n```\n\n## Other examples\nMore examples can be found in [src/examples](https://github.com/apatrushev/aioflows/tree/master/src/examples).\n\n## Installation\n - local\n```bash\npip install .\n```\n\n - editable\n```bash\npip install -e .\n```\n\n - development\n```bash\npip install -e .[dev]\n```\n\n - examples dependencies\n```bash\npip install -e .[examples]\n```\n\n - all together\n```bash\npip install -e .[dev,examples]\n```\n\n - from github\n```bash\npip install git+https://github.com/apatrushev/aioflows.git\n```\n\n## Usual development steps\nRun checks and tests:\n```bash\ninv isort flake test\n```\n\nRun examples (all ERRORCODE's should be 0/OK or timeout at the moment):\n```bash\ninv examples | grep ERRORCODE\n```\n\n## Similar projects\nI found existing solutions that are almost equal to this concept:\n - https://github.com/ReactiveX/RxPY\n - https://github.com/vxgmichel/aiostream\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "aioflows", "package_url": "https://pypi.org/project/aioflows/", "platform": null, "project_url": "https://pypi.org/project/aioflows/", "project_urls": { "Source": "https://github.com/apatrushev/aioflows", "Tracker": "https://github.com/apatrushev/aioflows/issues" }, "release_url": "https://pypi.org/project/aioflows/0.2.0/", "requires_dist": [ "janus", "pydantic <2.5,>=2.4.1", "pytest-asyncio ; extra == 'dev'", "spherical-dev[dev] <0.4,>=0.3.0 ; extra == 'dev'", "aioconsole ; extra == 'examples'", "aiohttp ; extra == 'examples'", "aiomqtt ; extra == 'examples'", "requests ; extra == 'examples'", "zeroconf ; extra == 'examples'", "spherical-dev[release] <0.4,>=0.3.4 ; extra == 'release'" ], "requires_python": ">=3.8", "summary": "Python data flows library to build structured applications", "version": "0.2.0", "yanked": false, "yanked_reason": null }, "last_serial": 20276857, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "blake2b_256": "c5e5d826f08d35e79443984474a00b66f053dcb9367806f3f5647b114682136f", "md5": "e102b422b514822d7ec95d91881321df", "sha256": "c616eaf8d89db0e80f269c06b6663bf9c4f311290a6fe6942ccc47a8fa2d9875" }, "downloads": -1, "filename": "aioflows-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e102b422b514822d7ec95d91881321df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "<3.11,>=3.8", "size": 13946, "upload_time": "2023-08-22T06:33:53", "upload_time_iso_8601": "2023-08-22T06:33:53.557844Z", "url": "https://files.pythonhosted.org/packages/c5/e5/d826f08d35e79443984474a00b66f053dcb9367806f3f5647b114682136f/aioflows-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "blake2b_256": "3c10ae80ca59f460ddc6f92fd8731c006e7ea43216dda50282c0d5bde6122015", "md5": "6f0203a8358c24c05ac61fd2f26eebe9", "sha256": "83958ab17d57816c8b0530fdfe8fdfb1bbfc7bd032400b457f81b83bb0c6643f" }, "downloads": -1, "filename": "aioflows-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6f0203a8358c24c05ac61fd2f26eebe9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "<3.11,>=3.8", "size": 14384, "upload_time": "2023-08-31T19:28:56", "upload_time_iso_8601": "2023-08-31T19:28:56.199985Z", "url": "https://files.pythonhosted.org/packages/3c/10/ae80ca59f460ddc6f92fd8731c006e7ea43216dda50282c0d5bde6122015/aioflows-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "blake2b_256": "f69e190becfc0a5556c29c1a4aca6d5689586ec7f0e32ab5ad95b349117b5dff", "md5": "784e451803b2b0eecbfd10aee4ec483c", "sha256": "56dfc11199e164cec0cb3f97bae7a72c44ab7c990db07d30f5c79390cb929f4f" }, "downloads": -1, "filename": "aioflows-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "784e451803b2b0eecbfd10aee4ec483c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 15168, "upload_time": "2023-09-25T18:50:53", "upload_time_iso_8601": "2023-09-25T18:50:53.732951Z", "url": "https://files.pythonhosted.org/packages/f6/9e/190becfc0a5556c29c1a4aca6d5689586ec7f0e32ab5ad95b349117b5dff/aioflows-0.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "blake2b_256": "9ae847ffe1bb1f59fc74ccea463d7a3758fa6445bb4a4cb4f689b4d0c8c7d206", "md5": "13298c12d9aa86f043ca6328aaded1ff", "sha256": "70201e3e1e6e480b3dba72de790389d0ce2b090f9cf0ce4aecdc8e2453ad420c" }, "downloads": -1, "filename": "aioflows-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "13298c12d9aa86f043ca6328aaded1ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 15138, "upload_time": "2023-10-21T21:52:13", "upload_time_iso_8601": "2023-10-21T21:52:13.897063Z", "url": "https://files.pythonhosted.org/packages/9a/e8/47ffe1bb1f59fc74ccea463d7a3758fa6445bb4a4cb4f689b4d0c8c7d206/aioflows-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "blake2b_256": "9ae847ffe1bb1f59fc74ccea463d7a3758fa6445bb4a4cb4f689b4d0c8c7d206", "md5": "13298c12d9aa86f043ca6328aaded1ff", "sha256": "70201e3e1e6e480b3dba72de790389d0ce2b090f9cf0ce4aecdc8e2453ad420c" }, "downloads": -1, "filename": "aioflows-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "13298c12d9aa86f043ca6328aaded1ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 15138, "upload_time": "2023-10-21T21:52:13", "upload_time_iso_8601": "2023-10-21T21:52:13.897063Z", "url": "https://files.pythonhosted.org/packages/9a/e8/47ffe1bb1f59fc74ccea463d7a3758fa6445bb4a4cb4f689b4d0c8c7d206/aioflows-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }