Skip to main content

http client/server for asyncio

Project description

http client/server for asyncio

aiohttp logo https://travis-ci.org/KeepSafe/aiohttp.svg?branch=master https://coveralls.io/repos/KeepSafe/aiohttp/badge.svg?branch=master&service=github https://badge.fury.io/py/aiohttp.svg

Features

  • Supports both client and server side of HTTP protocol.

  • Supports both client and server Web-Sockets out-of-the-box.

  • Web-server has middlewares and pluggable routing.

Getting started

Client

To retrieve something from the web:

import aiohttp
import asyncio

async def fetch(session, url):
    with aiohttp.Timeout(10):
        async with session.get(url) as response:
            return await response.text()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    with aiohttp.ClientSession(loop=loop) as session:
        html = loop.run_until_complete(
            fetch(session, 'http://python.org'))
        print(html)

Server

This is simple usage example:

from aiohttp import web

async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(body=text.encode('utf-8'))

async def wshandler(request):
    ws = web.WebSocketResponse()
    await ws.prepare(request)

    async for msg in ws:
        if msg.tp == web.MsgType.text:
            ws.send_str("Hello, {}".format(msg.data))
        elif msg.tp == web.MsgType.binary:
            ws.send_bytes(msg.data)
        elif msg.tp == web.MsgType.close:
            break

    return ws


app = web.Application()
app.router.add_route('GET', '/echo', wshandler)
app.router.add_route('GET', '/{name}', handle)

web.run_app(app)

Note: examples are written for Python 3.5+ and utilize PEP-492 aka async/await. If you are using Python 3.4 please replace await with yield from and async def with @coroutine e.g.:

async def coro(...):
    ret = await f()

shoud be replaced by:

@asyncio.coroutine
def coro(...):
    ret = yield from f()

Documentation

http://aiohttp.readthedocs.org/

Discussion list

aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs

Requirements

Optionally you may install cChardet library: https://pypi-hypernode.com/pypi/cchardet/1.0.0

License

aiohttp is offered under the Apache 2 license.

Source code

The latest developer version is available in a github repository: https://github.com/KeepSafe/aiohttp

Benchmarks

If you are interested in by efficiency, AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks

CHANGES

0.21.1 (02-10-2016)

  • Make new resources classes public #767

  • Add router.resources() view

  • Fix cmd-line parameter names in doc

0.21.0 (02-04-2016)

  • Introduce on_shutdown signal #722

  • Implement raw input headers #726

  • Implement web.run_app utility function #734

  • Introduce on_cleanup signal

  • Deprecate Application.finish() / Application.register_on_finish() in favor of on_cleanup.

  • Get rid of bare aiohttp.request(), aiohttp.get() and family in docs #729

  • Deprecate bare aiohttp.request(), aiohttp.get() and family #729

  • Refactor keep-alive support #737:

    • Enable keepalive for HTTP 1.0 by default

    • Disable it for HTTP 0.9 (who cares about 0.9, BTW?)

    • For keepalived connections

      • Send Connection: keep-alive for HTTP 1.0 only

      • don’t send Connection header for HTTP 1.1

    • For non-keepalived connections

      • Send Connection: close for HTTP 1.1 only

      • don’t send Connection header for HTTP 1.0

  • Add version parameter to ClientSession constructor, deprecate it for session.request() and family #736

  • Enable access log by default #735

  • Deprecate app.router.register_route() (the method was not documented intentionally BTW).

  • Deprecate app.router.named_routes() in favor of app.router.named_resources()

  • route.add_static accepts pathlib.Path now #743

  • Add command line support: $ python -m aiohttp.web package.main #740

  • FAQ section was added to docs. Enjoy and fill free to contribute new topics

  • Add async context manager support to ClientSession

  • Document ClientResponse’s host, method, url properties

  • Use CORK/NODELAY in client API #748

  • ClientSession.close and Connector.close are coroutines now

  • Close client connection on exception in ClientResponse.release()

  • Allow to read multipart parts without content-length specified #750

  • Add support for unix domain sockets to gunicorn worker #470

  • Add test for default Expect handler #601

  • Add the first demo project

  • Rename loader keyword argument in web.Request.json method. #646

  • Add local socket binding for TCPConnector #678

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

aiohttp-0.21.1.tar.gz (528.2 kB view details)

Uploaded Source

Built Distributions

aiohttp-0.21.1-cp35-cp35m-win_amd64.whl (243.4 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.21.1-cp35-cp35m-win32.whl (235.0 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.21.1-cp34-cp34m-win_amd64.whl (240.9 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-0.21.1-cp34-cp34m-win32.whl (235.0 kB view details)

Uploaded CPython 3.4m Windows x86

File details

Details for the file aiohttp-0.21.1.tar.gz.

File metadata

  • Download URL: aiohttp-0.21.1.tar.gz
  • Upload date:
  • Size: 528.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aiohttp-0.21.1.tar.gz
Algorithm Hash digest
SHA256 e62d4b7e9481cb31bf7460fbfe769acdfc29cb9f63ef99aa56d3855dc02e1b24
MD5 4a0ca375777a388f96038a3a83477a6f
BLAKE2b-256 03c26af04c29a7856f985e81116b6341612889f2789ed654a1166aa217026a4d

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-0.21.1-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 2f85c7de51354edff0edfe63827cc8b7192ea32451936615bb57ca6393298d88
MD5 4319cdeb3e3a0b02231b505a8d230a75
BLAKE2b-256 f11350778cc8f3bfcb70394c22e08b4483b2a0c88b59ee614c04c6c6c98562ba

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-0.21.1-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 011dd6bc6573a4ef7f1c8332c4df7335cb45b68f01745331185a4331becc1be6
MD5 2ea4bf74875080705ff990c9df72f6d3
BLAKE2b-256 a4dc75875116b6a458598fdd21bfe38c260ad29374c68d7dacd13ec82c4b9ab1

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-0.21.1-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 03d1055b7e12da708008f6e36ce3930ac83cb3cb2d2961e30a53eeb2c5c452da
MD5 4e01738af772cc752df2cf82fa249627
BLAKE2b-256 6044e45f679db59372f9495b3fb48a388adef779d85b6142edb0acbd34bdce3d

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-0.21.1-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.21.1-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 bc3c13e566d3aa7d7096445b915c7fbe0d5344f47b2b6a8521cf2277272cb91c
MD5 965c7ec89020c6f88d6fcdc1dcaf6aeb
BLAKE2b-256 64c8800d2ca0202f611390345a424be3f58b9c5532d66acb0fd262adb48f90c7

See more details on using hashes here.

Provenance

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