Metadata-Version: 2.0
Name: aiohttp
Version: 1.1.2
Summary: http client/server for asyncio
Home-page: https://github.com/KeepSafe/aiohttp/
Author: Andrew Svetlov
Author-email: andrew.svetlov@gmail.com
License: Apache 2
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: POSIX
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Dist: async-timeout (>=1.1.0)
Requires-Dist: chardet
Requires-Dist: multidict (>=2.0)
Requires-Dist: yarl (>=0.5.0)

http client/server for asyncio
==============================

.. image:: https://raw.github.com/KeepSafe/aiohttp/master/docs/_static/aiohttp-icon-128x128.png
  :height: 64px
  :width: 64px
  :alt: aiohttp logo

.. image:: https://travis-ci.org/KeepSafe/aiohttp.svg?branch=master
  :target:  https://travis-ci.org/KeepSafe/aiohttp
  :align: right

.. image:: https://codecov.io/gh/KeepSafe/aiohttp/branch/master/graph/badge.svg
  :target: https://codecov.io/gh/KeepSafe/aiohttp

.. image:: https://badge.fury.io/py/aiohttp.svg
    :target: https://badge.fury.io/py/aiohttp

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:

.. code-block:: python

  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:

.. code-block:: python

    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
------------

- Python >= 3.4.2
- async-timeout_
- chardet_
- multidict_
- yarl_

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

.. _chardet: https://pypi.python.org/pypi/chardet
.. _aiodns: https://pypi.python.org/pypi/aiodns
.. _multidict: https://pypi.python.org/pypi/multidict
.. _yarl: https://pypi.python.org/pypi/yarl
.. _async-timeout: https://pypi.python.org/pypi/async_timeout
.. _cChardet: https://pypi.python.org/pypi/cchardet

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.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

