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

Uploaded Source

Built Distributions

aiohttp-0.21.4-cp35-cp35m-win_amd64.whl (243.7 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-0.21.4-cp35-cp35m-win32.whl (235.3 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-0.21.4-cp34-cp34m-win_amd64.whl (241.2 kB view details)

Uploaded CPython 3.4m Windows x86-64

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

Uploaded CPython 3.4m Windows x86

File details

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

File metadata

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

File hashes

Hashes for aiohttp-0.21.4.tar.gz
Algorithm Hash digest
SHA256 4a5fcb765bf6d2cbc7d42afedf3d22b9cd0a4d643a870b464ca5b071225976d8
MD5 b6034dab19a414479c4e10161b8ab6d2
BLAKE2b-256 706b0b1362de8b2afe8cb38ddb23158eae9f3530063a937b2c9405f4edd99ffa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.4-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 c11406da49c08f5c4d7afdb15b0570e08f366b933a96f1559413ecc9684173d9
MD5 e0b4ae59ca9290d5d1a4eb4aa43e3ffb
BLAKE2b-256 4f98ce33b74a544b57975be720d3d87978d686c3e0071f9226780e69a32368ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.4-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 b5e4f4367a7f26368a5dd5505e59df7ff35ed8960592d6693178d28fc940f7d8
MD5 ba0361b4d9ab94a90ac045c68a4b90b1
BLAKE2b-256 5048aafcd4bff33dd10a5fca87f21b7011008c7f3fa2fed636778f1d9c22c4bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.4-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 55d431e54c2acef9bf8251f4658c3151d6d3f79cd0d252f2b81d31858cc56078
MD5 3ed5ab8ab99146ec49d30552ad2347cb
BLAKE2b-256 434bc769c72176a7adba26f3e6557e5eaf8a54cca806b6e5e5dfd622dd7f82b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-0.21.4-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 6f93dfaac1adbf4af9fe15c68e9e9cad440dc2e6d23276f9d7b8478940a482d7
MD5 fae555981b2ee7a8ab31e71707bb5ce4
BLAKE2b-256 9043aaea251d54a2d2efd6aa9bed4f540a5c3cd77ff802280a77a3a20b9f6fc4

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