Metadata-Version: 1.2
Name: aiohttp_request
Version: 0.0.2
Summary: Global request for aiohttp server
Home-page: https://github.com/hellysmile/aiohttp_request
Author: Victor Kovtun
Author-email: hellysmile@gmail.com
License: UNKNOWN
Description: aiohttp_request
        ===============
        
        :info: Global request for aiohttp server
        
        .. image:: https://travis-ci.org/hellysmile/aiohttp_request.svg?branch=master
            :target: https://travis-ci.org/hellysmile/aiohttp_request
        
        .. image:: https://img.shields.io/pypi/v/aiohttp_request.svg
            :target: https://pypi.python.org/pypi/aiohttp_request
        
        .. image:: https://codecov.io/gh/hellysmile/aiohttp_request/branch/master/graph/badge.svg
            :target: https://codecov.io/gh/hellysmile/aiohttp_request
        
        Installation
        ------------
        
        .. code-block:: shell
        
            pip install aiohttp_request
        
        Usage
        -----
        
        .. code-block:: python
        
            import asyncio
        
            from aiohttp import web
            from aiohttp_request import ThreadContext, middleware_factory, grequest, get_request
        
        
            def thread():
                assert grequest['sense'] == 42
        
        
            async def task():
                # grequest is `lazy` version of request
                assert grequest['sense'] == 42
        
                loop = asyncio.get_event_loop()
                # works for threads as well with ThreadContext
                await loop.run_in_executor(None, ThreadContext(thread))
        
        
            async def hello(request):
                # get_request is on-demand function to get current request
                assert get_request() is request
        
                request['sense'] = 42
        
                # asyncio.Task is supported
                await asyncio.ensure_future(task())
        
                return web.Response(text="Hello, world")
        
        
            app = web.Application(middlewares=[middleware_factory()])
            app.add_routes([web.get('/', hello)])
            web.run_app(app)
        
        Python 3.7+ is required, there is no way to support older python versions!!!
        
        Notes
        -----
        
        The library relies on `PEP 567 <https://www.python.org/dev/peps/pep-0567/>`_ and its `asyncio support <https://docs.python.org/3.7/library/contextvars.html#asyncio-support>`_
        
        aiohttp-request works nicely with threads via `contextvars_executor <https://github.com/hellysmile/contextvars_executor>`_ , no `ThreadContext` is needed
        
        .. code-block:: python
        
            import asyncio
        
            from aiohttp import web
            from aiohttp_request import middleware_factory, grequest
            from contextvars_executor import ContextVarExecutor
        
        
            def thread():
                assert grequest['sense'] == 42
        
        
            async def hello(request):
                request['sense'] = 42
        
                loop = asyncio.get_event_loop()
                await loop.run_in_executor(None, thread)
        
                return web.Response(text="Hello, world")
        
        
            loop = asyncio.get_event_loop()
            loop.set_default_executor(ContextVarExecutor())
            app = web.Application(middlewares=[middleware_factory()])
            app.add_routes([web.get('/', hello)])
            web.run_app(app)
        
Keywords: aiohttp,request
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=3.7.0
