{ "info": { "author": "Ziyang Hu", "author_email": "hu.ziyang@cantab.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "# aiochan \n\n[![Build Status](https://travis-ci.com/zh217/aiochan.svg?branch=master)](https://travis-ci.com/zh217/aiochan)\n[![Documentation Status](https://readthedocs.org/projects/aiochan/badge/?version=latest)](https://aiochan.readthedocs.io/en/latest/?badge=latest)\n[![codecov](https://codecov.io/gh/zh217/aiochan/branch/master/graph/badge.svg)](https://codecov.io/gh/zh217/aiochan)\n[![PyPI version](https://img.shields.io/pypi/v/aiochan.svg)](https://pypi.python.org/pypi/aiochan/)\n[![PyPI version](https://img.shields.io/pypi/pyversions/aiochan.svg)](https://pypi.python.org/pypi/aiochan/)\n[![PyPI status](https://img.shields.io/pypi/status/aiochan.svg)](https://pypi.python.org/pypi/aiochan/)\n[![GitHub license](https://img.shields.io/github/license/zh217/aiochan.svg)](https://github.com/zh217/aiochan/blob/master/LICENSE)\n\n![logo](logo.gif \"aiochan logo\")\n\nAiochan is a library written to bring the wonderful idiom of \n[CSP-style](https://en.wikipedia.org/wiki/Communicating_sequential_processes) concurrency to python. The implementation \nis based on the battle-tested Clojure library [core.async](https://github.com/clojure/core.async), while the API is \ncarefully crafted to feel as pythonic as possible.\n\n## Why?\n\n* Doing concurrency in Python was painful\n* asyncio sometimes feels too low-level\n* I am constantly missing capabilities from [golang](https://golang.org) and \n [core.async](https://github.com/clojure/core.async)\n* It is much easier to port [core.async](https://github.com/clojure/core.async) to Python than to port all those\n [wonderful](http://www.numpy.org/) [python](https://pytorch.org/) [packages](https://scrapy.org/) to some other \n language.\n\n## What am I getting?\n\n* Pythonic [API](https://aiochan.readthedocs.io/en/latest/api.html) that includes everything you'd need for CSP-style\n concurrency programming\n* Works seamlessly with existing asyncio-based libraries\n* Fully [tested](aiochan/test)\n* Fully [documented](https://aiochan.readthedocs.io/en/latest/index.html)\n* Guaranteed to work with Python 3.5.2 or above and PyPy 3.5 or above\n* Depends only on python's core libraries, zero external dependencies\n* Proven, efficient implementation based on Clojure's battle-tested [core.async](https://github.com/clojure/core.async)\n* Familiar semantics for users of [golang](https://golang.org)'s channels and Clojure's core.async channels\n* Flexible implementation that does not depend on the inner workings of asyncio at all\n* Permissively [licensed](LICENSE)\n* A [beginner-friendly tutorial](https://aiochan.readthedocs.io/en/latest/tutorial.html) to get newcomers onboard as \nquickly as possible\n\n## How to install?\n\n```bash\npip3 install aiochan\n```\n\n## How to use?\n\nRead the [beginner-friendly tutorial](https://aiochan.readthedocs.io/en/latest/tutorial.html) that starts from the \nbasics. Or if you are already experienced with [golang](https://golang.org) or Clojure's \n[core.async](https://github.com/clojure/core.async), start with the \n[quick introduction](https://aiochan.readthedocs.io/en/latest/quick.html) and then dive into the \n[API documentation](https://aiochan.readthedocs.io/en/latest/api.html).\n\n## I want to try it first\n\nThe [quick introduction](https://aiochan.readthedocs.io/en/latest/quick.html) and the \n[beginner-friendly tutorial](https://aiochan.readthedocs.io/en/latest/tutorial.html) can both be run in jupyter \nnotebooks, online in binders if you want (just look for ![the binder link](https://mybinder.org/static/images/badge.svg) \nat the top of each tutorial).\n\n## Examples\n\nIn addition to the [introduction](https://aiochan.readthedocs.io/en/latest/quick.html) and the \n[tutorial](https://aiochan.readthedocs.io/en/latest/tutorial.html), we have the \n[complete set of examples](examples/concurrency_patterns) from Rob Pike's \n[Go concurrency patterns](https://www.youtube.com/watch?v=f6kdp27TYZs) translated into aiochan. Also, here is a \n[solution](examples/dining_philosophers.py) to the classical \n[dining philosophers problem](https://en.wikipedia.org/wiki/Dining_philosophers_problem).\n\n## I still don't know how to use it\n\nWe are just starting out, but we will try to answer aiochan-related questions on \n[stackoverflow](https://stackoverflow.com/questions/ask?tags=python+python-aiochan) as quickly as possible.\n\n## I found a bug\n\nFile an [issue](https://github.com/zh217/aiochan/issues/new), or if you think you can solve it, a pull request is even \nbetter.\n\n## Do you use it in production? For what use cases?\n\n`aiochan` is definitely not a toy and we do use it in production, mainly in the two following scenarios:\n\n* Complex data-flow in routing. We integrate aiochan with an asyncio-based web server.\n This should be easy to understand.\n* Data-preparation piplelines. We prepare and pre-process data to feed into our machine learning \n algorithms as fast as possible so that our algorithms spend no time waiting for data\n to come in, but no faster than necessary so that we don't have a memory explosion due to\n data coming in faster than they can be consumed. For this we make heavy use of\n [parallel_pipe](https://aiochan.readthedocs.io/en/latest/api.html#aiochan.channel.Chan.parallel_pipe)\n and [parallel_pipe_unordered](https://aiochan.readthedocs.io/en/latest/api.html#aiochan.channel.Chan.parallel_pipe_unordered).\n Currently we are not aware of any other library that can completely satisfy this need of ours.\n\n## What's up with the logo?\n\nIt is our 'hello world' example:\n\n```python\nimport aiochan as ac\n\nasync def blue_python(c):\n while True:\n # do some hard work\n product = \"a product made by the blue python\"\n await c.put(product)\n\nasync def yellow_python(c):\n while True:\n result = await c.get()\n # use result to do amazing things\n print(\"A yellow python has received\", result)\n\nasync def main():\n c = ac.Chan()\n\n for _ in range(3):\n ac.go(blue_python(c))\n\n for _ in range(3):\n ac.go(yellow_python(c))\n```\n\nin other words, it is a 3-fan-in on top of a 3-fan-out. If you run it, you will have an endless stream of \n`A yellow python has received a product made by the blue python`.\n\nIf you have no idea what this is, read the [tutorial](https://aiochan.readthedocs.io/en/latest/tutorial.html).\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zh217/aiochan", "keywords": "", "license": "Apache", "maintainer": "", "maintainer_email": "", "name": "aiochan", "package_url": "https://pypi.org/project/aiochan/", "platform": "any", "project_url": "https://pypi.org/project/aiochan/", "project_urls": { "Homepage": "https://github.com/zh217/aiochan" }, "release_url": "https://pypi.org/project/aiochan/0.2.6/", "requires_dist": null, "requires_python": ">=3.5.3", "summary": "CSP-style concurrency for Python", "version": "0.2.6" }, "last_serial": 4283314, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "0595e5eb0d03f0fa92bb724fd6716e0c", "sha256": "55e78f4af7db75812463834e1e3a8042f5a6c2c4c467ad6e5a260a6ec946089a" }, "downloads": -1, "filename": "aiochan-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0595e5eb0d03f0fa92bb724fd6716e0c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5203, "upload_time": "2018-08-01T07:19:49", "url": "https://files.pythonhosted.org/packages/e1/1c/b6423ea97dee026bb0482148ebcaa8c330b2eb00159a88e6705363292bb1/aiochan-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2a2aeb3d500850d8cdb795c773463508", "sha256": "4e83733fe046b5ae307dbb9386d31c9be381336847f5f802af72dbe76d1673d6" }, "downloads": -1, "filename": "aiochan-0.1.0.tar.gz", "has_sig": false, "md5_digest": "2a2aeb3d500850d8cdb795c773463508", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4674, "upload_time": "2018-08-01T07:19:50", "url": "https://files.pythonhosted.org/packages/49/30/0c41d6e4fb29067b50936e463b369a4b01f15603b97c73c921ffb17e98b7/aiochan-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "754c4e105dfef2cf622966d191496e42", "sha256": "59009be0340c0419da84b03febf108667afa58fb13fed2410c996fb433c68c67" }, "downloads": -1, "filename": "aiochan-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "754c4e105dfef2cf622966d191496e42", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 19541, "upload_time": "2018-08-10T11:42:32", "url": "https://files.pythonhosted.org/packages/93/5f/ed5e25066d728891e1eddf6afd936077cf565d1e8c6ca5e284499ef24152/aiochan-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6359f87486b523b224228a979630bb1d", "sha256": "3a5b52058590f6dd8c04a25e018cea1426c55a28af0c97ccd71d2266334341a6" }, "downloads": -1, "filename": "aiochan-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6359f87486b523b224228a979630bb1d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 17682, "upload_time": "2018-08-10T11:42:34", "url": "https://files.pythonhosted.org/packages/95/00/78e947394c5c02cb2ddfafeff114511adf6381523e97a7e294edbf054d64/aiochan-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a54326c157db88d890f14845a1c40761", "sha256": "9aa0c00891cc7127a35541ea98ca62938cf07533cfc585fdaeabab0c2a10dedb" }, "downloads": -1, "filename": "aiochan-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a54326c157db88d890f14845a1c40761", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 19631, "upload_time": "2018-08-10T12:06:25", "url": "https://files.pythonhosted.org/packages/0e/9e/5a5c4fbbbe5af88f9b6e80a0f49f0060988bfeef06404a5bce560b501337/aiochan-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b746fa1dc6115bf5a5c36942f152a4a4", "sha256": "7b376c872ab624fc9f3762f34b0e7da1ba9682d388b6e15ef98ddf95feec5733" }, "downloads": -1, "filename": "aiochan-0.1.2.tar.gz", "has_sig": false, "md5_digest": "b746fa1dc6115bf5a5c36942f152a4a4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 17998, "upload_time": "2018-08-10T12:06:27", "url": "https://files.pythonhosted.org/packages/b1/2b/532e45fa4e1c784c5ec40b29975011a58a5ce7484764c1f51f44702186b4/aiochan-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "dd99911cc1553edd0db0308542308d1d", "sha256": "cf7f1bfa0a1e8c71e52f660c446df246a3bc79d0cc0fd00518ace52d8b9f63c0" }, "downloads": -1, "filename": "aiochan-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "dd99911cc1553edd0db0308542308d1d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 18425, "upload_time": "2018-08-25T16:12:22", "url": "https://files.pythonhosted.org/packages/42/31/248c944b52745b2916ef99edf2392b4436644dcadbb1549cc682c0f3fc76/aiochan-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a06e901a8192743d6bdca892c9ea9e39", "sha256": "c59c26fb32490426588a2691c88d38cdd0a532cd67886f270d4921e4fe14019c" }, "downloads": -1, "filename": "aiochan-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a06e901a8192743d6bdca892c9ea9e39", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 18578, "upload_time": "2018-08-25T16:12:25", "url": "https://files.pythonhosted.org/packages/7c/a9/5a953290859ffb7d42db75723633be5d2037ca9e7fb14e58567d76cb7a19/aiochan-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ff04c4ee251ef555070168a031998841", "sha256": "e7476a71edfd0698c96f5b4587ab9618ec65a8364e35e0590128c4f98bd02930" }, "downloads": -1, "filename": "aiochan-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ff04c4ee251ef555070168a031998841", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 20323, "upload_time": "2018-08-25T16:24:42", "url": "https://files.pythonhosted.org/packages/48/a4/d30cfa1e7f6608cc4dddfa3ca0da727507f0ddfcf207fe8cbf1aa306d1d0/aiochan-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c0e9d02f6aba33cfd457db7281631e9", "sha256": "55aca4251f4a2cf1b476adfbf4749b86ef86c1833dac6f359dae3d0565e294a8" }, "downloads": -1, "filename": "aiochan-0.2.0.tar.gz", "has_sig": false, "md5_digest": "8c0e9d02f6aba33cfd457db7281631e9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 20989, "upload_time": "2018-08-25T16:24:44", "url": "https://files.pythonhosted.org/packages/2b/35/9dd13627f14a8d752329561cf5d1a0487b24821e5ce16ecb861e45843a55/aiochan-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "77c2ce7de04e47b8e2c174bebb13e381", "sha256": "b5dc950d360fd5b77bb1e24c1e730cf9d9685284158aca7967611f907da493e4" }, "downloads": -1, "filename": "aiochan-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "77c2ce7de04e47b8e2c174bebb13e381", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 20552, "upload_time": "2018-08-31T16:22:18", "url": "https://files.pythonhosted.org/packages/fa/9f/c1f36ebf73fba04b693961c5d599af75a8f460dbf81e5649b0e7b0eb4cbb/aiochan-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a8e68983bb7b8802ce8e32fa4b2d4ce7", "sha256": "72ff6abfcdebb20fdebad35543a612fc9f74f1ecc219eca80e6a52c24ddd3456" }, "downloads": -1, "filename": "aiochan-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a8e68983bb7b8802ce8e32fa4b2d4ce7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 21310, "upload_time": "2018-08-31T16:22:21", "url": "https://files.pythonhosted.org/packages/db/0b/56c139c82d355048de46ec97e30d7ee01c451549f7b932843d4cff09a1ad/aiochan-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "d9c2e372eb3cde038dd30239bc27286e", "sha256": "de5f00b073d299d7b03afa713c4e8622aaf1d45eed55c0a8ed7a2c0a6e09412b" }, "downloads": -1, "filename": "aiochan-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d9c2e372eb3cde038dd30239bc27286e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 21025, "upload_time": "2018-08-31T17:55:40", "url": "https://files.pythonhosted.org/packages/97/72/ca2cbb86d29046fe021695b03dac5f1877277a995abb2de30d49d679c3a5/aiochan-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab5ecbde1679f375a4a2cb29e2353fa4", "sha256": "5f352a73cd32d3443959e0886f4739c4a13cd206c8f29ed560df093ece5680c0" }, "downloads": -1, "filename": "aiochan-0.2.2.tar.gz", "has_sig": false, "md5_digest": "ab5ecbde1679f375a4a2cb29e2353fa4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 21671, "upload_time": "2018-08-31T17:55:43", "url": "https://files.pythonhosted.org/packages/3d/41/e326c9e1a79b5c139033b90c911b3314ba2c0e1f266dec4bf3a8bdf8d0bd/aiochan-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "a803af29643d1950ef3bf05e79fbee02", "sha256": "2b82a75e5df79a0a81795a5d1e2bd1400534475d76e46329f21cdb75cedcebc6" }, "downloads": -1, "filename": "aiochan-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a803af29643d1950ef3bf05e79fbee02", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 21437, "upload_time": "2018-09-07T08:39:14", "url": "https://files.pythonhosted.org/packages/8e/14/dd447de22b0fdfdec7a48f70046dfece4996903499034415b24ef9a864bc/aiochan-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad2c893408d284ceeebf1cfb860e1684", "sha256": "d564d478a003bdf962abecbb29ac95c2b585c8b57a697734cf98d4a71c57acd0" }, "downloads": -1, "filename": "aiochan-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ad2c893408d284ceeebf1cfb860e1684", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 20131, "upload_time": "2018-09-07T08:39:16", "url": "https://files.pythonhosted.org/packages/ec/a9/0167e0428b9dd00cf0c41c7740d5cca33cbcbb01e516029f356729aa53cc/aiochan-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "a1a526a88b8d753ede7435701456725c", "sha256": "0928b07f4126d6827a2ddaf8bfe461af8c420e4957c620436a007ee923619e6c" }, "downloads": -1, "filename": "aiochan-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a1a526a88b8d753ede7435701456725c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 22102, "upload_time": "2018-09-10T13:28:43", "url": "https://files.pythonhosted.org/packages/46/63/4c7d239e55b06ff04365d2f6f52bff93c103f8d12a8b2a88f12cc79c7f6b/aiochan-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "985e34394a38998bfc498cb61c99c9b7", "sha256": "ecd16b6a836fb66603df22f794b4ecc118bc559561332d0f1f3aa54fd3b50b39" }, "downloads": -1, "filename": "aiochan-0.2.4.tar.gz", "has_sig": false, "md5_digest": "985e34394a38998bfc498cb61c99c9b7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 22770, "upload_time": "2018-09-10T13:28:48", "url": "https://files.pythonhosted.org/packages/1c/20/04fd3f51d4a945057b6f1b103ed90413132245fd5412b24aee57bb8534bb/aiochan-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "bd550aec8fb2f5c4b52b7eb80971183e", "sha256": "ef609920ba3cb26f76ea574567756e37f133c71fe8f4a080797a1908ba209fdb" }, "downloads": -1, "filename": "aiochan-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "bd550aec8fb2f5c4b52b7eb80971183e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 22890, "upload_time": "2018-09-15T06:09:20", "url": "https://files.pythonhosted.org/packages/92/d2/b8b0c8043bc255c08fc8b258a97a6c9737214962059ca4722c15bc78a841/aiochan-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65a464a5de07cf8a172c051aceed94c9", "sha256": "0d77bd475e6f9a23b27de3ab2ef61969a6d20f976e9d3d6eaabc40a6476033b8" }, "downloads": -1, "filename": "aiochan-0.2.5.tar.gz", "has_sig": false, "md5_digest": "65a464a5de07cf8a172c051aceed94c9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 24051, "upload_time": "2018-09-15T06:09:27", "url": "https://files.pythonhosted.org/packages/fc/66/1613e8f166ddb038e1fdf15d0ce1b2c4ee7f5e45964aee4d254c5f77e12c/aiochan-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "63995b744247b4f4cd708b1d24491bd1", "sha256": "1ad09df21cab87678f52e74da637ea5b495ce17074a6ece02e1686b5f4f8b434" }, "downloads": -1, "filename": "aiochan-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "63995b744247b4f4cd708b1d24491bd1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 22412, "upload_time": "2018-09-18T12:12:24", "url": "https://files.pythonhosted.org/packages/94/ec/9611cbe4c777e2604ee0442e1dbc2a0d237129b97e677493261f5b8e2930/aiochan-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5981058cd1493fee62fc0b179e7f3dd0", "sha256": "f1eac2c2f3fcfcd2dc347c2f67a4d68daabe38a76e79822b622bbb1a8e497455" }, "downloads": -1, "filename": "aiochan-0.2.6.tar.gz", "has_sig": false, "md5_digest": "5981058cd1493fee62fc0b179e7f3dd0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 23534, "upload_time": "2018-09-18T12:12:31", "url": "https://files.pythonhosted.org/packages/62/9e/7c94c529cd1197f7ef6e35b100644893f7afc83389aa104ef44b373a10d2/aiochan-0.2.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "63995b744247b4f4cd708b1d24491bd1", "sha256": "1ad09df21cab87678f52e74da637ea5b495ce17074a6ece02e1686b5f4f8b434" }, "downloads": -1, "filename": "aiochan-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "63995b744247b4f4cd708b1d24491bd1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 22412, "upload_time": "2018-09-18T12:12:24", "url": "https://files.pythonhosted.org/packages/94/ec/9611cbe4c777e2604ee0442e1dbc2a0d237129b97e677493261f5b8e2930/aiochan-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5981058cd1493fee62fc0b179e7f3dd0", "sha256": "f1eac2c2f3fcfcd2dc347c2f67a4d68daabe38a76e79822b622bbb1a8e497455" }, "downloads": -1, "filename": "aiochan-0.2.6.tar.gz", "has_sig": false, "md5_digest": "5981058cd1493fee62fc0b179e7f3dd0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 23534, "upload_time": "2018-09-18T12:12:31", "url": "https://files.pythonhosted.org/packages/62/9e/7c94c529cd1197f7ef6e35b100644893f7afc83389aa104ef44b373a10d2/aiochan-0.2.6.tar.gz" } ] }