{ "info": { "author": "Ryan Northey", "author_email": "ryan@3ca.org.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Detailed documentation\n**********************\n\naio.web.server\n==============\n\nWeb server for the aio_ asyncio framework\n\n.. _aio: https://github.com/phlax/aio\n\n\n\nBuild status\n------------\n\n.. image:: https://travis-ci.org/phlax/aio.web.server.svg?branch=master\n\t :target: https://travis-ci.org/phlax/aio.web.server\n\n\nInstallation\n------------\n\nRequires python >= 3.4\n\nInstall with:\n\n.. code:: bash\n\n\t pip install aio.web.server\n\n\t \nQuick start - Hello world web server\n------------------------------------\n\nCreate a web server that says hello\n\nSave the following into a file \"hello.conf\"\n\n.. code:: ini\n\n\t [aio]\n\t modules = aio.web.server\n\n\t [server/my_server]\n\t factory = aio.web.server.factory\n\t port = 8080\n\n\t [web/my_server/my_route]\n\t match = /\n\t route = my_example.handler\n\n\t \nAnd save the following into a file named my_example.py\n\t \n.. code:: python\n\n\t import aiohttp\n\t import aio.web.server\n\n\t @aio.web.server.route\n\t def handler(request, config):\n\t return aiohttp.web.Response(body=b\"Hello, web world\")\n\n\nRun with the aio run command\n\n.. code:: bash\n\n\t aio run -c hello.conf\n\n\t \nWeb server configuration\n------------------------\n\t \nWeb server definitions are in the following format, where SERVER_NAME corresponds to the server/SERVER_NAME\n\n\n.. code:: ini\n\n\t [web/SERVER_NAME]\n\n\nSo for example you might have the following\n\n.. code:: ini\n\t \n\t [server/my_server]\n\t factory = aio.web.server.factory\n\t port = 8080\n\n\t [web/my_server]\n\t modules = ${aio:modules}\n\t some.web.module\n\n\nRoute configuration\n-------------------\n\t\t \nRoute definitions are in defined in sections with the following format\n\n.. code:: ini\n\n\t [web/SERVER_NAME/ROUTE_NAME]\n\t \n\nSo an example server configuation with a route defined for the path / might be\n\n.. code:: ini\n\t \n\t [aio]\n\t modules = aio.web.server\n \n\t [server/my_server]\n\t factory = aio.web.server.factory\n\t port = 8080\n\n\t [web/my_server/my_route]\n\t match = /\n\t route = my.route.handler\n\t \n\n\naio.web.server usage\n--------------------\n\n\nConfiguration\n-------------\n\nTo set up the web server, we need to:\n\n- add \"aio.web.server\" to aio:modules initialize the web server\n- add a \"server/SERVERNAME\" section to create the http server\n- add a \"web/SERVERNAME/ROUTENAME\" to create a route\n\nLets create a basic web server configuration\n \n>>> web_server_config = \"\"\"\n... [aio]\n... log_level = ERROR\n... modules = aio.web.server\n... \n... [server/server_name]\n... factory = aio.web.server.factory\n... port = 7070\n... \n... [web/server_name/route_name]\n... match = /\n... route = aio.web.server.tests._example_handler\n... \"\"\" \n\nNow lets create a route and make it importable\n \n>>> import aiohttp\n>>> import aio.web.server\n\n>>> @aio.web.server.route\n... def route_handler(route):\n... return aiohttp.web.Response(body=b\"Hello, web world\") \n\n>>> import aio.web.server.tests\n>>> aio.web.server.tests._example_handler = route_handler\n\n\nLets set up a test to run the server and request a web page\n \n>>> from aio.app.runner import runner \n>>> import aio.testing\n\n>>> @aio.testing.run_forever(sleep=1)\n... def run_web_server(config, request_page=\"http://localhost:7070\"):\n... runner(['run'], config_string=config)\n... \n... def call_web_server():\n... result = yield from (\n... yield from aiohttp.request(\n... \"GET\", request_page)).read()\n... \n... print(result.decode())\n... \n... return call_web_server\n\nAnd run the test\n \n>>> run_web_server(web_server_config) \nHello, web world\n\nWe can access the aiohttp web app by name\n\n>>> import aio.web.server\n>>> web_app = aio.web.server.apps['server_name']\n>>> web_app\n\n\n>>> web_app['name']\n'server_name'\n\nAnd we can access the jinja environment for the web app\n\n>>> import aiohttp_jinja2\n>>> jinja_env = aiohttp_jinja2.get_env(web_app)\n>>> jinja_env\n\n\nWe dont have any templates registered yet\n\n>>> jinja_env.list_templates()\n[]\n \nLet's clear the web apps, this will also call aio.app.clear()\n\n>>> aio.web.server.clear()\n>>> aio.web.server.apps\n{}\n\n>>> print(aio.app.config, aio.app.signals)\nNone None\n\n \nWeb app modules\n---------------\n\nBy default template resources are registered for any modules listed in aio:modules\n\n>>> config = \"\"\"\n... [aio]\n... modules = aio.web.server\n... aio.web.server.tests\n... \n... [server/server_name]\n... factory = aio.web.server.factory\n... port = 7070 \n... \"\"\" \n\nLets create a test to run the server and print the list of installed jinja templates\n\n>>> @aio.testing.run_forever(sleep=1)\n... def run_server_print_templates(config_string):\n... runner(['run'], config_string=config_string)\n... \n... def print_templates():\n... web_app = aio.web.server.apps['server_name']\n... print(\n... [x for x in\n... aiohttp_jinja2.get_env(\n... web_app).list_templates(extensions=[\"html\"])])\n... aio.web.server.clear()\n... \n... return print_templates\n\nThe aio.web.server.tests module has 2 html templates\n \n>>> run_server_print_templates(config)\n['fragments/test_fragment.html', 'test_template.html']\n \nWe can set the modules for all web apps in the aio/web:modules option\n\nThis will override the setting in aio:modules\n\n>>> config = \"\"\"\n... [aio]\n... modules = aio.web.server\n... aio.web.server.tests\n... \n... [aio/web]\n... modules = aio.web.server\n... \n... [server/server_name]\n... factory = aio.web.server.factory\n... port = 7070 \n... \"\"\" \n\n>>> run_server_print_templates(config)\n[]\n\nOr you can set the modules in the web/*SERVER_NAME*:modules option.\n\nThis will override the setting in both aio/web:modules and aio:modules\n \n>>> config = \"\"\"\n... [aio]\n... modules = aio.web.server\n... aio.web.server.tests\n... \n... [aio/web]\n... modules = aio.web.server\n... \n... [web/server_name]\n... modules = aio.web.server.tests\n... \n... [server/server_name]\n... factory = aio.web.server.factory\n... port = 7070 \n... \"\"\" \n\n>>> run_server_print_templates(config)\n['fragments/test_fragment.html', 'test_template.html']\n\nRoutes\n------\n\n>>> config_template = \"\"\"\n... [aio]\n... modules = aio.web.server\n... aio.web.server.tests\n... log_level: ERROR\n... \n... [server/server_name]\n... factory: aio.web.server.factory\n... port: 7070\n... \n... [web/server_name/route_name]\n... match = /\n... route = aio.web.server.tests._example_route_handler\n... \"\"\"\n\nRoute functions must be decorated with aio.server.route, and receive a aio.server.Route object\n\nThe route object has a request property and a config property containing the routes configuration\n\n>>> @aio.web.server.route(\"test_template.html\") \n... def route_handler(route):\n... return {\n... 'message': 'Hello, world at %s from match(%s) handled by: %s' % (\n... route.request.path, route.config['match'], route.config['route'])}\n\n>>> aio.web.server.tests._example_route_handler = route_handler\n\n>>> run_web_server(config_template)\n\n \n Hello, world at / from match(/) handled by: aio.web.server.tests._example_route_handler\n \n\n \n>>> aio.web.server.clear()\n\n\nStatic directory\n----------------\n\nThe web/*SERVER_NAME* section takes a static_url and a static_dir option for hosting static files\n\n>>> config_static = \"\"\"\n... [aio]\n... log_level: ERROR\n... modules = aio.web.server \n... \n... [server/test]\n... factory: aio.web.server.factory\n... port: 7070\n... \n... [web/test]\n... static_url: /static\n... static_dir: %s\n... \"\"\"\n\n>>> import os\n>>> import tempfile\n\nLets create a temporary directory and add a css file to it\n \n>>> with tempfile.TemporaryDirectory() as tmp:\n... with open(os.path.join(tmp, \"test.css\"), 'w') as cssfile:\n... result = cssfile.write(\"body {background: black}\")\n... \n... run_web_server(\n... config_static % tmp,\n... request_page=\"http://localhost:7070/static/test.css\") \nbody {background: black}\n\n>>> aio.web.server.clear()\n \n\nTemplate filters\n----------------\n\nYou can configure jinja filters by adding them to the aio/web:filters option\n\n\n>>> config = \"\"\"\n... [aio]\n... log_level: ERROR\n... modules = aio.web.server \n... \n... [server/server_name]\n... factory: aio.web.server.factory\n... port: 7070\n... \n... [aio/web]\n... filters = example_filter aio.web.server.tests._example_filter\n... \"\"\"\n\nThe filter is *not* called in a coroutine\n\n>>> def filter(value, *la):\n... return value\n\n>>> aio.web.server.tests._example_filter = filter\n\n>>> @aio.testing.run_forever(sleep=1)\n... def run_server_check_filter(config_string):\n... runner(['run'], config_string=config_string)\n... \n... def check_filter():\n... web_app = aio.web.server.apps['server_name']\n... env = aiohttp_jinja2.get_env(web_app)\n... \n... if \"example_filter\" in env.filters.keys():\n... print(\"example_filter is in the jinja environment!\")\n... \n... return check_filter\n\n\n>>> run_server_check_filter(config)\nexample_filter is in the jinja environment!\n\n>>> aio.web.server.clear()\n\nYou can also add filters to the the web/server_name section, this will override the setting in aio/web\n\n>>> config = \"\"\"\n... [aio]\n... log_level: ERROR\n... modules = aio.web.server \n... \n... [server/server_name]\n... factory: aio.web.server.factory\n... port: 7070\n... \n... [aio/web]\n... filters = example_filter aio.web.server.tests._example_filter\n... \n... [web/server_name]\n... filters = example_filter_2 aio.web.server.tests._example_filter\n... \"\"\"\n\n>>> @aio.testing.run_forever(sleep=1)\n... def run_server_check_filter(config_string):\n... runner(['run'], config_string=config_string)\n... \n... def check_filter():\n... web_app = aio.web.server.apps['server_name']\n... env = aiohttp_jinja2.get_env(web_app)\n... \n... if \"example_filter\" not in env.filters.keys():\n... print(\"example_filter is not in the jinja environment!\")\n... \n... if \"example_filter_2\" in env.filters.keys():\n... print(\"example_filter_2 is in the jinja environment!\")\n... \n... return check_filter\n\n\n>>> run_server_check_filter(config)\nexample_filter is not in the jinja environment!\nexample_filter_2 is in the jinja environment!\n\n\n>>> aio.web.server.clear()", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/phlax/aio.web.server", "keywords": "", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "aio.web.server", "package_url": "https://pypi.org/project/aio.web.server/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/aio.web.server/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/phlax/aio.web.server" }, "release_url": "https://pypi.org/project/aio.web.server/0.1.3/", "requires_dist": null, "requires_python": null, "summary": "Web server for the aio asyncio framework", "version": "0.1.3" }, "last_serial": 1563814, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "862463e92c513aaaa2e83d48bb84aab7", "sha256": "ca2e9799f5d5b33f03911f0245076597009490eb811947d5480487249971d764" }, "downloads": -1, "filename": "aio.web.server-0.0.10.tar.gz", "has_sig": false, "md5_digest": "862463e92c513aaaa2e83d48bb84aab7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10651, "upload_time": "2015-05-23T21:09:04", "url": "https://files.pythonhosted.org/packages/78/38/78c23dd3a642b93c754b0670182e3c3618b0b648944a2cfb77d43f3396fb/aio.web.server-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "4f83d1bc3f4408761ae2918e5321674f", "sha256": "f3f2fa72e9ade147dffcac0d9b007fce9c3edf46d684d70270c8ca902b89c452" }, "downloads": -1, "filename": "aio.web.server-0.0.11.tar.gz", "has_sig": false, "md5_digest": "4f83d1bc3f4408761ae2918e5321674f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10633, "upload_time": "2015-05-23T22:41:26", "url": "https://files.pythonhosted.org/packages/c1/5d/5a11de761a2195cbef876299ca878885490a7704705175383cd8b2c599ca/aio.web.server-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "3edd7e50c4df9897f9460a23c71df915", "sha256": "13507bad7384e68bd73adc4688a97d963159e7ccae375b4687c793ad3dfd1892" }, "downloads": -1, "filename": "aio.web.server-0.0.12.tar.gz", "has_sig": false, "md5_digest": "3edd7e50c4df9897f9460a23c71df915", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10807, "upload_time": "2015-05-24T00:03:35", "url": "https://files.pythonhosted.org/packages/ed/08/0187a16e6de5f37806eff0884bb464a7d753633151a07a9db27d68c3143c/aio.web.server-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "312a5fa76739bc7ad5bca3ed96578163", "sha256": "200026225b7c93ae213a10db3486b51544117c7daa6f4870d3039576d59451d2" }, "downloads": -1, "filename": "aio.web.server-0.0.13.tar.gz", "has_sig": false, "md5_digest": "312a5fa76739bc7ad5bca3ed96578163", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11059, "upload_time": "2015-05-24T13:19:18", "url": "https://files.pythonhosted.org/packages/6b/09/be88920c8691474683dfba354b9e3e3b0a9ca541559be5540a23b3822d9a/aio.web.server-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "be74070f87f442a2601ba94696f8cc78", "sha256": "fb85c2befafa9430d3dfec77d768b8476c9d6e015e3e147ec860ee43de894b06" }, "downloads": -1, "filename": "aio.web.server-0.0.14.tar.gz", "has_sig": false, "md5_digest": "be74070f87f442a2601ba94696f8cc78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11052, "upload_time": "2015-05-24T13:24:45", "url": "https://files.pythonhosted.org/packages/fa/40/a5bd024d1039b90c8aede32419ffa2247574dc6a774fc16c95503f6b9812/aio.web.server-0.0.14.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9e123ef19b62b29d7aff03044224d544", "sha256": "c721f82154891ab7b632a156c45f69c405cb26b4e537f57cf62aad6802ed1e54" }, "downloads": -1, "filename": "aio.web.server-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9e123ef19b62b29d7aff03044224d544", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7465, "upload_time": "2015-05-22T18:15:24", "url": "https://files.pythonhosted.org/packages/c3/79/86e63ec7257d0861a0cf416303796d515d178b69ee01b596bc04bae71172/aio.web.server-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "c35e16217f9e698458b5d9e22cb66c51", "sha256": "3134fcd3bc4d567916dd7f5dda45aca0df38066ae293bf0fc5262cb4f82fe158" }, "downloads": -1, "filename": "aio.web.server-0.0.3.tar.gz", "has_sig": false, "md5_digest": "c35e16217f9e698458b5d9e22cb66c51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7475, "upload_time": "2015-05-22T18:21:04", "url": "https://files.pythonhosted.org/packages/d8/16/0d6d2db38da6e82fdcc7d161a07b974a40de0952e6480e86f36b12938fde/aio.web.server-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "cdef157e52b081a232c55051b4ac6682", "sha256": "32f37ed68cfb2c11b3cd25a5114b3eecbce7c321a8e49e1ca3a919473dcf6781" }, "downloads": -1, "filename": "aio.web.server-0.0.4.tar.gz", "has_sig": false, "md5_digest": "cdef157e52b081a232c55051b4ac6682", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7476, "upload_time": "2015-05-22T18:23:09", "url": "https://files.pythonhosted.org/packages/eb/04/e50d66c4cc44baa5439651e30fa46f5a5393bffb35b72e64012fd94ee2ba/aio.web.server-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "7b417139901d1880c31715c6a534e2ce", "sha256": "3c599623ae6151c6003a5847350b3726c2e37a0a130b244e5080f28cb0c91d28" }, "downloads": -1, "filename": "aio.web.server-0.0.5.tar.gz", "has_sig": false, "md5_digest": "7b417139901d1880c31715c6a534e2ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7483, "upload_time": "2015-05-22T19:19:51", "url": "https://files.pythonhosted.org/packages/f4/b5/653e21db24d0e0b226913f66827ff00c529686c2d36255dfe98e3b216efc/aio.web.server-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "79ce8a2436ef639d6008863c8a625b1c", "sha256": "82b9e6da27c8fa481ced210ad523acb3387b925d18efb235d17fa6d0b78b440c" }, "downloads": -1, "filename": "aio.web.server-0.0.6.tar.gz", "has_sig": false, "md5_digest": "79ce8a2436ef639d6008863c8a625b1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7775, "upload_time": "2015-05-22T22:26:13", "url": "https://files.pythonhosted.org/packages/d3/df/91b058f82abcdc933dfcb472fe3cf49f868004cebb7e5c635d521b6fd881/aio.web.server-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "f25b12aef7e99804e4e311d10abd210b", "sha256": "3f57264347d3bb71beef8f9cb9691bfc661057231ed62ea79e93dd6b63d1c07f" }, "downloads": -1, "filename": "aio.web.server-0.0.7.tar.gz", "has_sig": false, "md5_digest": "f25b12aef7e99804e4e311d10abd210b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8727, "upload_time": "2015-05-23T01:09:35", "url": "https://files.pythonhosted.org/packages/a1/8a/518514bf56844993b3a1a9628219205a7ac204452f03a1b8a7d69ba2e018/aio.web.server-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "6f8d532d59b552dee32334bdf556b700", "sha256": "ce4029f8805c12a21fac336ebf084e7e4540ddc7cc7faf9c36d59ec57ddcca3e" }, "downloads": -1, "filename": "aio.web.server-0.0.8.tar.gz", "has_sig": false, "md5_digest": "6f8d532d59b552dee32334bdf556b700", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11537, "upload_time": "2015-05-23T15:18:10", "url": "https://files.pythonhosted.org/packages/00/fa/7aed0b44e2ff0694e52905dcf555b2bef656b40e89a831cb9c4b81ff5fd8/aio.web.server-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "581c2d32a3d97f837d9d7244b7361393", "sha256": "9888651bff1e2cac0b0b5bcacea1d4ad6471a0364bc6e8fe64dfa38b84593d4f" }, "downloads": -1, "filename": "aio.web.server-0.0.9.tar.gz", "has_sig": false, "md5_digest": "581c2d32a3d97f837d9d7244b7361393", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10349, "upload_time": "2015-05-23T19:26:04", "url": "https://files.pythonhosted.org/packages/7d/31/be990ee16df74a15d017781c10732e52ca254dd0cfbb04d0ea00be0a4ba1/aio.web.server-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "07af31cb4966297e67894e0b73064a63", "sha256": "b7bb5abf3955a9699299fc97d2d31ba8940a9074355ef1ab5f81ed03a8a0a408" }, "downloads": -1, "filename": "aio.web.server-0.1.0.tar.gz", "has_sig": false, "md5_digest": "07af31cb4966297e67894e0b73064a63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11040, "upload_time": "2015-05-24T21:42:01", "url": "https://files.pythonhosted.org/packages/66/f6/0ccabafc52e4cb54e2b3f45e7111554ec0de5cdc0aa0c8ef958aadff5463/aio.web.server-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d594351afb01879233d1db0002216ccd", "sha256": "d537814481eab17a57b91f529da05ee924c60ad80b93ad7e65edbf2f5d353a74" }, "downloads": -1, "filename": "aio.web.server-0.1.1.tar.gz", "has_sig": false, "md5_digest": "d594351afb01879233d1db0002216ccd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11370, "upload_time": "2015-05-25T17:53:59", "url": "https://files.pythonhosted.org/packages/67/07/94be9d5d1d7c56f5baacac3f0bc1a4cb3c6f04715a6999b69227d471e311/aio.web.server-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "d289d9cb0e7e6d00cc65a08ead3ee482", "sha256": "194b82533ac2dc5b8758fbcf49371926102259e5959e2723091703e81f324c9d" }, "downloads": -1, "filename": "aio.web.server-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d289d9cb0e7e6d00cc65a08ead3ee482", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11729, "upload_time": "2015-05-25T21:20:23", "url": "https://files.pythonhosted.org/packages/7f/9f/0d42f82c59edd2b3bec7952e1174352a61bc73b2a8a5d504e80d2ba5d6ad/aio.web.server-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a31839c4f98a71fe27e76223b17c585b", "sha256": "c25421bcd2ac2328df7c450d476308bbbfc27fa11af32247f825265df9362686" }, "downloads": -1, "filename": "aio.web.server-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a31839c4f98a71fe27e76223b17c585b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12116, "upload_time": "2015-05-26T22:16:01", "url": "https://files.pythonhosted.org/packages/1a/d4/de3725065cd3b483052d41f680b074a05d68bb4b4baa964b8a985aa216c2/aio.web.server-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a31839c4f98a71fe27e76223b17c585b", "sha256": "c25421bcd2ac2328df7c450d476308bbbfc27fa11af32247f825265df9362686" }, "downloads": -1, "filename": "aio.web.server-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a31839c4f98a71fe27e76223b17c585b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12116, "upload_time": "2015-05-26T22:16:01", "url": "https://files.pythonhosted.org/packages/1a/d4/de3725065cd3b483052d41f680b074a05d68bb4b4baa964b8a985aa216c2/aio.web.server-0.1.3.tar.gz" } ] }