Metadata-Version: 1.1
Name: aio.http.server
Version: 0.0.5
Summary: HTTP server for the aio asyncio framework
Home-page: http://github.com/phlax/aio.http.server
Author: Ryan Northey
Author-email: ryan@3ca.org.uk
License: GPL
Description: Detailed documentation
        **********************
        
        aio.http.server
        ===============
        
        HTTP server for the aio_ asyncio framework
        
        .. _aio: https://github.com/phlax/aio
        
        
        Build status
        ------------
        
        .. image:: https://travis-ci.org/phlax/aio.http.server.svg?branch=master
        	       :target: https://travis-ci.org/phlax/aio.http.server
        
        
        Installation
        ------------
        Install with:
        
        .. code:: bash
        
        	  pip install aio.http.server
        
        
        Configuration
        -------------
        
        Example configuration for a hello world server
        
        .. code:: ini
        
        	  [server/test]
        	  factory = aio.http.server.factory
        	  protocol = my.example.protocol_factory
        	  port = 8080
        
        
        And the corresponding protocol_factory
        
        .. code:: python
        
        	  import asyncio
        	  import aiohttp
        
        	  @asyncio.coroutine
        	  def protocol_factory(name):
        	      loop = asyncio.get_event_loop()
        	      webapp = aiohttp.web.Application(loop=loop)
        
        	      @asyncio.coroutine
        	      def handle_hello_world(webapp):
        	          return aiohttp.web.Response(body=b"Hello, world")
        
        	      webapp.router.add_route("GET", "/", handle_hello_world)
        	      return webapp.make_handler()
        
        
        Running
        -------
        
        Run with the aio command
        
        .. code:: bash
        
        	  aio run
        
        
        aio.http.server usage
        =====================
        
        
        Configuration
        -------------
        
        Create a server config with the aio.http.server.factory factory and suppressing normal output
        
          >>> config = """
          ... [aio]
          ... log_level = ERROR
          ... 
          ... [server/test]
          ... factory: aio.http.server.factory
          ... port: 7070
          ... """  
        
        
        Running an http server
        ----------------------
        
        By default the http server will respond with a 404 as there are no routes set up
        
          >>> import asyncio
          >>> import aiohttp
          >>> from aio.app.runner import runner
          >>> import aio.testing
        
          >>> @aio.testing.run_forever(sleep=1)
          ... def run_http_server():
          ...     yield from runner(['run'], config_string=config)
          ... 
          ...     def call_http_server():
          ...         result = yield from (
          ...             yield from aiohttp.request(
          ...                "GET", "http://localhost:7070")).read()  
          ...         print(result)
          ... 
          ...     return call_http_server
        
          >>> run_http_server()
          b'404: Not Found'
        
        The server object is accessible from the aio.app.servers[{name}] var
        
          >>> import aio.app
          
          >>> aio.app.servers['test']
          <Server sockets=[<socket.socket...laddr=('0.0.0.0', 7070)...]>
        
        Lets clear the app
        
          >>> aio.app.clear()
          
        
        Running the server with a custom protocol
        -----------------------------------------
        
        If you specify a protocol in the "server/" config, the http server will use that function as a protocol factory.
        
        The function should be a coroutine and is called with the name of the server
        
          >>> config_with_protocol = """
          ... [aio]
          ... log_level = ERROR
          ... 
          ... [server/test]
          ... factory = aio.http.server.factory
          ... protocol = aio.http.server.tests._example_http_protocol
          ... port = 7070
          ... """  
        
          >>> @asyncio.coroutine
          ... def http_protocol_factory(name):
          ...     loop = asyncio.get_event_loop()
          ...     http_app = aiohttp.web.Application(loop=loop)
          ...     http_app['name'] = name
          ... 
          ...     @asyncio.coroutine  
          ...     def handle_hello_world(http_app):
          ...         return aiohttp.web.Response(body=b"Hello, world")
          ... 
          ...     http_app.router.add_route("GET", "/", handle_hello_world)
          ...     return http_app.make_handler()
        
          >>> aio.http.server.tests._example_http_protocol = http_protocol_factory
        
          >>> @aio.testing.run_forever(sleep=1)
          ... def run_http_server():
          ...     yield from runner(['run'], config_string=config_with_protocol)
          ... 
          ...     def call_http_server():
          ...         result = yield from (
          ...             yield from aiohttp.request(
          ...                "GET", "http://localhost:7070")).read()
          ... 
          ...         print(result)
          ... 
          ...     return call_http_server
          
          >>> run_http_server()
          b'Hello, world'
        
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.4
Classifier: Topic :: Software Development :: Libraries :: Python Modules
