{ "info": { "author": "Victor Kovtun", "author_email": "hellysmile@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "aiohttp_request\n===============\n\n:info: Global request for aiohttp server\n\n.. image:: https://travis-ci.org/hellysmile/aiohttp_request.svg?branch=master\n :target: https://travis-ci.org/hellysmile/aiohttp_request\n\n.. image:: https://img.shields.io/pypi/v/aiohttp_request.svg\n :target: https://pypi.python.org/pypi/aiohttp_request\n\n.. image:: https://codecov.io/gh/hellysmile/aiohttp_request/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/hellysmile/aiohttp_request\n\nInstallation\n------------\n\n.. code-block:: shell\n\n pip install aiohttp_request\n\nUsage\n-----\n\n.. code-block:: python\n\n import asyncio\n\n from aiohttp import web\n from aiohttp_request import ThreadContext, middleware_factory, grequest, get_request\n\n\n def thread():\n assert grequest['sense'] == 42\n\n\n async def task():\n # grequest is `lazy` version of request\n assert grequest['sense'] == 42\n\n loop = asyncio.get_event_loop()\n # works for threads as well with ThreadContext\n await loop.run_in_executor(None, ThreadContext(thread))\n\n\n async def hello(request):\n # get_request is on-demand function to get current request\n assert get_request() is request\n\n request['sense'] = 42\n\n # asyncio.Task is supported\n await asyncio.ensure_future(task())\n\n return web.Response(text=\"Hello, world\")\n\n\n app = web.Application(middlewares=[middleware_factory()])\n app.add_routes([web.get('/', hello)])\n web.run_app(app)\n\nPython 3.7+ is required, there is no way to support older python versions!!!\n\nNotes\n-----\n\nThe library relies on `PEP 567 `_ and its `asyncio support `_\n\naiohttp-request works nicely with threads via `contextvars_executor `_ , no `ThreadContext` is needed\n\n.. code-block:: python\n\n import asyncio\n\n from aiohttp import web\n from aiohttp_request import middleware_factory, grequest\n from contextvars_executor import ContextVarExecutor\n\n\n def thread():\n assert grequest['sense'] == 42\n\n\n async def hello(request):\n request['sense'] = 42\n\n loop = asyncio.get_event_loop()\n await loop.run_in_executor(None, thread)\n\n return web.Response(text=\"Hello, world\")\n\n\n loop = asyncio.get_event_loop()\n loop.set_default_executor(ContextVarExecutor())\n app = web.Application(middlewares=[middleware_factory()])\n app.add_routes([web.get('/', hello)])\n web.run_app(app)\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/hellysmile/aiohttp_request", "keywords": "aiohttp", "license": "", "maintainer": "", "maintainer_email": "", "name": "aiohttp-request", "package_url": "https://pypi.org/project/aiohttp-request/", "platform": "", "project_url": "https://pypi.org/project/aiohttp-request/", "project_urls": { "Homepage": "https://github.com/hellysmile/aiohttp_request" }, "release_url": "https://pypi.org/project/aiohttp-request/0.0.2/", "requires_dist": null, "requires_python": "", "summary": "Global request for aiohttp server", "version": "0.0.2" }, "last_serial": 4299165, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "2d8e3975882d7b2474f638c8d52c9669", "sha256": "0499529a839d6f6c71ef5fcc60fa5fad87743d7d1abcd2c3b883df14e876aeff" }, "downloads": -1, "filename": "aiohttp_request-0.0.1.tar.gz", "has_sig": false, "md5_digest": "2d8e3975882d7b2474f638c8d52c9669", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2728, "upload_time": "2018-06-30T00:50:44", "url": "https://files.pythonhosted.org/packages/8e/6f/132d3d77feb1234d867fa1e3328d1071b5fc535703bc3be969b554750987/aiohttp_request-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "5c9799878916c88510fc8caf10bcb62e", "sha256": "e17701b995fccb036971bd82e7616e809ccb776bf61084c24f4f3bfbf54fdfbf" }, "downloads": -1, "filename": "aiohttp_request-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5c9799878916c88510fc8caf10bcb62e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2903, "upload_time": "2018-09-22T09:16:35", "url": "https://files.pythonhosted.org/packages/ee/a4/754f0aed1dccf724de3c593c441e9497ec2590ab8f523eba5ad188a307c7/aiohttp_request-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5c9799878916c88510fc8caf10bcb62e", "sha256": "e17701b995fccb036971bd82e7616e809ccb776bf61084c24f4f3bfbf54fdfbf" }, "downloads": -1, "filename": "aiohttp_request-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5c9799878916c88510fc8caf10bcb62e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2903, "upload_time": "2018-09-22T09:16:35", "url": "https://files.pythonhosted.org/packages/ee/a4/754f0aed1dccf724de3c593c441e9497ec2590ab8f523eba5ad188a307c7/aiohttp_request-0.0.2.tar.gz" } ] }