{ "info": { "author": "Stefan Scherfke", "author_email": "stefan@sofa-rockers.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "aiomas \u2013 A library for multi-agent systems and RPC based on asyncio\n===================================================================\n\n.. image:: https://gitlab.com/sscherfke/aiomas/badges/master/pipeline.svg\n :height: 20px\n :alt: pipeline status\n :target: https://gitlab.com/sscherfke/aiomas/commits/master\n\n.. image:: https://gitlab.com/sscherfke/aiomas/badges/master/coverage.svg\n :height: 20px\n :alt: coverage report\n :target: https://gitlab.com/sscherfke/aiomas/commits/master\n\n*aiomas* is an easy-to-use library for *request-reply channels*, *remote\nprocedure calls (RPC)* and *multi-agent systems (MAS)*. It\u2019s written in pure\nPython on top of asyncio__.\n\nHere are three simple examples that show the different layers of aiomas and\nwhat they add on top of each other:\n\nThe *request-reply channel* has the lowest level of abstraction (but already\noffers more then vanilla asyncio):\n\n.. code-block:: python3\n\n >>> import aiomas\n >>>\n >>>\n >>> async def handle_client(channel):\n ... \"\"\"Handle a client connection.\"\"\"\n ... req = await channel.recv()\n ... print(req.content)\n ... await req.reply('cya')\n ... await channel.close()\n >>>\n >>>\n >>> async def client():\n ... \"\"\"Client coroutine: Send a greeting to the server and wait for a\n ... reply.\"\"\"\n ... channel = await aiomas.channel.open_connection(('localhost', 5555))\n ... rep = await channel.send('ohai')\n ... print(rep)\n ... await channel.close()\n >>>\n >>>\n >>> server = aiomas.run(aiomas.channel.start_server(('localhost', 5555), handle_client))\n >>> aiomas.run(client())\n ohai\n cya\n >>> server.close()\n >>> aiomas.run(server.wait_closed())\n\nThe *RPC layer* adds remote procedure calls on top of it:\n\n.. code-block:: python3\n\n >>> import aiomas\n >>>\n >>>\n >>> class MathServer:\n ... router = aiomas.rpc.Service()\n ...\n ... @router.expose\n ... def add(self, a, b):\n ... return a + b\n ...\n >>>\n >>> async def client():\n ... \"\"\"Client coroutine: Call the server's \"add()\" method.\"\"\"\n ... rpc_con = await aiomas.rpc.open_connection(('localhost', 5555))\n ... rep = await rpc_con.remote.add(3, 4)\n ... print('What\u2019s 3 + 4?', rep)\n ... await rpc_con.close()\n >>>\n >>> server = aiomas.run(aiomas.rpc.start_server(('localhost', 5555), MathServer()))\n >>> aiomas.run(client())\n What\u2019s 3 + 4? 7\n >>> server.close()\n >>> aiomas.run(server.wait_closed())\n\nFinally, the *agent layer* hides some of the boilerplate code required to setup\nthe sockets and allows agent instances to easily talk with each other:\n\n.. code-block:: python3\n\n >>> import aiomas\n >>>\n >>> class TestAgent(aiomas.Agent):\n ... def __init__(self, container):\n ... super().__init__(container)\n ... print('Ohai, I am %s' % self)\n ...\n ... async def run(self, addr):\n ... remote_agent = await self.container.connect(addr)\n ... ret = await remote_agent.service(42)\n ... print('%s got %s from %s' % (self, ret, remote_agent))\n ...\n ... @aiomas.expose\n ... def service(self, value):\n ... return value\n >>>\n >>> c = aiomas.Container.create(('localhost', 5555))\n >>> agents = [TestAgent(c) for i in range(2)]\n Ohai, I am TestAgent('tcp://localhost:5555/0')\n Ohai, I am TestAgent('tcp://localhost:5555/1')\n >>> aiomas.run(until=agents[0].run(agents[1].addr))\n TestAgent('tcp://localhost:5555/0') got 42 from TestAgentProxy('tcp://localhost:5555/1')\n >>> c.shutdown()\n\n*aiomas* is released under the MIT license. It requires Python 3.4 and above\nand runs on Linux, OS X, and Windows.\n\n__ https://docs.python.org/3/library/asyncio.html\n\n\nInstallation\n------------\n\n*aiomas* requires Python >= 3.6 (or PyPy3 >= 5.10.0). It uses the *JSON* codec\nby default and only has pure Python dependencies.\n\nInstall *aiomas* via pip__ by running:\n\n.. code-block:: bash\n\n $ pip install aiomas\n\nYou can enable the optional MsgPack__ codec or its Blosc__ compressed version\nby installing the corresponding features (note, that you need a C compiler to\ninstall them):\n\n.. code-block:: bash\n\n $ pip install aiomas[mp] # Enables the MsgPack codec\n $ pip install aiomas[mpb] # Enables the MsgPack and MsgPackBlosc codecs\n\n__ https://pip.pypa.io/\n__ https://pypi.python.org/pypi/msgpack-python/\n__ https://pypi.python.org/pypi/blosc/\n\n\nFeatures\n--------\n\n*aiomas* just puts three layers of abstraction around raw TCP / unix domain\nsockets provided by *asyncio*:\n\nAgents and agent containers:\n The top-layer provides a simple base class for your own agents. All agents\n live in a container.\n\n Containers take care of creating agent instances and performing the\n communication between them.\n\n The container provides a *clock* for the agents. This clock can either be\n synchronized with the real (wall-clock) time or be set by an external process\n (e.g., other simulators).\n\nRPC:\n The *rpc* layer implements remote procedure calls which let you call methods\n on remote objects nearly as if they were normal objects:\n\n Instead of ``ret = obj.meth(arg)`` you write ``ret = await obj.meth(arg)``.\n\nRequest-reply channel:\n The *channel* layer is the basis for the *rpc* layer. It sends JSON__ or\n MsgPack__ encoded byte strings over TCP or unix domain sockets. It also maps\n replies (of success or failure) to their corresponding request.\n\nOther features:\n\n- TLS support for authorization and encrypted communication.\n\n- Interchangeable and extensible codecs: JSON and MsgPack (the latter\n optionally compressed with Blosc) are built-in. You can add custom codecs or\n write (de)serializers for your own objects to extend a codec.\n\n- Deterministic, emulated sockets: A *LocalQueue* transport lets you send and\n receive message in a deterministic and reproducible order within a single\n process. This helps testing and debugging distributed algorithms.\n\n__ http://www.json.org/\n__ http://msgpack.org/\n\n\nPlanned features\n^^^^^^^^^^^^^^^^\n\nSome ideas for future releases:\n\n- Optional automatic re-connect after connection loss\n\n\nContribute\n----------\n\n- Issue Tracker: https://gitlab.com/sscherfke/aiomas/issues\n- Source Code: https://gitlab.com/sscherfke/aiomas\n\nSet-up a development environment with:\n\n.. code-block:: bash\n\n $ virtualenv -p `which python3` aiomas\n $ pip install -r requirements-setup.txt\n\nRun the tests with:\n\n.. code-block:: bash\n\n $ pytest\n $ # or\n $ tox\n\n\nSupport\n-------\n\n- Documentation: https://aiomas.readthedocs.io/en/latest/\n\n- Mailing list: https://groups.google.com/forum/#!forum/python-tulip\n\n- Stack Overflow: http://stackoverflow.com/questions/tagged/aiomas\n\n- IRC: #asyncio\n\n\nLicense\n-------\n\nThe project is licensed under the MIT license.\n\n\nChangelog\n=========\n\n2.0.1 \u2013 2017-12-29\n------------------\n\n- [CHANGE] Restore support for Python 3.5 so that the docs on Read the Docs\n build again.\n\n\n2.0.0 \u2013 2017-12-28\n------------------\n\n- [BREAKING] Converted to f-Strings and ``async``/``await`` syntax. The\n minimum required Python versions are now Python 3.6 and PyPy3 5.10.0.\n\n- [BREAKING] Removed ``aiomas.util.async()`` and ``aiomas.util.create_task()``.\n\n- [CHANGE] Move from Bitbucket and Mercurial to GitLab and Git.\n\n- [FIX] Adjust to asyncio changes and explicitly pass references to the current\n event loop where necessary.\n\nYou can find information about older versions in the `documentation\n`_.\n\n\nAuthors\n=======\n\nThe original author of aiomas is Stefan Scherfke.\n\nThe initial development has kindly been supported by `OFFIS\n`_.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://aiomas.readthedocs.io", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "aiomas", "package_url": "https://pypi.org/project/aiomas/", "platform": "", "project_url": "https://pypi.org/project/aiomas/", "project_urls": { "Homepage": "https://aiomas.readthedocs.io" }, "release_url": "https://pypi.org/project/aiomas/2.0.1/", "requires_dist": [ "arrow (>=0.7)", "msgpack-python (>=0.4.7); extra == 'mp'", "blosc (>=1.3.2); extra == 'mpb'", "msgpack-python (>=0.4.7); extra == 'mpb'" ], "requires_python": ">=3.5", "summary": "Asyncio-based, layered networking library providing request-reply channels, RPC, and multi-agent systems.", "version": "2.0.1" }, "last_serial": 3450067, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "94825135a1bac4a40a6b0353f9ec011b", "sha256": "c486910e90d4e4cd3b0c3efe861c98c5ff7913561462a301a6ab75bb2b345b01" }, "downloads": -1, "filename": "aiomas-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "94825135a1bac4a40a6b0353f9ec011b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13655, "upload_time": "2015-02-12T15:00:28", "url": "https://files.pythonhosted.org/packages/f2/12/0086ea6d5384290999b0637d82af1b84c4abccd3fe6ef02acc200b98cfa1/aiomas-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb12e50a5150b43a731f437a670ea118", "sha256": "2266982836e15a063750b9e5ecfb3f2699445a375f8da4fd3f3a622d66d0656d" }, "downloads": -1, "filename": "aiomas-0.1.0.tar.gz", "has_sig": false, "md5_digest": "bb12e50a5150b43a731f437a670ea118", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 631886, "upload_time": "2015-02-12T15:00:33", "url": "https://files.pythonhosted.org/packages/b4/d4/6c0212b88b8e7746ff6b6d3b39796aa23d25fe2b2d47c42f9df0ec9ed43d/aiomas-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "33577de31c556dd3fbd26debd1489e41", "sha256": "935651cc000528b911de6b2936158a7d4f40a28b6a17949d6a8725ad85e04e48" }, "downloads": -1, "filename": "aiomas-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "33577de31c556dd3fbd26debd1489e41", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24833, "upload_time": "2015-02-12T15:00:35", "url": "https://files.pythonhosted.org/packages/b0/16/4d0b452379486845264fa0966f53e93f00235b6029a4e853d346a5ce9098/aiomas-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4c5dc754712ae7b9dab32c3543b16013", "sha256": "0ac71851615c8b5c10ca39d9d6fa498d77bd577c420fe31948d54380842ce853" }, "downloads": -1, "filename": "aiomas-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4c5dc754712ae7b9dab32c3543b16013", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 650332, "upload_time": "2015-02-12T15:00:38", "url": "https://files.pythonhosted.org/packages/fb/56/795c3e24036f041d9a400cc82a3436a5121d347388b19b801a9e79aed0f6/aiomas-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "ed9b8bb672313b0af90ac669726390c9", "sha256": "e829f57dc573cada751a1506e96fec08e8c229f1255b29591603edd7d19db776" }, "downloads": -1, "filename": "aiomas-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed9b8bb672313b0af90ac669726390c9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28966, "upload_time": "2015-03-11T14:17:07", "url": "https://files.pythonhosted.org/packages/33/0b/6b9ddd76d176397f06e41facd00ad68fac50640edd76f96b31e2b6843658/aiomas-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb7bdda97d93ae119013e442b98c6362", "sha256": "2b8ee755baf18eae77dba038885860d45cc15560bea038bf2bf19ed92a89a144" }, "downloads": -1, "filename": "aiomas-0.3.0.tar.gz", "has_sig": false, "md5_digest": "fb7bdda97d93ae119013e442b98c6362", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 754853, "upload_time": "2015-03-11T14:17:11", "url": "https://files.pythonhosted.org/packages/fd/8c/a5eca7948ae35adc9eede87c12c333194f7dd598ff0c803cc883f71ecdde/aiomas-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "a6662df2b41c3685b68350ce3659bbd9", "sha256": "b8e8e5f68bd2c60e0189996ac39c934e859df58ce8afda770f9a9c58bef9adc7" }, "downloads": -1, "filename": "aiomas-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a6662df2b41c3685b68350ce3659bbd9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30041, "upload_time": "2015-04-15T10:13:32", "url": "https://files.pythonhosted.org/packages/c4/79/2da2de3b965c05d4cb851cc2418bae7ff3adba83b6684d06900ffd211bfe/aiomas-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a002ebb653ad2029cc28f69bd00e9ff", "sha256": "a3e587768c36ec0d10e67cea1ffb80fee8fff4464c63b56ba87cfee7c804d9fa" }, "downloads": -1, "filename": "aiomas-0.4.0.tar.gz", "has_sig": false, "md5_digest": "1a002ebb653ad2029cc28f69bd00e9ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 759272, "upload_time": "2015-04-15T10:13:35", "url": "https://files.pythonhosted.org/packages/2a/f3/0143baeb77571a930c44012f78c9415f5805963bfb0a1fcf2a898366f6b2/aiomas-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "5da89ee817929d32a26fcb5cfd20786b", "sha256": "68eab3bb04919814f9e092991ab136799c0ba62b0c3694571373ef1732558097" }, "downloads": -1, "filename": "aiomas-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5da89ee817929d32a26fcb5cfd20786b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32510, "upload_time": "2015-06-27T18:03:07", "url": "https://files.pythonhosted.org/packages/b4/d1/81a277242fadcc8a9e226b02a88085b8447024e90e6a8fc599f5866cfed0/aiomas-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4cf3e40a3208df834f53b48d179b7d61", "sha256": "227982fbd60ba879398db0bae922e7db853b5c06bb50e791c30abd3d916af714" }, "downloads": -1, "filename": "aiomas-0.5.0.tar.gz", "has_sig": false, "md5_digest": "4cf3e40a3208df834f53b48d179b7d61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 193649, "upload_time": "2015-06-27T18:03:12", "url": "https://files.pythonhosted.org/packages/8a/38/721bd58afef3540716c30374108592a4bbcdbd549b41b7673f0073c7bed2/aiomas-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "5c3fa611dc78e803a753020452b164f8", "sha256": "370ec10c11d9e76ad1218827dbc87874fac41a24313fe74cf442c446fae9a2c3" }, "downloads": -1, "filename": "aiomas-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5c3fa611dc78e803a753020452b164f8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34717, "upload_time": "2015-09-18T12:24:00", "url": "https://files.pythonhosted.org/packages/54/8c/54e095b3add2443902c882af64d7b3fc2485d42c2448bd53f2dff57bab31/aiomas-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99b9d81c00c260d92517c4199ce239ea", "sha256": "e5694ebd4b64db43707a75e22ac2e9b298cec35405e9cf6db542386a7d4fe587" }, "downloads": -1, "filename": "aiomas-0.6.0.tar.gz", "has_sig": false, "md5_digest": "99b9d81c00c260d92517c4199ce239ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 201613, "upload_time": "2015-09-18T12:24:14", "url": "https://files.pythonhosted.org/packages/e1/99/2c6db2d28a79f574089a809d5e00791edc4093efadc4bc5382c95893af2b/aiomas-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "ad01266505571abc7041c18cdeecef9c", "sha256": "a27668d7e2b697cafe85f31b0081e96c7803eb92a1b1744ec4b7898c1140f1cf" }, "downloads": -1, "filename": "aiomas-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ad01266505571abc7041c18cdeecef9c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34915, "upload_time": "2015-11-21T12:46:18", "url": "https://files.pythonhosted.org/packages/bf/b1/c5e1243729e6e55c8f54d2be105335d36f5760d3c125633cc821e726a4ff/aiomas-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99116fe6605990bf49c2079b8bad692f", "sha256": "8423e6b034682a425d38a2c8dc8c189782cc9ebb0dc997bd408efdaa418c4398" }, "downloads": -1, "filename": "aiomas-0.6.1.tar.gz", "has_sig": false, "md5_digest": "99116fe6605990bf49c2079b8bad692f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 205099, "upload_time": "2015-11-21T12:46:24", "url": "https://files.pythonhosted.org/packages/52/e4/8d8ce0ca793c0cbce30c5413c13b29bffaf47abf7f6a139ab069db8a9c18/aiomas-0.6.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "1fc482d4ab2d857b5e47ca1065d8c45f", "sha256": "ecf33b8525212694826c9393453c7c91cf9701e6395acdc2edcd3ffbb9097720" }, "downloads": -1, "filename": "aiomas-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1fc482d4ab2d857b5e47ca1065d8c45f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 44964, "upload_time": "2016-04-18T10:39:33", "url": "https://files.pythonhosted.org/packages/5e/01/35c97e1e845873b1959b68824dcad35fb8bcaf38b24a7c2371f17b304b2e/aiomas-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c1e1a5b2c2879c613070be4b2d91bb9", "sha256": "295eda5d97565cc4792990d1bdf5c66785939a70f0d1d1f42c11bd76d1bfb92d" }, "downloads": -1, "filename": "aiomas-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0c1e1a5b2c2879c613070be4b2d91bb9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279975, "upload_time": "2016-04-18T10:39:45", "url": "https://files.pythonhosted.org/packages/60/1f/d19991bbb5769ba95a339994c91ae666967ac176aad111721f45d8075e06/aiomas-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "16f5b6d7a6f1cbad27557430c66f04d4", "sha256": "b85dce19e3043dabff83b47f69c048a7c7823cecc59588466eddb833df045dbb" }, "downloads": -1, "filename": "aiomas-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16f5b6d7a6f1cbad27557430c66f04d4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 45267, "upload_time": "2016-04-22T13:26:14", "url": "https://files.pythonhosted.org/packages/18/9a/54820bbdfd78065b320a25c8e90bde36667997cf0b56d744462bd5a6a99a/aiomas-1.0.1-py2.py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "8aad766b1689bcfb36a6874ed30550e0", "sha256": "df7aff00007bba8f38ebc8d9b613e21485ed9a5a2cc7ed7bcbf9a2502911e104" }, "downloads": -1, "filename": "aiomas-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8aad766b1689bcfb36a6874ed30550e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38284, "upload_time": "2016-05-04T12:58:33", "url": "https://files.pythonhosted.org/packages/92/84/a7424e3f2e73a9e7155b2dd3d4ba7a1c704d708b7c9d8890359f42a5b771/aiomas-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c4ce68643d7c89cf3334f17c0b3a2a0e", "sha256": "3510b50b032c867e4feb1808b282e97145eebcaa1f4ba92afa1d9b2db12335be" }, "downloads": -1, "filename": "aiomas-1.0.2.tar.gz", "has_sig": false, "md5_digest": "c4ce68643d7c89cf3334f17c0b3a2a0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 277147, "upload_time": "2016-05-04T12:58:56", "url": "https://files.pythonhosted.org/packages/ec/78/e4e1f943dc188d368ec9a30d072608ed0dddb523fe78244031eca715d933/aiomas-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "ed369d866b6f9139b3594a109a08b2e8", "sha256": "b9a7d8a44de4ce31bedb309087c3de1e209a0876ae64a2a220e8838e118e546e" }, "downloads": -1, "filename": "aiomas-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed369d866b6f9139b3594a109a08b2e8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38589, "upload_time": "2016-05-09T10:51:20", "url": "https://files.pythonhosted.org/packages/e5/0c/c47831973c4fd5d751a176c98da23c492867fffca7c86593c556067e5c7c/aiomas-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3f9ed69d535fa2164951fcb183719033", "sha256": "6b21d0f7e3a8b9e56b080cc5c87a62717c921071bea1be71e8cbe910b9c2ed9d" }, "downloads": -1, "filename": "aiomas-1.0.3.tar.gz", "has_sig": false, "md5_digest": "3f9ed69d535fa2164951fcb183719033", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 277655, "upload_time": "2016-05-09T10:51:30", "url": "https://files.pythonhosted.org/packages/3d/22/53ed78d2ce2b9405266cef77a539fb0dbdc96b237f05b4f6508bac5d5df3/aiomas-1.0.3.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "b81589a3dcec29905fab7eb1f542bc7e", "sha256": "134c7c5b0bcb38cc05a0a1d14ac7145e4bc7cdfebe267a6563d0e40d274a0e6f" }, "downloads": -1, "filename": "aiomas-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b81589a3dcec29905fab7eb1f542bc7e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37735, "upload_time": "2017-12-28T22:51:28", "url": "https://files.pythonhosted.org/packages/47/80/90ddc432103916ef4e76608c8603728404c778920ee6e9f9c769d1f5a97d/aiomas-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27c7dbffacc2ed99cadf20d0bd63d3d9", "sha256": "4361497dd6ca5acdd2a0ab8383fbf2839f153e3d3c258d8ca769868ea880c6ab" }, "downloads": -1, "filename": "aiomas-2.0.0.tar.gz", "has_sig": false, "md5_digest": "27c7dbffacc2ed99cadf20d0bd63d3d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 271868, "upload_time": "2017-12-28T22:51:29", "url": "https://files.pythonhosted.org/packages/62/4a/bb5eb9e166eb1ded38911f7c2ec12648111dab4e29eb8c3f039b653af4c7/aiomas-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "11d899ed42e5af9346a780e23e42209a", "sha256": "264e969b0737a5ac561c428be9c1d60c420ea1b15a698c7c65b07fc3fde65532" }, "downloads": -1, "filename": "aiomas-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "11d899ed42e5af9346a780e23e42209a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 37908, "upload_time": "2017-12-29T14:38:43", "url": "https://files.pythonhosted.org/packages/81/11/8e0df581d6ae72ca4ccb8e9cc977d7df3fc121413f6847a7b1d8044e0779/aiomas-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "798a08106da1f96eda4da90942b4f99d", "sha256": "ef43dff3510e7e1f7482b74f88b39d60e262edfc5211866e5eeee2bf1e96e796" }, "downloads": -1, "filename": "aiomas-2.0.1.tar.gz", "has_sig": false, "md5_digest": "798a08106da1f96eda4da90942b4f99d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 271998, "upload_time": "2017-12-29T14:38:45", "url": "https://files.pythonhosted.org/packages/2b/0e/75a363da75efe9cee51357d7f2121ca9861fb7de59327cb1f9b6c2c9f585/aiomas-2.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "11d899ed42e5af9346a780e23e42209a", "sha256": "264e969b0737a5ac561c428be9c1d60c420ea1b15a698c7c65b07fc3fde65532" }, "downloads": -1, "filename": "aiomas-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "11d899ed42e5af9346a780e23e42209a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 37908, "upload_time": "2017-12-29T14:38:43", "url": "https://files.pythonhosted.org/packages/81/11/8e0df581d6ae72ca4ccb8e9cc977d7df3fc121413f6847a7b1d8044e0779/aiomas-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "798a08106da1f96eda4da90942b4f99d", "sha256": "ef43dff3510e7e1f7482b74f88b39d60e262edfc5211866e5eeee2bf1e96e796" }, "downloads": -1, "filename": "aiomas-2.0.1.tar.gz", "has_sig": false, "md5_digest": "798a08106da1f96eda4da90942b4f99d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 271998, "upload_time": "2017-12-29T14:38:45", "url": "https://files.pythonhosted.org/packages/2b/0e/75a363da75efe9cee51357d7f2121ca9861fb7de59327cb1f9b6c2c9f585/aiomas-2.0.1.tar.gz" } ] }