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

Uploaded Source

Built Distributions

aiohttp-0.21.2-cp35-cp35m-win_amd64.whl (243.6 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.21.2-cp35-cp35m-win32.whl (235.2 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.21.2-cp34-cp34m-win_amd64.whl (241.0 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-0.21.2-cp34-cp34m-win32.whl (235.1 kB view details)

Uploaded CPython 3.4m Windows x86

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.21.2.tar.gz
Algorithm Hash digest
SHA256 991e574309815036ca36889a8917005bb795522acd2ba9cc870e07c260c092b5
MD5 b53e5d6b3e5961b7119f2f500a20904e
BLAKE2b-256 a692fe3c2028709885105f41778d1828199d5d3db8cd7e6a17280f17964a0fc9

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 ec5b3aafef11d170926a852f8b874c69688e76161684069dc2fc777b2d86c259
MD5 4dfa05208a8dbe9ff21db10accd2d938
BLAKE2b-256 4dab0d019f5071e9c3f13d9f208eaa8308ba4e6e4990c7fd4666be066453d003

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 c96c1e980589ccf0a8c139e737ceafca1117ef176df884bc10064d170fb0f7d9
MD5 34ada0e3e96f49a4ea96fc4d7ce4b67e
BLAKE2b-256 567949ffdcfd4334c538d2255841f4656d1c12e9108ad0a485e71923c4490933

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.2-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 3226ae7de905a1a0e0c702d8f29f6d7cff3a6f00b1cf719baf2ac70310747640
MD5 f6c2c358faabbead51e3383e6c806c83
BLAKE2b-256 2143114ad2451446ac6e743927812295d6b874a432bea047ebe0ae1dc44d230f

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.2-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 975be3cd7708d4d69b18bf613d255d8d4ae21064798d9742d8472e0061731677
MD5 c5fca430012d9ede67a2b89bb5d7cad8
BLAKE2b-256 136702af372d70d3b5fd3edfc4a814ea2b2cb4a281886472382e4823c0642bff

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