Metadata-Version: 2.0
Name: aiohttp
Version: 0.10.2
Summary: http client/server for asyncio
Home-page: https://github.com/KeepSafe/aiohttp/
Author: Nikolay Kim
Author-email: fafhrd91@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.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Topic :: Internet :: WWW/HTTP

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

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

.. image:: https://secure.travis-ci.org/KeepSafe/aiohttp.png
  :target:  https://secure.travis-ci.org/KeepSafe/aiohttp
  :align: right


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

- Python >= 3.3
- asyncio https://pypi.python.org/pypi/asyncio


License
-------

``aiohttp`` is offered under the Apache 2 license.


Documentation
-------------

http://aiohttp.readthedocs.org/


Getting started
---------------

Client
^^^^^^

To retrieve something from the web::

  import aiohttp

  def get_body(url):
      response = yield from aiohttp.request('GET', url)
      return (yield from response.read())

You can use the get command like this anywhere in your ``asyncio``
powered program::

  response = yield from aiohttp.request('GET', 'http://python.org')
  body = yield from response.read()
  print(body)

If you want to use timeouts for aiohttp client side please use standard
asyncio approach::

   yield from asyncio.wait_for(request('GET', url), 10)

Server (experimental)
^^^^^^^^^^^^^^^^^^^^^

In aiohttp 0.10 we've added highlevel API for web HTTP server.

There is simple usage example::

    import asyncio
    from aiohttp import web


    @asyncio.coroutine
    def handle(request):
        name = request.match_info.get('name', "Anonymous")
        text = "Hello, " + name
        return web.Response(body=text.encode('utf-8'))


    @asyncio.coroutine
    def init(loop):
        app = Application(loop=loop)
        app.router.add_route('GET', '/{name}', handle)

        srv = yield from loop.create_server(app.make_handler, '127.0.0.1', 8080)
        print("Server started at http://127.0.0.1:8080")
        return srv

    loop = asyncio.get_event_loop()
    loop.run_until_complete(init(loop))
    loop.run_forever()

CHANGES
=======

0.10.2 (11-19-2014)
-------------------

- Don't unquote `environ['PATH_INFO']` in wsgi.py #177

0.10.1 (11-17-2014)
-------------------

- aiohttp.web.HTTPException and descendants now files response body
  with string like `400: NotFound`

- Fix multidict __iter__, the method should iterate over keys, not (key, value) pairs.

0.10.0 (11-13-2014)
-------------------

- Add aiohttp.web subpackage for highlevel http server support.

- Add *reason* optional parameter to aiohttp.protocol.Response ctor.

- Fix aiohttp.client bug for sending file without content-type.

- Change error text for connection closed between server responses
  from 'Can not read status line' to explicit 'Connection closed by
  server'

- Drop closed connections from connector #173

- Set server.transport to None on .closing() #172

0.9.3 (10-30-2014)
------------------

- Fix compatibility with asyncio 3.4.1+ #170

0.9.2 (10-16-2014)
------------------

- Improve redirect handling #157

- Send raw files as is #153

- Better websocket support #150


0.9.1 (08-30-2014)
------------------

- Added MultiDict support for client request params and data #114.

- Fixed parameter type for IncompleteRead exception #118.

- Strictly require ASCII headers names and values #137

- Keep port in ProxyConnector #128.

- Python 3.4.1 compatibility #131.


0.9.0 (07-08-2014)
------------------

- Better client basic authentication support #112.

- Fixed incorrect line splitting in HttpRequestParser #97.

- Support StreamReader and DataQueue as request data.

- Client files handling refactoring #20.

- Backward incompatible: Replace DataQueue with StreamReader for request payload #87.


0.8.4 (07-04-2014)
------------------

- Change ProxyConnector authorization parameters.


0.8.3 (07-03-2014)
------------------

- Publish TCPConnector properties: verify_ssl, family, resolve, resolved_hosts.

- Don't parse message body for HEAD responses.

- Refactor client response decoding.


0.8.2 (06-22-2014)
------------------

- Make ProxyConnector.proxy immutable property.

- Make UnixConnector.path immutable property.

- Fix resource leak for aiohttp.request() with implicit connector.

- Rename Connector's reuse_timeout to keepalive_timeout.


0.8.1 (06-18-2014)
------------------

- Use case insensitive multidict for server request/response headers.

- MultiDict.getall() accepts default value.

- Catch server ConnectionError.

- Accept MultiDict (and derived) instances in aiohttp.request header argument.

- Proxy 'CONNECT' support.


0.8.0 (06-06-2014)
------------------

- Add support for utf-8 values in HTTP headers

- Allow to use custom response class instead of HttpResponse

- Use MultiDict for client request headers

- Use MultiDict for server request/response headers

- Store response headers in ClientResponse.headers attribute

- Get rid of timeout parameter in aiohttp.client API

- Exceptions refactoring


0.7.3 (05-20-2014)
------------------

- Simple HTTP proxy support.


0.7.2 (05-14-2014)
------------------

- Get rid of __del__ methods

- Use ResourceWarning instead of logging warning record.


0.7.1 (04-28-2014)
------------------

- Do not unquote client request urls.

- Allow multple waiters on transport drain.

- Do not return client connection to pool in case of exceptions.

- Rename SocketConnector to TCPConnector and UnixSocketConnector to UnixConnector.


0.7.0 (04-16-2014)
------------------

- Connection flow control.

- Http client session/connection pool refactoring.

- Better handling for bad server requests.


0.6.5 (03-29-2014)
------------------

- Added client session reuse timeout.

- Better client request cancellation support.

- Better handling responses without content length.

- Added HttpClient verify_ssl parameter support.


0.6.4 (02-27-2014)
------------------

- Log content-length missing warning only for put and post requests.


0.6.3 (02-27-2014)
------------------

- Better support for server exit.

- Read response body until eof if content-length is not defined #14


0.6.2 (02-18-2014)
------------------

- Fix trailing char in allowed_methods.

- Start slow request timer for first request.


0.6.1 (02-17-2014)
------------------

- Added utility method HttpResponse.read_and_close()

- Added slow request timeout.

- Enable socket SO_KEEPALIVE if available. (@polymorphm)


0.6.0 (02-12-2014)
------------------

- Better handling for process exit.


0.5.0 (01-29-2014)
------------------

- Allow to use custom HttpRequest client class.

- Use gunicorn keepalive setting for async worker.

- Log leaking responses.

- python 3.4 compatibility


0.4.4 (11-15-2013)
------------------

- Resolve only AF_INET family, because it is not clear how to pass extra info to asyncio.


0.4.3 (11-15-2013)
------------------

- Allow to wait completion of request with `HttpResponse.wait_for_close()`


0.4.2 (11-14-2013)
------------------

- Handle exception in client request stream.

- Prevent host resolving for each client request.


0.4.1 (11-12-2013)
------------------

- Added client support for `expect: 100-continue` header.


0.4 (11-06-2013)
----------------

- Added custom wsgi application close procedure

- Fixed concurrent host failure in HttpClient


0.3 (11-04-2013)
----------------

- Added PortMapperWorker

- Added HttpClient

- Added tcp connection timeout to http client

- Better client connection errors handling

- Gracefully handle process exit


0.2
---

- Fix packaging

