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://codecov.io/gh/KeepSafe/aiohttp/branch/master/graph/badge.svg 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, loop=session.loop):
        async with session.get(url) as response:
            return await response.text()

async def main(loop):
    async with aiohttp.ClientSession(loop=loop) as session:
        html = await fetch(session, 'http://python.org')
        print(html)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop))

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(text=text)

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

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

    return ws


app = web.Application()
app.router.add_get('/echo', wshandler)
app.router.add_get('/', handle)
app.router.add_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()

should be replaced by:

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

Documentation

https://aiohttp.readthedocs.io/

Discussion list

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

Requirements

Optionally you may install the cChardet and aiodns libraries (highly recommended for sake of speed).

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

1.1.5 (2016-11-16)

  • Fix static file serving in fallback mode #1401

1.1.4 (2016-11-14)

  • Make TestServer.make_url compatible with yarl.URL #1389

  • Generate informative exception on redirects from server which doesn’t provide redirection headers #1396

1.1.3 (2016-11-10)

  • Support root resources for sub-applications #1379

1.1.2 (2016-11-08)

  • Allow starting variables with an underscore #1379

  • Properly process UNIX sockets by gunicorn worker #1375

  • Fix ordering for FrozenList

  • Don’t propagate pre and post signals to sub-application #1377

1.1.1 (2016-11-04)

  • Fix documentation generation #1120

1.1.0 (2016-11-03)

  • Drop deprecated WSClientDisconnectedError (BACKWARD INCOMPATIBLE)

  • Use yarl.URL in client API. The change is 99% backward compatible but ClientResponse.url is an yarl.URL instance now. #1217

  • Close idle keep-alive connections on shutdown #1222

  • Modify regex in AccessLogger to accept underscore and numbers #1225

  • Use yarl.URL in web server API. web.Request.rel_url and web.Request.url are added. URLs and templates are percent-encoded now. #1224

  • Accept yarl.URL by server redirections #1278

  • Return yarl.URL by .make_url() testing utility #1279

  • Properly format IPv6 addresses by aiohttp.web.run_app #1139

  • Use yarl.URL by server API #1288

    • Introduce resource.url_for(), deprecate resource.url().

    • Implement StaticResource.

    • Inherit SystemRoute from AbstractRoute

    • Drop old-style routes: Route, PlainRoute, DynamicRoute, StaticRoute, ResourceAdapter.

  • Revert resp.url back to str, introduce resp.url_obj #1292

  • Raise ValueError if BasicAuth login has a “:” character #1307

  • Fix bug when ClientRequest send payload file with opened as open(‘filename’, ‘r+b’) #1306

  • Enhancement to AccessLogger (pass extra dict) #1303

  • Show more verbose message on import errors #1319

  • Added save and load functionality for CookieJar #1219

  • Added option on StaticRoute to follow symlinks #1299

  • Force encoding of application/json content type to utf-8 #1339

  • Fix invalid invocations of errors.LineTooLong #1335

  • Websockets: Stop async for iteration when connection is closed #1144

  • Ensure TestClient HTTP methods return a context manager #1318

  • Raise ClientDisconnectedError to FlowControlStreamReader read function if ClientSession object is closed by client when reading data. #1323

  • Document deployment without Gunicorn #1120

  • Add deprecation warning for MD5 and SHA1 digests when used for fingerprint of site certs in TCPConnector. #1186

  • Implement sub-applications #1301

  • Don’t inherit web.Request from dict but implement MutableMapping protocol.

  • Implement frozen signals

  • Don’t inherit web.Application from dict but implement MutableMapping protocol.

  • Support freezing for web applications

  • Accept access_log parameter in web.run_app, use None to disable logging

  • Don’t flap tcp_cork and tcp_nodelay in regular request handling. tcp_nodelay is still enabled by default.

  • Improve performance of web server by removing premature computing of Content-Type if the value was set by web.Response constructor.

    While the patch boosts speed of trivial web.Response(text=’OK’, content_type=’text/plain) very well please don’t expect significant boost of your application – a couple DB requests and business logic is still the main bottleneck.

  • Boost performance by adding a custom time service #1350

  • Extend ClientResponse with content_type and charset properties like in web.Request. #1349

  • Disable aiodns by default #559

  • Don’t flap tcp_cork in client code, use TCP_NODELAY mode by default.

  • Implement web.Request.clone() #1361

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

