Metadata-Version: 2.0
Name: aiohttp
Version: 0.22.0b0
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: Topic :: Internet :: WWW/HTTP
Requires-Dist: chardet
Requires-Dist: multidict (>=1.1.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://coveralls.io/repos/KeepSafe/aiohttp/badge.svg?branch=master&service=github
  :target:  https://coveralls.io/github/KeepSafe/aiohttp?branch=master
  :align: right

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

.. code-block:: python

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

https://aiohttp.readthedocs.io/

Discussion list
---------------

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

Requirements
------------

- Python >= 3.4.1
- chardet https://pypi.python.org/pypi/chardet

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

- Fix leak of connection slot during connection erro #835

- Gunicorn worker with uvloop support `aiohttp.worker.GunicornUVLoopWebWorker` #878

- Don't send body in response to HEAD request #838

- Skip the preamble in MultipartReader #881

- Implement BasicAuth decode classmethod. #744

- Don't crash logger when transport is None #889

- Use a create_future compatibility wrapper instead of creating
  Futures directly #896

- Add test utilities to aiohttp #902

- Improve Request.__repr__ #875

- Skip DNS resolving if provided host is already an ip address #874

- Add headers to ClientSession.ws_connect #785

- Document that server can send pre-compressed data #906

- Don't add Content-Encoding and Transfer-Encoding if no body #891

- Add json() convenience methods to websocket message objects #897

- Add client_resp.raise_for_status() #908

- Implement cookie filter #799

- Include an example of middleware to handle error pages #909

- Fix error handling in StaticFileMixin #856

- Add mocked request helper #900

- Fix empty ALLOW Response header for cls based View #929

- Respect CONNECT method to implement a proxy server #847

- Add pytest_plugin #914

- Add tutorial

- Add backlog option to support more than 128 (default value in
  "create_server" function) concurrent connections #892

- Allow configuration of header size limits #912

- Separate sending file logic from StaticRoute dispatcher #901

- Drop deprecated share_cookies connector option (BACKWARD INCOMPATIBLE)

- Drop deprecated support for tuple as auth paramter.
  Use aiohttp.BasicAuth instead (BACKWARD INCOMPATIBLE)

- Remove deprecated `request.payload` property, use `content` instead.
  (BACKWARD INCOMPATIBLE)

- Drop all mentions about api changes in documentaion for versions
  older than 0.16

- Allow to override default cookie jar #963

