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.python.org/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.5 (04-22-2016)

  • Fix command line arg parsing #797

0.21.4 (03-12-2016)

  • Fix ResourceAdapter: dont add method to allowed if resource is not match #826

  • Fix Resouce: append found method to returned allowed methods

0.21.2 (02-16-2016)

  • Fix a regression: support for handling ~/path in static file routes was broken #782

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.5.tar.gz (529.0 kB view details)

Uploaded Source

Built Distributions

aiohttp-0.21.5-cp35-cp35m-win_amd64.whl (243.8 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.21.5-cp35-cp35m-win32.whl (235.4 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.21.5-cp34-cp34m-win_amd64.whl (241.3 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-0.21.5-cp34-cp34m-win32.whl (235.3 kB view details)

Uploaded CPython 3.4m Windows x86

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.21.5.tar.gz
Algorithm Hash digest
SHA256 bac5c883721e0818e405597d2778f08a38cc097df01f574462de2cc4f8090559
MD5 8e10aeb6fb49c819a7a88de1b9ef281b
BLAKE2b-256 189bab3d2a435d39cd1e7244527fd3642c625197da548a3a3ae8123abc7e7483

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.5-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 fab71a681ef8233369ced34d0ff4fd86ef70a82cdf1cb5d948f208b3cc35b503
MD5 ea5ad57e10bbff3c87e2dae6d6792c7c
BLAKE2b-256 490cee9136ef577c6e98b6d919785e88318067852ef0c74dc6db9a6722d92830

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.5-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 7650fad64e61e2ae42a02cf4568341b336a032cb86beea780df6fb2be4a8361e
MD5 98a3635266a4b0c5596c3ddc3a348cdc
BLAKE2b-256 e7a1db9c81d58480bbac6cd264724dc745f1d5a5f181705c7802b2d33fce3599

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.5-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 f29a813b286ef50f2a2634bb53b18fb54683b9a6a8c8bb8d39116759d8c5e0a9
MD5 40344451cbdead29cf17a86e41875280
BLAKE2b-256 a9b43c1f84829ddc79aa5cca8979306ac8ae380f16e6bf31df4452bdf3c76037

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.5-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 885c9c6990a8db68f623d77c002051fe2ae688e19d5d9fa4a7deca0421e7dfcc
MD5 c87e7db7dbd7353750733e30885b9412
BLAKE2b-256 2106721aa7e0c9de0da9a6d0c45157041a652db1274e17b25f0a124b0c517160

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