Uploaded Source

Built Distributions

aiohttp-1.1.5-cp35-cp35m-win_amd64.whl (137.1 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-1.1.5-cp35-cp35m-win32.whl (135.9 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-1.1.5-cp35-cp35m-manylinux1_x86_64.whl (154.0 kB view details)

Uploaded CPython 3.5m

aiohttp-1.1.5-cp35-cp35m-manylinux1_i686.whl (151.3 kB view details)

Uploaded CPython 3.5m

aiohttp-1.1.5-cp34-cp34m-win_amd64.whl (135.0 kB view details)

Uploaded CPython 3.4m Windows x86-64

aiohttp-1.1.5-cp34-cp34m-win32.whl (134.7 kB view details)

Uploaded CPython 3.4m Windows x86

aiohttp-1.1.5-cp34-cp34m-manylinux1_x86_64.whl (154.1 kB view details)

Uploaded CPython 3.4m

aiohttp-1.1.5-cp34-cp34m-manylinux1_i686.whl (151.4 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

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

File hashes

Hashes for aiohttp-1.1.5.tar.gz
Algorithm Hash digest
SHA256 e6c5a8008ab8bbdb706034bedc91835ed820cdc2367ddea9142697612908df84
MD5 d3f7518ea20f1681f37249d926b3d800
BLAKE2b-256 5f60afb29b5712ade524efdce339e2a6a0cb69c44115804ab5d4e976bf3f1983

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 91a5d6f5f8083e0339e02f21a59d873dadd2a003c5c5bb360cce2d23155980ca
MD5 4705100852cb0948c9b01e442c51f506
BLAKE2b-256 5db6deaa802e95f6433a4b61ae2d3aef12f1eb00e2f3200076f491f5d0461279

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 4a2ac388457d55861e42a123d5307cd8ea6d02a8665065daee19ab7239a9e61d
MD5 82ea0edf5b5ca470cf1e5b435da39d24
BLAKE2b-256 f6dc34db27e6ff34fede41c08cc6e563dc3b48818c0e2c53eb36b1cfbf8b5e83

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.5-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9bdc4fe5b4907f4a80caf46b173fe6fd3ca138477f9220ab22d009c328c6edf2
MD5 cb6b878e5f02c3b46f23eec70c05e29c
BLAKE2b-256 de8dacbdd6862d7a94e08855ad1c18964e6370a4fb8c58fd92e0fbeb152882d1

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.5-cp35-cp35m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 af3d548eea3dc366c0559a7f43820d7f4d8cba0be824b2bbdaef95be9e1361e4
MD5 7ea5b12f6004a750fb1248094b27877e
BLAKE2b-256 08a5cb7e38f43fa974efcbc6c72291df154b6623d16c27f2037e04cae75dde73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 d034760f4fc3ff8fa61fe41ca7d36e8782e49d7f90e7567484a11afd7e0fb4ee
MD5 0c5d04e0913f33dba6c56c92995a0364
BLAKE2b-256 b6e43dd60792bf4978f1c2af335cd964661f5f19f780a4fd7b640a66b9273bfc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 97f6f974029432a42e65c7084b8c4221baaf8a1be0eb5c4817be5538017a76ab
MD5 070266f33c533ef7b5d6b41bf462ec0a
BLAKE2b-256 7e5f2a2ec3d0d2dd4f801091993040421d897afb0004828d67345dcdf7423cee

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.5-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 374832ea71c292a221e0bf7e0dde193db19807a1286dca0183eb7bfa794479f9
MD5 febecf2e21a6b2517bb7308fab6cc629
BLAKE2b-256 35ca9a7279d1cd5b442496d078d10db3a9db929d9281e29e374b4bd9801c74de

See more details on using hashes here.

File details

Details for the file aiohttp-1.1.5-cp34-cp34m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for aiohttp-1.1.5-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 f9bf35edb7e1483e06f6c887ed2a7a823acdb8c8f0daf64d08d7cafe628a0aec
MD5 f7971cd6d92b140fc1d02cf029f90d70
BLAKE2b-256 4dedcfd300ec84a0164d30fac7ed9bf409fc247113f6650d4d3fddcec40cb9d2

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