{ "info": { "author": "Henrik Tudborg", "author_email": "henrik@tud.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only" ], "description": "|Build Status|\n\naiochannel - AsyncIO Channel\n============================\n\nChannel concept for asyncio.\n\n*requires* Python 3.5+\n\n`PyPI link `__\n\nInstall\n-------\n\n::\n\n pip install aiochannel\n\nUsage\n-----\n\nBasics\n~~~~~~\n\nMost of the ``Channel`` code is from ``asyncio.Queue``, and the API is\nvery similar. The key difference is that a channel is only considered\n\u201cdone\u201d when it has been both closed and drained, so calling ``.join()``\non a channel will wait for it to be both closed and drained (Unlike\n``Queue`` which will return from ``.join()`` once the queue is empty).\n\n*NOTE* Closing a channel is permanent. You cannot open it again.\n\n.. code:: py\n\n\n import asyncio\n from aiochannel import Channel\n\n # ...\n\n # A Channel takes a max queue size and an loop\n # both optional\n my_channel = Channel(100, asyncio.get_event_loop())\n\n # You add items to the channel with\n await my_channel.put(\"my item\")\n # Note that this can throw ChannelClosed if the channel\n # is closed, during the attempt at adding the item\n # to the channel. Also note that .put() will block until\n # it can successfully add the item.\n\n\n # Retrieving is done with\n my_item = await my_channel.get()\n # Note that this can also throw ChannelClosed if the\n # channel is closed before or during retrival.\n # .get() will block until an item can be retrieved.\n\n\n # You can wait for the channel to be closed and drained:\n await my_channel.join()\n # Note that this requires someone else to close and drain\n # the channel.\n\n # Lastly, you can close a channel with\n my_channel.close()\n # Every call to .put() after .close() will fail with\n # a ChannelClosed.\n # you can check if a channel is marked for closing with\n if my_channel.closed():\n print (\"Channel is closed\")\n\nLike the ``asyncio.Queue`` you can also call non-async get and put:\n\n.. code:: py\n\n \n # non-async version of put\n my_channel.put_nowait(item)\n # This either returns None,\n # or raises ChannelClosed or ChannelFull\n\n # non-async version of get\n my_channel.get_nowait()\n # This either returns the next item from the channel\n # or raises ChannelEmpty or ChannelClosed\n # (Note that ChannelClosed emplies that the channel\n # is empty, but also that is will never fill again)\n\nAs of ``0.2.0`` ``Channel`` also implements the async iterator protocol.\nYou can now use ``async for`` to iterate over the channel until it\ncloses, without having to deal with ``ChannelClosed`` exceptions.\n\n.. code:: py\n\n \n # the channel might contain data here\n async for item in channel:\n print(item)\n # the channel is closed and empty here\n\nwhich is functionally equivalent to\n\n.. code:: py\n\n\n while True:\n try:\n data = yield from channel.get()\n except ChannelClosed:\n break\n \n # process data here\n\nNoteworthy changes\n~~~~~~~~~~~~~~~~~~\n\n0.2.0\n^^^^^\n\n``Channel`` implements the async iterator protocol. You can use\n``async for`` to iterate over the channel until it closes, without\nhaving to deal with ``ChannelClosed`` exceptions.\n\nSee the ``async for`` example.\n\n.. _section-1:\n\n0.2.3\n^^^^^\n\n``Channel`` proxies it\u2019s ``__iter__`` to the underlying queue\nimplementation\u2019s ``__iter__`` (which by default is\n``collections.deque``), meaning that you are now able to iterate channel\nvalues (which also enables ``list(channel)``).\n\n.. _section-2:\n\n1.0.0\n^^^^^\n\nDropping 3.4\u2019s ``@coroutine`` annotations. Everything is now defined\nwith ``async``.\n\n.. |Build Status| image:: https://travis-ci.org/tbug/aiochannel.svg?branch=master\n :target: https://travis-ci.org/tbug/aiochannel", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/tbug/aiochannel", "keywords": "asyncio aio chan channel gochan", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "aiochannel", "package_url": "https://pypi.org/project/aiochannel/", "platform": "", "project_url": "https://pypi.org/project/aiochannel/", "project_urls": { "Homepage": "https://github.com/tbug/aiochannel" }, "release_url": "https://pypi.org/project/aiochannel/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "asyncio Channels (closable queues) inspired by golang", "version": "1.0.1" }, "last_serial": 5632729, "releases": { "0.0.1.dev0": [ { "comment_text": "", "digests": { "md5": "e81e4fdbd90bbb776c3a5105e84b0cbd", "sha256": "b45570bfa257ccd77d9c18cbc422ca3d43c3ace1f807aa86009e8cd804ef0bcd" }, "downloads": -1, "filename": "aiochannel-0.0.1.dev0.tar.gz", "has_sig": false, "md5_digest": "e81e4fdbd90bbb776c3a5105e84b0cbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4656, "upload_time": "2015-12-15T00:51:26", "url": "https://files.pythonhosted.org/packages/d1/fa/ed1c75287faea9a268800bb560fa613b6d2e668019ff2f394fd7f199bc79/aiochannel-0.0.1.dev0.tar.gz" }, { "comment_text": "", "digests": { "md5": "80bd2016ada181faa93c61e60a7d203a", "sha256": "71e781d8f074be9873b6ceae80686f80a803bda7432eed72fd61245162f69db4" }, "downloads": -1, "filename": "aiochannel-0.0.1.dev0.zip", "has_sig": false, "md5_digest": "80bd2016ada181faa93c61e60a7d203a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8438, "upload_time": "2015-12-15T00:51:32", "url": "https://files.pythonhosted.org/packages/83/ab/f99e5695274c3a522e8653f21a3c6b0a739a1b01af5f562fc2ccb499ee9d/aiochannel-0.0.1.dev0.zip" } ], "0.0.2.dev0": [ { "comment_text": "", "digests": { "md5": "9a24fb24c80978f48bdf20053a583b18", "sha256": "16bc1a1ac1b57248338d50e2a4270e940999b01ce9940b686e5b1cda11cea4fd" }, "downloads": -1, "filename": "aiochannel-0.0.2.dev0.tar.gz", "has_sig": false, "md5_digest": "9a24fb24c80978f48bdf20053a583b18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4795, "upload_time": "2015-12-15T01:11:35", "url": "https://files.pythonhosted.org/packages/31/7d/d21eb07aa49cb6d39af85707b1c734614b7ec5489e701dc5345b390728a1/aiochannel-0.0.2.dev0.tar.gz" }, { "comment_text": "", "digests": { "md5": "806e3fdcfe146064bfe89fecb9d8ced4", "sha256": "f927182bb4550139e79260bc7b788e89dce652a81a067e31aaf3295e9f1479a1" }, "downloads": -1, "filename": "aiochannel-0.0.2.dev0.zip", "has_sig": false, "md5_digest": "806e3fdcfe146064bfe89fecb9d8ced4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8583, "upload_time": "2015-12-15T01:11:46", "url": "https://files.pythonhosted.org/packages/b2/d4/07d6c5ce51f6fcd0aaea07bba959309315283d396a2e84e6f2bdadfa98e7/aiochannel-0.0.2.dev0.zip" } ], "0.0.3.dev0": [ { "comment_text": "", "digests": { "md5": "d144bbbdd71cbe12aacfbe1abfeee162", "sha256": "5b0194ef92ca6499ec1a110aacf2f59f901224e7e2b956c2ef04f05216da178e" }, "downloads": -1, "filename": "aiochannel-0.0.3.dev0.tar.gz", "has_sig": false, "md5_digest": "d144bbbdd71cbe12aacfbe1abfeee162", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6397, "upload_time": "2015-12-16T00:02:10", "url": "https://files.pythonhosted.org/packages/7f/6f/2d8f9488def629b479636376b66730f3751084b11665237fd49c5d5771dd/aiochannel-0.0.3.dev0.tar.gz" } ], "0.0.4.dev0": [ { "comment_text": "", "digests": { "md5": "851d343caf5c2fe15345c9e5ece2bff0", "sha256": "5e52229bc31b89b70312ccdeae576d8db2f29a09464cde40dad7f0e3e5bb296e" }, "downloads": -1, "filename": "aiochannel-0.0.4.dev0.tar.gz", "has_sig": false, "md5_digest": "851d343caf5c2fe15345c9e5ece2bff0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7467, "upload_time": "2015-12-16T00:48:24", "url": "https://files.pythonhosted.org/packages/4a/a1/4553f2c42467badc1af943bd9f2071564a39b2d5c3e2dd1295e693e7667b/aiochannel-0.0.4.dev0.tar.gz" }, { "comment_text": "", "digests": { "md5": "491c2245bf976422da9d3da3adb8718f", "sha256": "95ec8065335ac487b5b73bc298b7ce367b63a1031eba8d303ebe49d56a4607d6" }, "downloads": -1, "filename": "aiochannel-0.0.4.dev0.zip", "has_sig": false, "md5_digest": "491c2245bf976422da9d3da3adb8718f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13221, "upload_time": "2015-12-16T00:48:29", "url": "https://files.pythonhosted.org/packages/b3/48/0776ec0133a61ced7f8408af4d280db8a9d4fc2857cb6b28e19e6beb081c/aiochannel-0.0.4.dev0.zip" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "6bf5427c63b91efaff6762d7de8b3621", "sha256": "6fd45ea8359b25f684cd6b8086798e0d65a33a312cc3098b619dcf10e717cee8" }, "downloads": -1, "filename": "aiochannel-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6bf5427c63b91efaff6762d7de8b3621", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7554, "upload_time": "2015-12-17T19:22:20", "url": "https://files.pythonhosted.org/packages/da/f3/297a77a9eea4a116d8a438efba5ac69347b87b4faa491d37f6b43090a403/aiochannel-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "f8fd04e1876bc82a1ef6d4cc98cd48b4", "sha256": "9c1e40f42ab785fb225294ded7af83105df2c5bae97bea1d3084444c8852b401" }, "downloads": -1, "filename": "aiochannel-0.1.0.zip", "has_sig": false, "md5_digest": "f8fd04e1876bc82a1ef6d4cc98cd48b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13230, "upload_time": "2015-12-17T19:22:26", "url": "https://files.pythonhosted.org/packages/6b/43/8b001814ff747c6f7824c025633f669fbb93a3250aece94084a9afd1d381/aiochannel-0.1.0.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "cf40168ba7483d72fffab0b2e4d4a9f0", "sha256": "51d97df1a46aa9c953cc32a3b4dd076cbf5d64e34d4cb4258c73e635d1d202f8" }, "downloads": -1, "filename": "aiochannel-0.2.0.tar.gz", "has_sig": false, "md5_digest": "cf40168ba7483d72fffab0b2e4d4a9f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8052, "upload_time": "2015-12-17T23:49:42", "url": "https://files.pythonhosted.org/packages/f4/30/89f66e0dd50e09e2daeb55c45e8c0c1f4b5ce0536b2c9b9f7fb171c449b0/aiochannel-0.2.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "449ff062d0ccaa3dbff6a6da33185547", "sha256": "1e7026a77acc2db0da9e6ddb93460484cf205b0f11d10172c2cdfa914b884af8" }, "downloads": -1, "filename": "aiochannel-0.2.0.zip", "has_sig": false, "md5_digest": "449ff062d0ccaa3dbff6a6da33185547", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14609, "upload_time": "2015-12-17T23:49:47", "url": "https://files.pythonhosted.org/packages/f0/08/4f34edbeb36e289b1bcfc77aa6bbfaecb11787436ce8c248a9fe095025cc/aiochannel-0.2.0.zip" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "9a53edfb7eb5d696fa535a64ecca2992", "sha256": "a7d5fc4174ea284865f236a90912057531242eb6569e30093768a3f03e0715a7" }, "downloads": -1, "filename": "aiochannel-0.2.1.tar.gz", "has_sig": false, "md5_digest": "9a53edfb7eb5d696fa535a64ecca2992", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8370, "upload_time": "2015-12-18T00:19:41", "url": "https://files.pythonhosted.org/packages/68/b4/78929ae473abe1d1d751bbddf0bcb9e72f4eaf9e584d81862561f9be2c38/aiochannel-0.2.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "70d07416e322ab24392351b8ce6d3a4f", "sha256": "3cdd9380087ee00f7d8765eb8967ecdb00769a02570f3b2ef395a86adb7e4f4e" }, "downloads": -1, "filename": "aiochannel-0.2.1.zip", "has_sig": false, "md5_digest": "70d07416e322ab24392351b8ce6d3a4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16003, "upload_time": "2015-12-18T00:19:46", "url": "https://files.pythonhosted.org/packages/a9/5a/276db798db797155721c2f86b6e698b4847997686fc5c0dc184edc3dde63/aiochannel-0.2.1.zip" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "b2a996e424ad8f426124fae4dea6101f", "sha256": "97cb2a50a301745e397414bfe58482d76467d9e5c98630181d089166676adac5" }, "downloads": -1, "filename": "aiochannel-0.2.2.tar.gz", "has_sig": false, "md5_digest": "b2a996e424ad8f426124fae4dea6101f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8321, "upload_time": "2015-12-22T15:47:16", "url": "https://files.pythonhosted.org/packages/50/e2/056d72ac331a0a23f0686602ce55c4db655e82056338f8a074096e321303/aiochannel-0.2.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "1207cb20f490225b198bd71042b53626", "sha256": "06bc67d8f373d285417c20fe2354eedf5a1999e25003b28a832a87eb6e494dd1" }, "downloads": -1, "filename": "aiochannel-0.2.2.zip", "has_sig": false, "md5_digest": "1207cb20f490225b198bd71042b53626", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14884, "upload_time": "2015-12-22T15:47:29", "url": "https://files.pythonhosted.org/packages/96/aa/b323694ba8b89a7dbda061f27691d7b8dbbed80f889fbeae2f76dc5f100b/aiochannel-0.2.2.zip" } ], "0.2.3rc1": [ { "comment_text": "", "digests": { "md5": "ec7ea521388f26b98bea654d08f3d288", "sha256": "686d1b6094a377fea583e33106c524ea50a0e1e58ea304de31f5294d8b7496e7" }, "downloads": -1, "filename": "aiochannel-0.2.3rc1.tar.gz", "has_sig": false, "md5_digest": "ec7ea521388f26b98bea654d08f3d288", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10564, "upload_time": "2016-04-24T15:48:27", "url": "https://files.pythonhosted.org/packages/07/d8/c3a314f89aa00bfdff9b524f4a7011e1719ccf07d6140e080ac0ac11fe24/aiochannel-0.2.3rc1.tar.gz" }, { "comment_text": "", "digests": { "md5": "163ce590f000b6d9b7e76a25731c1bb7", "sha256": "b1b116794b6a9cedadeec54774beace57864c22dbd9f062eb0a4f4f6314921c5" }, "downloads": -1, "filename": "aiochannel-0.2.3rc1.zip", "has_sig": false, "md5_digest": "163ce590f000b6d9b7e76a25731c1bb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16717, "upload_time": "2016-04-24T15:48:35", "url": "https://files.pythonhosted.org/packages/f0/09/ce9f21f6287cab0512af56b787e7b4e4072887cda46b32e34462524cb071/aiochannel-0.2.3rc1.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "b5cd0fc1aae93e6f6edd33f8a9b3a104", "sha256": "18b5df53d5a4c139c4fe4e6c8401a6c03c4cfa0d4f88ef0107774bf21e3c3d7b" }, "downloads": -1, "filename": "aiochannel-1.0.1.zip", "has_sig": false, "md5_digest": "b5cd0fc1aae93e6f6edd33f8a9b3a104", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17188, "upload_time": "2019-08-05T06:06:15", "url": "https://files.pythonhosted.org/packages/11/ce/485575e3e872192e861ea3058a7ebe22b59c649078ad4bef6f18729c1947/aiochannel-1.0.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b5cd0fc1aae93e6f6edd33f8a9b3a104", "sha256": "18b5df53d5a4c139c4fe4e6c8401a6c03c4cfa0d4f88ef0107774bf21e3c3d7b" }, "downloads": -1, "filename": "aiochannel-1.0.1.zip", "has_sig": false, "md5_digest": "b5cd0fc1aae93e6f6edd33f8a9b3a104", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17188, "upload_time": "2019-08-05T06:06:15", "url": "https://files.pythonhosted.org/packages/11/ce/485575e3e872192e861ea3058a7ebe22b59c649078ad4bef6f18729c1947/aiochannel-1.0.1.zip" } ] }