Skip to main content

HTTP server for the aio asyncio framework

Project description

aio.http.server

HTTP server for the aio asyncio framework

Build status

https://travis-ci.org/phlax/aio.http.server.svg?branch=master

Installation

Requires python >= 3.4

Install with:

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”

[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

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

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'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aio.http.server-0.1.1.tar.gz (4.5 kB view details)

Uploaded Source

File details

Details for the file aio.http.server-0.1.1.tar.gz.

File metadata

File hashes

Hashes for aio.http.server-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c6a5a2e3b929aa1d9ca59557f07214f388f01475b621f8a2489ef18b84bad087
MD5 aa2d810bfe5e3f334901446224388519
BLAKE2b-256 6e3fa127eced6e5c629064cbea2ce5e9ca692c83014a61fa23dc36d4ea4d71f9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page