Metadata-Version: 2.0
Name: aiohttp
Version: 3.0.5
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp/
Author: Nikolay Kim <fafhrd91@gmail.com>, Andrew Svetlov <andrew.svetlov@gmail.com>
Author-email: aio-libs@googlegroups.com
License: Apache 2
Description-Content-Type: UNKNOWN
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.5
Classifier: Programming Language :: Python :: 3.6
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
Classifier: Framework :: AsyncIO
Requires-Python: >=3.5.3
Requires-Dist: attrs (>=17.3.0)
Requires-Dist: chardet (<4.0,>=2.0)
Requires-Dist: multidict (<5.0,>=4.0)
Requires-Dist: async-timeout (<3.0,>=1.2)
Requires-Dist: yarl (<2.0,>=1.0)
Requires-Dist: idna-ssl (>=1.0)

==================================
Async http client/server framework
==================================

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

.. image:: https://travis-ci.org/aio-libs/aiohttp.svg?branch=master
   :target:  https://travis-ci.org/aio-libs/aiohttp
   :align: right
   :alt: Travis status for master branch

.. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/aio-libs/aiohttp
   :alt: codecov.io status for master branch

.. image:: https://badge.fury.io/py/aiohttp.svg
   :target: https://badge.fury.io/py/aiohttp
   :alt: Latest PyPI package version

.. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest
   :target: http://docs.aiohttp.org/
   :alt: Latest Read The Docs

.. image:: https://badges.gitter.im/Join%20Chat.svg
    :target: https://gitter.im/aio-libs/Lobby
    :alt: Chat on Gitter

Key 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
  import async_timeout

  async def fetch(session, url):
      async with async_timeout.timeout(10):
          async with session.get(url) as response:
              return await response.text()

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

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


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:
                await ws.send_str("Hello, {}".format(msg.data))
            elif msg.type == web.MsgType.binary:
                await 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)


Documentation
=============

https://aiohttp.readthedocs.io/

External links
==============

* `Third party libraries
  <http://aiohttp.readthedocs.io/en/latest/third_party.html>`_
* `Built with aiohttp
  <http://aiohttp.readthedocs.io/en/latest/built_with.html>`_
* `Powered by aiohttp
  <http://aiohttp.readthedocs.io/en/latest/powered_by.html>`_

Feel free to make a Pull Request for adding your link to these pages!


Communication channels
======================

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

Feel free to post your questions and ideas here.

*gitter chat* https://gitter.im/aio-libs/Lobby

We support `Stack Overflow
<https://stackoverflow.com/questions/tagged/aiohttp>`_.
Please add *aiohttp* tag to your question there.

Requirements
============

- Python >= 3.5.3
- 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.


Keepsafe
========

