Metadata-Version: 1.1
Name: aio.http.server
Version: 0.1.1
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
        ------------
        
        Requires python >= 3.4
        
        Install with:
        
        .. code:: bash
        
        	  pip install aio.http.server
        
        
        Quick start - Hello world http server
        -------------------------------------
        
        Create a web server that says hello
        
        Save the following into a file "hello.conf"
        
        .. code:: ini
        	  
        	  [server/my_server]
        	  factory = aio.http.server.factory
        	  port = 8080
        	  protocol = my_example.protocol_factory	  
        
        	  
        And save the following into a file named my_example.py
        	  
        .. 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()
        	      	     	      
        
        Run with the aio run command
        
        .. code:: bash
        
        	  aio run -c hello.conf
        
        	  
        
        
        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
        ... """  
        
        We need to decorate the protocol with aio.app.server.protocol
        
        >>> @aio.app.server.protocol
        ... def http_protocol(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
        
        >>> @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
