HTTP server for the aio asyncio framework
Project description
aio.http.server
HTTP server for the aio asyncio framework
Build status
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
And save the following into a file named my_example.py
import asyncio
import aiohttp
import aio.app
@aio.app.server.protocol
def protocol(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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file aio.http.server-0.1.3.tar.gz
.
File metadata
- Download URL: aio.http.server-0.1.3.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca83c9e2643fd06a45942416e672307730687d6f28725511cc7200ea645d6ae2 |
|
MD5 | 6b27e0e911c828b6a16cfef9f8cd0547 |
|
BLAKE2b-256 | d44f2666628c467be707eae27d904adac740c31f517a30bc30433be7332bfb46 |