The aiohttp community would like to thank Keepsafe
(https://www.getkeepsafe.com) for it's support in the early days of
the project.


Source code
===========

The latest developer version is available in a github repository:
https://github.com/aio-libs/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

=========
Changelog
=========

..
    You should *NOT* be adding new change log entries to this file, this
    file is managed by towncrier. You *may* edit previous change logs to
    fix problems like typo corrections or such.
    To add a new change log entry, please see
    https://pip.pypa.io/en/latest/development/#adding-a-news-entry
    we named the news folder "changes".

    WARNING: Don't drop the next directive!

.. towncrier release notes start

3.0.5 (2018-02-27)
==================

- Fix ``InvalidStateError`` on processing a sequence of two
  ``RequestHandler.data_received`` calls on web server. (#2773)

3.0.4 (2018-02-26)
==================

- Fix ``IndexError`` in HTTP request handling by server. (#2752)
- Fix MultipartWriter.append* no longer returning part/payload. (#2759)


3.0.3 (2018-02-25)
==================

- Relax ``attrs`` dependency to minimal actually supported version
  17.0.3 The change allows to avoid version conflicts with currently
  existing test tools.

3.0.2 (2018-02-23)
==================

Security Fix
------------

- Prevent Windows absolute URLs in static files.  Paths like
  ``/static/D:\path`` and ``/static/\\hostname\drive\path`` are
  forbidden.

3.0.1
=====

- Technical release for fixing distribution problems.

3.0.0 (2018-02-12)
==================

Features
--------

- Speed up the `PayloadWriter.write` method for large request bodies. (#2126)
- StreamResponse and Response are now MutableMappings. (#2246)
- ClientSession publishes a set of signals to track the HTTP request execution.
  (#2313)
- Content-Disposition fast access in ClientResponse (#2455)
- Added support to Flask-style decorators with class-based Views. (#2472)
- Signal handlers (registered callbacks) should be coroutines. (#2480)
- Support ``async with test_client.ws_connect(...)`` (#2525)
- Introduce *site* and *application runner* as underlying API for `web.run_app`
  implementation. (#2530)
- Only quote multipart boundary when necessary and sanitize input (#2544)
- Make the `aiohttp.ClientResponse.get_encoding` method public with the
  processing of invalid charset while detecting content encoding. (#2549)
- Add optional configurable per message compression for
  `ClientWebSocketResponse` and `WebSocketResponse`. (#2551)
- Add hysteresis to `StreamReader` to prevent flipping between paused and
  resumed states too often. (#2555)
- Support `.netrc` by `trust_env` (#2581)
- Avoid to create a new resource when adding a route with the same name and
  path of the last added resource (#2586)
- `MultipartWriter.boundary` is `str` now. (#2589)
- Allow a custom port to be used by `TestServer` (and associated pytest
  fixtures) (#2613)
- Add param access_log_class to web.run_app function (#2615)
- Add ``ssl`` parameter to client API (#2626)
- Fixes performance issue introduced by #2577. When there are no middlewares
  installed by the user, no additional and useless code is executed. (#2629)
- Rename PayloadWriter to StreamWriter (#2654)
- New options *reuse_port*, *reuse_address* are added to `run_app` and
  `TCPSite`. (#2679)
- Use custom classes to pass client signals parameters (#2686)
- Use ``attrs`` library for data classes, replace `namedtuple`. (#2690)
- Pytest fixtures renaming, add ``aiohttp_`` prefix (#2578)
- Add ``aiohttp-`` prefix for ``pytest-aiohttp`` command line
  parameters (#2578)

Bugfixes
--------

- Correctly process upgrade request from server to HTTP2. ``aiohttp`` does not
  support HTTP2 yet, the protocol is not upgraded but response is handled
  correctly. (#2277)
- Fix ClientConnectorSSLError and ClientProxyConnectionError for proxy
  connector (#2408)
- Fix connector convert OSError to ClientConnectorError (#2423)
- Fix connection attempts for multiple dns hosts (#2424)
- Fix writing to closed transport by raising `asyncio.CancelledError` (#2499)
- Fix warning in `ClientSession.__del__` by stopping to try to close it.
  (#2523)
- Fixed race-condition for iterating addresses from the DNSCache. (#2620)
- Fix default value of `access_log_format` argument in `web.run_app` (#2649)
- Freeze sub-application on adding to parent app (#2656)
- Do percent encoding for `.url_for()` parameters (#2668)
- Correctly process request start time and multiple request/response
  headers in access log extra (#2641)

Improved Documentation
----------------------

- Improve tutorial docs, using `literalinclude` to link to the actual files.
  (#2396)
- Small improvement docs: better example for file uploads. (#2401)
- Rename `from_env` to `trust_env` in client reference. (#2451)
- ﻿Fixed mistype in `Proxy Support` section where `trust_env` parameter was
  used in `session.get("http://python.org", trust_env=True)` method instead of
  aiohttp.ClientSession constructor as follows:
  `aiohttp.ClientSession(trust_env=True)`. (#2688)
- Fix issue with unittest example not compiling in testing docs. (#2717)

Deprecations and Removals
-------------------------

- Simplify HTTP pipelining implementation (#2109)
- Drop `StreamReaderPayload` and `DataQueuePayload`. (#2257)
- Drop `md5` and `sha1` finger-prints (#2267)
- Drop WSMessage.tp (#2321)
- Drop Python 3.4 and Python 3.5.0, 3.5.1, 3.5.2. Minimal supported Python
  versions are 3.5.3 and 3.6.0. `yield from` is gone, use `async/await` syntax.
  (#2343)
- Drop `aiohttp.Timeout` and use `async_timeout.timeout` instead. (#2348)
- Drop `resolve` param from TCPConnector. (#2377)
- Add DeprecationWarning for returning HTTPException (#2415)
- `send_str()`, `send_bytes()`, `send_json()`, `ping()` and `pong()` are
  genuine async functions now. (#2475)
- Drop undocumented `app.on_pre_signal` and `app.on_post_signal`. Signal
  handlers should be coroutines, support for regular functions is dropped.
  (#2480)
- `StreamResponse.drain()` is not a part of public API anymore, just use `await
  StreamResponse.write()`. `StreamResponse.write` is converted to async
  function. (#2483)
- Drop deprecated `slow_request_timeout` param and `**kwargs`` from
  `RequestHandler`. (#2500)
- Drop deprecated `resource.url()`. (#2501)
- Remove `%u` and `%l` format specifiers from access log format. (#2506)
- Drop deprecated `request.GET` property. (#2547)
- Simplify stream classes: drop `ChunksQueue` and `FlowControlChunksQueue`,
  merge `FlowControlStreamReader` functionality into `StreamReader`, drop
  `FlowControlStreamReader` name. (#2555)
- Do not create a new resource on `router.add_get(..., allow_head=True)`
  (#2585)
- Drop access to TCP tuning options from PayloadWriter and Response classes
  (#2604)
- Drop deprecated `encoding` parameter from client API (#2606)
- Deprecate ``verify_ssl``, ``ssl_context`` and ``fingerprint`` parameters in
  client API (#2626)
- Get rid of the legacy class StreamWriter. (#2651)
- Forbid non-strings in `resource.url_for()` parameters. (#2668)
- Deprecate inheritance from ``ClientSession`` and ``web.Application`` and
  custom user attributes for ``ClientSession``, ``web.Request`` and
  ``web.Application`` (#2691)
- Drop `resp = await aiohttp.request(...)` syntax for sake of `async with
  aiohttp.request(...) as resp:`. (#2540)
- Forbid synchronous context managers for `ClientSession` and test
  server/client. (#2362)


Misc
----

- #2552

