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.22.0 (XX-XX-XXXX)

  • Fix bug in serving static directory #803

  • Fix command line arg parsing #797

  • Fix a documentation chapter about cookie usage #790

  • Handle empty body with gzipped encoding #758

  • Support 451 Unavailable For Legal Reasons http status #697

  • Fix Cookie share example and few small typos in docs #817

  • UrlDispatcher.add_route with partial coroutine handler #814

  • Optional support for aiodns #728

  • Add ServiceRestart and TryAgainLater websocket close codes #828

  • Fix prompt message for web.run_app #832

  • Allow to pass None as a timeout value to disable timeout logic #834

0.21.6 (05-05-2016)

  • Drop initial query parameters on redirects #853

0.21.5 (03-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.22.0a0.tar.gz (452.3 kB view details)

Uploaded Source

Built Distributions

aiohttp-0.22.0a0-cp35-cp35m-win_amd64.whl (123.1 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.22.0a0-cp35-cp35m-win32.whl (121.9 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.22.0a0-cp34-cp34m-win_amd64.whl (120.9 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-0.22.0a0-cp34-cp34m-win32.whl (120.6 kB view details)

Uploaded CPython 3.4m Windows x86

File details

Details for the file aiohttp-0.22.0a0.tar.gz.

File metadata

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

File hashes

Hashes for aiohttp-0.22.0a0.tar.gz
Algorithm Hash digest
SHA256 5c6f1d5d62117d6962cf046a6490fa7798a2939629bf289694d3178ce6c03349
MD5 893f6dadb4aace809be7bde537a69ecb
BLAKE2b-256 8810ba7c03e3cb827efa05cb57e3969a1de002d61497b5941f691af970f07c48

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0a0-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0a0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 31a59f8b76cde1ee89e26edcf9da3b89e0920024f97720806ef194ec5ebaed68
MD5 a8c8964919ffa47e05d0e4a764853902
BLAKE2b-256 de7765d02f59114488ffcb934d9d0b2e6305a6731241aae563bde8938060f945

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0a0-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0a0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 0b1fdce93dfc714c9667de93073f38931337d34877895138674770c7bf31b145
MD5 55ec73c263f7f54cc5116ac34e1a4024
BLAKE2b-256 cb600a6cbd3547fdea6e1e406d1d6a523d7cff4c9e4d64f08702674ae8285e2c

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0a0-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0a0-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 eea2b0b8a0957bc76bdbd1212794c474e5ccf67147fd115a62c2278d9e29579c
MD5 1392f6d5e95f394c28dc146d5af020f1
BLAKE2b-256 e031cfed7ee880d25710b6ccdb50c23c3ad106540925a3edda4c6b18b8953544

See more details on using hashes here.

File details

Details for the file aiohttp-0.22.0a0-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for aiohttp-0.22.0a0-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 ea8e1dd3eb8b06ff15cdbecdd15db9eb54920546ba78dd09ec362381fbf5d8b1
MD5 9de4dbc4914fbdb7024ab241d96dee96
BLAKE2b-256 0655641b213304816ffb9fdedc0de9e97d19716d66fe29299fc87aa94b491dc2

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