From 68940b9b045fcd675276234ac734c4befc9f67dd Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Thu, 12 Apr 2018 16:14:03 +0300 Subject: [PATCH 1/5] [3.1] fix resolve cancellation (#2910) (#2931) * fix resolve cancellation * fixes based on review * changes based on review * add changes file * rename (cherry picked from commit a7bbaad) Co-authored-by: Alexander Mohr --- CHANGES/2910.bugfix | 1 + aiohttp/connector.py | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 CHANGES/2910.bugfix diff --git a/CHANGES/2910.bugfix b/CHANGES/2910.bugfix new file mode 100644 index 00000000000..e10a8534d06 --- /dev/null +++ b/CHANGES/2910.bugfix @@ -0,0 +1 @@ +fix cancellation broadcast during DNS resolve diff --git a/aiohttp/connector.py b/aiohttp/connector.py index f506230ad42..556d91fdce0 100644 --- a/aiohttp/connector.py +++ b/aiohttp/connector.py @@ -700,10 +700,7 @@ async def _resolve_host(self, host, port, traces=None): await trace.send_dns_resolvehost_start(host) addrs = await \ - asyncio.shield(self._resolver.resolve(host, - port, - family=self._family), - loop=self._loop) + self._resolver.resolve(host, port, family=self._family) if traces: for trace in traces: await trace.send_dns_resolvehost_end(host) @@ -813,10 +810,13 @@ async def _create_direct_connection(self, req, fingerprint = self._get_fingerprint(req) try: - hosts = await self._resolve_host( + # Cancelling this lookup should not cancel the underlying lookup + # or else the cancel event will get broadcast to all the waiters + # across all connections. + hosts = await asyncio.shield(self._resolve_host( req.url.raw_host, req.port, - traces=traces) + traces=traces), loop=self._loop) except OSError as exc: # in case of proxy it is not ClientProxyConnectionError # it is problem of resolving proxy ip itself From a901b54a5beaec472624f089eb1085a1073a1cf4 Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Fri, 13 Apr 2018 12:05:49 +0300 Subject: [PATCH 2/5] Bump to 3.1.3 --- CHANGES.rst | 6 ++++++ CHANGES/2910.bugfix | 1 - aiohttp/__init__.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 CHANGES/2910.bugfix diff --git a/CHANGES.rst b/CHANGES.rst index 443b6a2671f..85fb7dff3d5 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -14,6 +14,12 @@ Changelog .. towncrier release notes start +3.1.3 (2018-04-12) +================== + +- Fix cancellation broadcast during DNS resolve (#2910) + + 3.1.2 (2018-04-05) ================== diff --git a/CHANGES/2910.bugfix b/CHANGES/2910.bugfix deleted file mode 100644 index e10a8534d06..00000000000 --- a/CHANGES/2910.bugfix +++ /dev/null @@ -1 +0,0 @@ -fix cancellation broadcast during DNS resolve diff --git a/aiohttp/__init__.py b/aiohttp/__init__.py index 04b35fe26ef..d4087fbd816 100644 --- a/aiohttp/__init__.py +++ b/aiohttp/__init__.py @@ -1,4 +1,4 @@ -__version__ = '3.1.2' +__version__ = '3.1.3' # This relies on each of the submodules having an __all__ variable. From ffd704be3389afe88840da1533b86cfde1d9e066 Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Fri, 13 Apr 2018 12:11:35 +0300 Subject: [PATCH 3/5] Fix links --- CHANGES.rst | 54 +-- HISTORY.rst | 1210 +++++++++++++++++++++++++-------------------------- 2 files changed, 632 insertions(+), 632 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 85fb7dff3d5..02689ac2a1b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,14 +17,14 @@ Changelog 3.1.3 (2018-04-12) ================== -- Fix cancellation broadcast during DNS resolve (#2910) +- Fix cancellation broadcast during DNS resolve (`#2910 `_) 3.1.2 (2018-04-05) ================== -- Make ``LineTooLong`` exception more detailed about actual data size (#2863) -- Call ``on_chunk_sent`` when write_eof takes as a param the last chunk (#2909) +- Make ``LineTooLong`` exception more detailed about actual data size (`#2863 `_) +- Call ``on_chunk_sent`` when write_eof takes as a param the last chunk (`#2909 `_) 3.1.1 (2018-03-27) @@ -32,7 +32,7 @@ Changelog - Support *asynchronous iterators* (and *asynchronous generators* as well) in both client and server API as request / response BODY - payloads. (#2802) + payloads. (`#2802 `_) 3.1.0 (2018-03-21) @@ -77,48 +77,48 @@ Features -------- - Relax JSON content-type checking in the ``ClientResponse.json()`` to allow - "application/xxx+json" instead of strict "application/json". (#2206) -- Bump C HTTP parser to version 2.8 (#2730) + "application/xxx+json" instead of strict "application/json". (`#2206 `_) +- Bump C HTTP parser to version 2.8 (`#2730 `_) - Accept a coroutine as an application factory in ``web.run_app`` and gunicorn - worker. (#2739) -- Implement application cleanup context (``app.cleanup_ctx`` property). (#2747) -- Make ``writer.write_headers`` a coroutine. (#2762) -- Add tracking signals for getting request/response bodies. (#2767) + worker. (`#2739 `_) +- Implement application cleanup context (``app.cleanup_ctx`` property). (`#2747 `_) +- Make ``writer.write_headers`` a coroutine. (`#2762 `_) +- Add tracking signals for getting request/response bodies. (`#2767 `_) - Deprecate ClientResponseError.code in favor of .status to keep similarity - with response classes. (#2781) -- Implement ``app.add_routes()`` method. (#2787) -- Implement ``web.static()`` and ``RouteTableDef.static()`` API. (#2795) + with response classes. (`#2781 `_) +- Implement ``app.add_routes()`` method. (`#2787 `_) +- Implement ``web.static()`` and ``RouteTableDef.static()`` API. (`#2795 `_) - Install a test event loop as default by ``asyncio.set_event_loop()``. The change affects aiohttp test utils but backward compatibility is not broken - for 99.99% of use cases. (#2804) + for 99.99% of use cases. (`#2804 `_) - Refactor ``ClientResponse`` constructor: make logically required constructor - arguments mandatory, drop ``_post_init()`` method. (#2820) -- Use ``app.add_routes()`` in server docs everywhere (#2830) + arguments mandatory, drop ``_post_init()`` method. (`#2820 `_) +- Use ``app.add_routes()`` in server docs everywhere (`#2830 `_) - Websockets refactoring, all websocket writer methods are converted into - coroutines. (#2836) -- Provide ``Content-Range`` header for ``Range`` requests (#2844) + coroutines. (`#2836 `_) +- Provide ``Content-Range`` header for ``Range`` requests (`#2844 `_) Bugfixes -------- -- Fix websocket client return EofStream. (#2784) -- Fix websocket demo. (#2789) +- Fix websocket client return EofStream. (`#2784 `_) +- Fix websocket demo. (`#2789 `_) - Property ``BaseRequest.http_range`` now returns a python-like slice when requesting the tail of the range. It's now indicated by a negative value in - ``range.start`` rather then in ``range.stop`` (#2805) + ``range.start`` rather then in ``range.stop`` (`#2805 `_) - Close a connection if an unexpected exception occurs while sending a request - (#2827) -- Fix firing DNS tracing events. (#2841) + (`#2827 `_) +- Fix firing DNS tracing events. (`#2841 `_) Improved Documentation ---------------------- - Change ``ClientResponse.json()`` documentation to reflect that it now - allows "application/xxx+json" content-types (#2206) + allows "application/xxx+json" content-types (`#2206 `_) - Document behavior when cchardet detects encodings that are unknown to Python. - (#2732) -- Add diagrams for tracing request life style. (#2748) + (`#2732 `_) +- Add diagrams for tracing request life style. (`#2748 `_) - Drop removed functionality for passing ``StreamReader`` as data at client - side. (#2793) + side. (`#2793 `_) diff --git a/HISTORY.rst b/HISTORY.rst index 567f5ca02f2..328e1ac1744 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -2,41 +2,41 @@ ================== - Close a connection if an unexpected exception occurs while sending a request - (#2827) + (`#2827 `_) 3.0.8 (2018-03-12) ================== -- Use ``asyncio.current_task()`` on Python 3.7 (#2825) +- Use ``asyncio.current_task()`` on Python 3.7 (`#2825 `_) 3.0.7 (2018-03-08) ================== -- Fix SSL proxy support by client. (#2810) +- Fix SSL proxy support by client. (`#2810 `_) - Restore a imperative check in ``setup.py`` for python version. The check works in parallel to environment marker. As effect a error about unsupported Python versions is raised even on outdated systems with very old - ``setuptools`` version installed. (#2813) + ``setuptools`` version installed. (`#2813 `_) 3.0.6 (2018-03-05) ================== - Add ``_reuse_address`` and ``_reuse_port`` to - ``web_runner.TCPSite.__slots__``. (#2792) + ``web_runner.TCPSite.__slots__``. (`#2792 `_) 3.0.5 (2018-02-27) ================== - Fix ``InvalidStateError`` on processing a sequence of two - ``RequestHandler.data_received`` calls on web server. (#2773) + ``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) +- Fix ``IndexError`` in HTTP request handling by server. (`#2752 `_) +- Fix MultipartWriter.append* no longer returning part/payload. (`#2759 `_) 3.0.3 (2018-02-25) @@ -67,120 +67,120 @@ Security Fix Features -------- -- Speed up the `PayloadWriter.write` method for large request bodies. (#2126) -- StreamResponse and Response are now MutableMappings. (#2246) +- 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) + (`#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) + 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) + processing of invalid charset while detecting content encoding. (`#2549 `_) - Add optional configurable per message compression for - `ClientWebSocketResponse` and `WebSocketResponse`. (#2551) + `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) + 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) + 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) + 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) + 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) + `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) + 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) + 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) + 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) + (`#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) + 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) + (`#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) + `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) +- 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) + (`#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) + 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) + (`#2480 `_) - `StreamResponse.drain()` is not a part of public API anymore, just use `await StreamResponse.write()`. `StreamResponse.write` is converted to async - function. (#2483) + 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) + `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) + `FlowControlStreamReader` name. (`#2555 `_) - Do not create a new resource on `router.add_get(..., allow_head=True)` - (#2585) + (`#2585 `_) - Drop access to TCP tuning options from PayloadWriter and Response classes - (#2604) -- Drop deprecated `encoding` parameter from client API (#2606) + (`#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) + 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) + ``web.Application`` (`#2691 `_) - Drop `resp = await aiohttp.request(...)` syntax for sake of `async with - aiohttp.request(...) as resp:`. (#2540) + aiohttp.request(...) as resp:`. (`#2540 `_) - Forbid synchronous context managers for `ClientSession` and test - server/client. (#2362) + server/client. (`#2362 `_) Misc @@ -192,88 +192,88 @@ Misc 2.3.10 (2018-02-02) =================== -- Fix 100% CPU usage on HTTP GET and websocket connection just after it (#1955) +- Fix 100% CPU usage on HTTP GET and websocket connection just after it (`#1955 `_) -- Patch broken `ssl.match_hostname()` on Python<3.7 (#2674) +- Patch broken `ssl.match_hostname()` on Python<3.7 (`#2674 `_) 2.3.9 (2018-01-16) ================== -- Fix colon handing in path for dynamic resources (#2670) +- Fix colon handing in path for dynamic resources (`#2670 `_) 2.3.8 (2018-01-15) ================== - Do not use `yarl.unquote` internal function in aiohttp. Fix - incorrectly unquoted path part in URL dispatcher (#2662) + incorrectly unquoted path part in URL dispatcher (`#2662 `_) -- Fix compatibility with `yarl==1.0.0` (#2662) +- Fix compatibility with `yarl==1.0.0` (`#2662 `_) 2.3.7 (2017-12-27) ================== -- Fixed race-condition for iterating addresses from the DNSCache. (#2620) -- Fix docstring for request.host (#2591) -- Fix docstring for request.remote (#2592) +- Fixed race-condition for iterating addresses from the DNSCache. (`#2620 `_) +- Fix docstring for request.host (`#2591 `_) +- Fix docstring for request.remote (`#2592 `_) 2.3.6 (2017-12-04) ================== -- Correct `request.app` context (for handlers not just middlewares). (#2577) +- Correct `request.app` context (for handlers not just middlewares). (`#2577 `_) 2.3.5 (2017-11-30) ================== -- Fix compatibility with `pytest` 3.3+ (#2565) +- Fix compatibility with `pytest` 3.3+ (`#2565 `_) 2.3.4 (2017-11-29) ================== - Make `request.app` point to proper application instance when using nested - applications (with middlewares). (#2550) + applications (with middlewares). (`#2550 `_) - Change base class of ClientConnectorSSLError to ClientSSLError from - ClientConnectorError. (#2563) + ClientConnectorError. (`#2563 `_) - Return client connection back to free pool on error in `connector.connect()`. - (#2567) + (`#2567 `_) 2.3.3 (2017-11-17) ================== - Having a `;` in Response content type does not assume it contains a charset - anymore. (#2197) + anymore. (`#2197 `_) - Use `getattr(asyncio, 'async')` for keeping compatibility with Python 3.7. - (#2476) + (`#2476 `_) - Ignore `NotImplementedError` raised by `set_child_watcher` from `uvloop`. - (#2491) + (`#2491 `_) - Fix warning in `ClientSession.__del__` by stopping to try to close it. - (#2523) + (`#2523 `_) - Fixed typo's in Third-party libraries page. And added async-v20 to the list - (#2510) + (`#2510 `_) 2.3.2 (2017-11-01) ================== -- Fix passing client max size on cloning request obj. (#2385) +- Fix passing client max size on cloning request obj. (`#2385 `_) - Fix ClientConnectorSSLError and ClientProxyConnectionError for proxy - connector. (#2408) -- Drop generated `_http_parser` shared object from tarball distribution. (#2414) -- Fix connector convert OSError to ClientConnectorError. (#2423) -- Fix connection attempts for multiple dns hosts. (#2424) + connector. (`#2408 `_) +- Drop generated `_http_parser` shared object from tarball distribution. (`#2414 `_) +- Fix connector convert OSError to ClientConnectorError. (`#2423 `_) +- Fix connection attempts for multiple dns hosts. (`#2424 `_) - Fix ValueError for AF_INET6 sockets if a preexisting INET6 socket to the - `aiohttp.web.run_app` function. (#2431) -- `_SessionRequestContextManager` closes the session properly now. (#2441) -- Rename `from_env` to `trust_env` in client reference. (#2451) + `aiohttp.web.run_app` function. (`#2431 `_) +- `_SessionRequestContextManager` closes the session properly now. (`#2441 `_) +- Rename `from_env` to `trust_env` in client reference. (`#2451 `_) 2.3.1 (2017-10-18) ================== -- Relax attribute lookup in warning about old-styled middleware (#2340) +- Relax attribute lookup in warning about old-styled middleware (`#2340 `_) 2.3.0 (2017-10-18) @@ -282,104 +282,104 @@ Misc Features -------- -- Add SSL related params to `ClientSession.request` (#1128) -- Make enable_compression work on HTTP/1.0 (#1828) -- Deprecate registering synchronous web handlers (#1993) +- Add SSL related params to `ClientSession.request` (`#1128 `_) +- Make enable_compression work on HTTP/1.0 (`#1828 `_) +- Deprecate registering synchronous web handlers (`#1993 `_) - Switch to `multidict 3.0`. All HTTP headers preserve casing now but compared - in case-insensitive way. (#1994) + in case-insensitive way. (`#1994 `_) - Improvement for `normalize_path_middleware`. Added possibility to handle URLs - with query string. (#1995) -- Use towncrier for CHANGES.txt build (#1997) -- Implement `trust_env=True` param in `ClientSession`. (#1998) -- Added variable to customize proxy headers (#2001) -- Implement `router.add_routes` and router decorators. (#2004) + with query string. (`#1995 `_) +- Use towncrier for CHANGES.txt build (`#1997 `_) +- Implement `trust_env=True` param in `ClientSession`. (`#1998 `_) +- Added variable to customize proxy headers (`#2001 `_) +- Implement `router.add_routes` and router decorators. (`#2004 `_) - Deprecated `BaseRequest.has_body` in favor of `BaseRequest.can_read_body` Added `BaseRequest.body_exists` - attribute that stays static for the lifetime of the request (#2005) -- Provide `BaseRequest.loop` attribute (#2024) + attribute that stays static for the lifetime of the request (`#2005 `_) +- Provide `BaseRequest.loop` attribute (`#2024 `_) - Make `_CoroGuard` awaitable and fix `ClientSession.close` warning message - (#2026) + (`#2026 `_) - Responses to redirects without Location header are returned instead of - raising a RuntimeError (#2030) + raising a RuntimeError (`#2030 `_) - Added `get_client`, `get_server`, `setUpAsync` and `tearDownAsync` methods to - AioHTTPTestCase (#2032) -- Add automatically a SafeChildWatcher to the test loop (#2058) -- add ability to disable automatic response decompression (#2110) + AioHTTPTestCase (`#2032 `_) +- Add automatically a SafeChildWatcher to the test loop (`#2058 `_) +- add ability to disable automatic response decompression (`#2110 `_) - Add support for throttling DNS request, avoiding the requests saturation when there is a miss in the DNS cache and many requests getting into the connector - at the same time. (#2111) + at the same time. (`#2111 `_) - Use request for getting access log information instead of message/transport pair. Add `RequestBase.remote` property for accessing to IP of client - initiated HTTP request. (#2123) + initiated HTTP request. (`#2123 `_) - json() raises a ContentTypeError exception if the content-type does not meet - the requirements instead of raising a generic ClientResponseError. (#2136) + the requirements instead of raising a generic ClientResponseError. (`#2136 `_) - Make the HTTP client able to return HTTP chunks when chunked transfer - encoding is used. (#2150) + encoding is used. (`#2150 `_) - add `append_version` arg into `StaticResource.url` and `StaticResource.url_for` methods for getting an url with hash (version) of - the file. (#2157) + the file. (`#2157 `_) - Fix parsing the Forwarded header. * commas and semicolons are allowed inside quoted-strings; * empty forwarded-pairs (as in for=_1;;by=_2) are allowed; * non-standard parameters are allowed (although this alone could be easily done - in the previous parser). (#2173) + in the previous parser). (`#2173 `_) - Don't require ssl module to run. aiohttp does not require SSL to function. The code paths involved with SSL will only be hit upon SSL usage. Raise `RuntimeError` if HTTPS protocol is required but ssl module is not present. - (#2221) -- Accept coroutine fixtures in pytest plugin (#2223) -- Call `shutdown_asyncgens` before event loop closing on Python 3.6. (#2227) -- Speed up Signals when there are no receivers (#2229) + (`#2221 `_) +- Accept coroutine fixtures in pytest plugin (`#2223 `_) +- Call `shutdown_asyncgens` before event loop closing on Python 3.6. (`#2227 `_) +- Speed up Signals when there are no receivers (`#2229 `_) - Raise `InvalidURL` instead of `ValueError` on fetches with invalid URL. - (#2241) -- Move `DummyCookieJar` into `cookiejar.py` (#2242) -- `run_app`: Make `print=None` disable printing (#2260) + (`#2241 `_) +- Move `DummyCookieJar` into `cookiejar.py` (`#2242 `_) +- `run_app`: Make `print=None` disable printing (`#2260 `_) - Support `brotli` encoding (generic-purpose lossless compression algorithm) - (#2270) + (`#2270 `_) - Add server support for WebSockets Per-Message Deflate. Add client option to add deflate compress header in WebSockets request header. If calling ClientSession.ws_connect() with `compress=15` the client will support deflate - compress negotiation. (#2273) + compress negotiation. (`#2273 `_) - Support `verify_ssl`, `fingerprint`, `ssl_context` and `proxy_headers` by - `client.ws_connect`. (#2292) + `client.ws_connect`. (`#2292 `_) - Added `aiohttp.ClientConnectorSSLError` when connection fails due - `ssl.SSLError` (#2294) -- `aiohttp.web.Application.make_handler` support `access_log_class` (#2315) -- Build HTTP parser extension in non-strict mode by default. (#2332) + `ssl.SSLError` (`#2294 `_) +- `aiohttp.web.Application.make_handler` support `access_log_class` (`#2315 `_) +- Build HTTP parser extension in non-strict mode by default. (`#2332 `_) Bugfixes -------- -- Clear auth information on redirecting to other domain (#1699) -- Fix missing app.loop on startup hooks during tests (#2060) +- Clear auth information on redirecting to other domain (`#1699 `_) +- Fix missing app.loop on startup hooks during tests (`#2060 `_) - Fix issue with synchronous session closing when using `ClientSession` as an - asynchronous context manager. (#2063) + asynchronous context manager. (`#2063 `_) - Fix issue with `CookieJar` incorrectly expiring cookies in some edge cases. - (#2084) + (`#2084 `_) - Force use of IPv4 during test, this will make tests run in a Docker container - (#2104) + (`#2104 `_) - Warnings about unawaited coroutines now correctly point to the user's code. - (#2106) + (`#2106 `_) - Fix issue with `IndexError` being raised by the `StreamReader.iter_chunks()` - generator. (#2112) -- Support HTTP 308 Permanent redirect in client class. (#2114) -- Fix `FileResponse` sending empty chunked body on 304. (#2143) + generator. (`#2112 `_) +- Support HTTP 308 Permanent redirect in client class. (`#2114 `_) +- Fix `FileResponse` sending empty chunked body on 304. (`#2143 `_) - Do not add `Content-Length: 0` to GET/HEAD/TRACE/OPTIONS requests by default. - (#2167) -- Fix parsing the Forwarded header according to RFC 7239. (#2170) -- Securely determining remote/scheme/host #2171 (#2171) -- Fix header name parsing, if name is split into multiple lines (#2183) + (`#2167 `_) +- Fix parsing the Forwarded header according to RFC 7239. (`#2170 `_) +- Securely determining remote/scheme/host #2171 (`#2171 `_) +- Fix header name parsing, if name is split into multiple lines (`#2183 `_) - Handle session close during connection, `KeyError: - ` (#2193) + ` (`#2193 `_) - Fixes uncaught `TypeError` in `helpers.guess_filename` if `name` is not a - string (#2201) + string (`#2201 `_) - Raise OSError on async DNS lookup if resolved domain is an alias for another - one, which does not have an A or CNAME record. (#2231) -- Fix incorrect warning in `StreamReader`. (#2251) -- Properly clone state of web request (#2284) + one, which does not have an A or CNAME record. (`#2231 `_) +- Fix incorrect warning in `StreamReader`. (`#2251 `_) +- Properly clone state of web request (`#2284 `_) - Fix C HTTP parser for cases when status line is split into different TCP - packets. (#2311) -- Fix `web.FileResponse` overriding user supplied Content-Type (#2317) + packets. (`#2311 `_) +- Fix `web.FileResponse` overriding user supplied Content-Type (`#2317 `_) Improved Documentation @@ -387,32 +387,32 @@ Improved Documentation - Add a note about possible performance degradation in `await resp.text()` if charset was not provided by `Content-Type` HTTP header. Pass explicit - encoding to solve it. (#1811) -- Drop `disqus` widget from documentation pages. (#2018) -- Add a graceful shutdown section to the client usage documentation. (#2039) -- Document `connector_owner` parameter. (#2072) -- Update the doc of web.Application (#2081) -- Fix mistake about access log disabling. (#2085) + encoding to solve it. (`#1811 `_) +- Drop `disqus` widget from documentation pages. (`#2018 `_) +- Add a graceful shutdown section to the client usage documentation. (`#2039 `_) +- Document `connector_owner` parameter. (`#2072 `_) +- Update the doc of web.Application (`#2081 `_) +- Fix mistake about access log disabling. (`#2085 `_) - Add example usage of on_startup and on_shutdown signals by creating and - disposing an aiopg connection engine. (#2131) + disposing an aiopg connection engine. (`#2131 `_) - Document `encoded=True` for `yarl.URL`, it disables all yarl transformations. - (#2198) + (`#2198 `_) - Document that all app's middleware factories are run for every request. - (#2225) + (`#2225 `_) - Reflect the fact that default resolver is threaded one starting from aiohttp - 1.1 (#2228) + 1.1 (`#2228 `_) Deprecations and Removals ------------------------- -- Drop deprecated `Server.finish_connections` (#2006) +- Drop deprecated `Server.finish_connections` (`#2006 `_) - Drop %O format from logging, use %b instead. Drop %e format from logging, - environment variables are not supported anymore. (#2123) -- Drop deprecated secure_proxy_ssl_header support (#2171) + environment variables are not supported anymore. (`#2123 `_) +- Drop deprecated secure_proxy_ssl_header support (`#2171 `_) - Removed TimeService in favor of simple caching. TimeService also had a bug - where it lost about 0.5 seconds per second. (#2176) -- Drop unused response_factory from static files API (#2290) + where it lost about 0.5 seconds per second. (`#2176 `_) +- Drop unused response_factory from static files API (`#2290 `_) Misc @@ -425,13 +425,13 @@ Misc ================== - Don't raise deprecation warning on - `loop.run_until_complete(client.close())` (#2065) + `loop.run_until_complete(client.close())` (`#2065 `_) 2.2.4 (2017-08-02) ================== - Fix issue with synchronous session closing when using ClientSession - as an asynchronous context manager. (#2063) + as an asynchronous context manager. (`#2063 `_) 2.2.3 (2017-07-04) ================== @@ -449,51 +449,51 @@ Misc - Relax `yarl` requirement to 0.11+ -- Backport #2026: `session.close` *is* a coroutine (#2029) +- Backport #2026: `session.close` *is* a coroutine (`#2029 `_) 2.2.0 (2017-06-20) ================== -- Add doc for add_head, update doc for add_get. (#1944) +- Add doc for add_head, update doc for add_get. (`#1944 `_) - Fixed consecutive calls for `Response.write_eof`. - Retain method attributes (e.g. :code:`__doc__`) when registering synchronous - handlers for resources. (#1953) + handlers for resources. (`#1953 `_) -- Added signal TERM handling in `run_app` to gracefully exit (#1932) +- Added signal TERM handling in `run_app` to gracefully exit (`#1932 `_) -- Fix websocket issues caused by frame fragmentation. (#1962) +- Fix websocket issues caused by frame fragmentation. (`#1962 `_) - Raise RuntimeError is you try to set the Content Length and enable - chunked encoding at the same time (#1941) + chunked encoding at the same time (`#1941 `_) - Small update for `unittest_run_loop` -- Use CIMultiDict for ClientRequest.skip_auto_headers (#1970) +- Use CIMultiDict for ClientRequest.skip_auto_headers (`#1970 `_) - Fix wrong startup sequence: test server and `run_app()` are not raise - `DeprecationWarning` now (#1947) + `DeprecationWarning` now (`#1947 `_) -- Make sure cleanup signal is sent if startup signal has been sent (#1959) +- Make sure cleanup signal is sent if startup signal has been sent (`#1959 `_) -- Fixed server keep-alive handler, could cause 100% cpu utilization (#1955) +- Fixed server keep-alive handler, could cause 100% cpu utilization (`#1955 `_) - Connection can be destroyed before response get processed if - `await aiohttp.request(..)` is used (#1981) + `await aiohttp.request(..)` is used (`#1981 `_) -- MultipartReader does not work with -OO (#1969) +- MultipartReader does not work with -OO (`#1969 `_) -- Fixed `ClientPayloadError` with blank `Content-Encoding` header (#1931) +- Fixed `ClientPayloadError` with blank `Content-Encoding` header (`#1931 `_) -- Support `deflate` encoding implemented in `httpbin.org/deflate` (#1918) +- Support `deflate` encoding implemented in `httpbin.org/deflate` (`#1918 `_) -- Fix BadStatusLine caused by extra `CRLF` after `POST` data (#1792) +- Fix BadStatusLine caused by extra `CRLF` after `POST` data (`#1792 `_) -- Keep a reference to `ClientSession` in response object (#1985) +- Keep a reference to `ClientSession` in response object (`#1985 `_) -- Deprecate undocumented `app.on_loop_available` signal (#1978) +- Deprecate undocumented `app.on_loop_available` signal (`#1978 `_) @@ -504,54 +504,54 @@ Misc https://github.com/PyO3/tokio - Write to transport ``\r\n`` before closing after keepalive timeout, - otherwise client can not detect socket disconnection. (#1883) + otherwise client can not detect socket disconnection. (`#1883 `_) - Only call `loop.close` in `run_app` if the user did *not* supply a loop. Useful for allowing clients to specify their own cleanup before closing the asyncio loop if they wish to tightly control loop behavior -- Content disposition with semicolon in filename (#917) +- Content disposition with semicolon in filename (`#917 `_) -- Added `request_info` to response object and `ClientResponseError`. (#1733) +- Added `request_info` to response object and `ClientResponseError`. (`#1733 `_) -- Added `history` to `ClientResponseError`. (#1741) +- Added `history` to `ClientResponseError`. (`#1741 `_) -- Allow to disable redirect url re-quoting (#1474) +- Allow to disable redirect url re-quoting (`#1474 `_) -- Handle RuntimeError from transport (#1790) +- Handle RuntimeError from transport (`#1790 `_) -- Dropped "%O" in access logger (#1673) +- Dropped "%O" in access logger (`#1673 `_) - Added `args` and `kwargs` to `unittest_run_loop`. Useful with other - decorators, for example `@patch`. (#1803) + decorators, for example `@patch`. (`#1803 `_) -- Added `iter_chunks` to response.content object. (#1805) +- Added `iter_chunks` to response.content object. (`#1805 `_) - Avoid creating TimerContext when there is no timeout to allow - compatibility with Tornado. (#1817) (#1180) + compatibility with Tornado. (`#1817 `_) (`#1180 `_) - Add `proxy_from_env` to `ClientRequest` to read from environment - variables. (#1791) + variables. (`#1791 `_) -- Add DummyCookieJar helper. (#1830) +- Add DummyCookieJar helper. (`#1830 `_) -- Fix assertion errors in Python 3.4 from noop helper. (#1847) +- Fix assertion errors in Python 3.4 from noop helper. (`#1847 `_) -- Do not unquote `+` in match_info values (#1816) +- Do not unquote `+` in match_info values (`#1816 `_) - Use Forwarded, X-Forwarded-Scheme and X-Forwarded-Host for better scheme and - host resolution. (#1134) + host resolution. (`#1134 `_) -- Fix sub-application middlewares resolution order (#1853) +- Fix sub-application middlewares resolution order (`#1853 `_) -- Fix applications comparison (#1866) +- Fix applications comparison (`#1866 `_) -- Fix static location in index when prefix is used (#1662) +- Fix static location in index when prefix is used (`#1662 `_) -- Make test server more reliable (#1896) +- Make test server more reliable (`#1896 `_) - Extend list of web exceptions, add HTTPUnprocessableEntity, - HTTPFailedDependency, HTTPInsufficientStorage status codes (#1920) + HTTPFailedDependency, HTTPInsufficientStorage status codes (`#1920 `_) 2.0.7 (2017-04-12) @@ -559,57 +559,57 @@ Misc - Fix *pypi* distribution -- Fix exception description (#1807) +- Fix exception description (`#1807 `_) -- Handle socket error in FileResponse (#1773) +- Handle socket error in FileResponse (`#1773 `_) -- Cancel websocket heartbeat on close (#1793) +- Cancel websocket heartbeat on close (`#1793 `_) 2.0.6 (2017-04-04) ================== -- Keeping blank values for `request.post()` and `multipart.form()` (#1765) +- Keeping blank values for `request.post()` and `multipart.form()` (`#1765 `_) -- TypeError in data_received of ResponseHandler (#1770) +- TypeError in data_received of ResponseHandler (`#1770 `_) - Fix ``web.run_app`` not to bind to default host-port pair if only socket is - passed (#1786) + passed (`#1786 `_) 2.0.5 (2017-03-29) ================== -- Memory leak with aiohttp.request (#1756) +- Memory leak with aiohttp.request (`#1756 `_) - Disable cleanup closed ssl transports by default. - Exception in request handling if the server responds before the body - is sent (#1761) + is sent (`#1761 `_) 2.0.4 (2017-03-27) ================== -- Memory leak with aiohttp.request (#1756) +- Memory leak with aiohttp.request (`#1756 `_) -- Encoding is always UTF-8 in POST data (#1750) +- Encoding is always UTF-8 in POST data (`#1750 `_) -- Do not add "Content-Disposition" header by default (#1755) +- Do not add "Content-Disposition" header by default (`#1755 `_) 2.0.3 (2017-03-24) ================== -- Call https website through proxy will cause error (#1745) +- Call https website through proxy will cause error (`#1745 `_) -- Fix exception on multipart/form-data post if content-type is not set (#1743) +- Fix exception on multipart/form-data post if content-type is not set (`#1743 `_) 2.0.2 (2017-03-21) ================== -- Fixed Application.on_loop_available signal (#1739) +- Fixed Application.on_loop_available signal (`#1739 `_) - Remove debug code @@ -617,21 +617,21 @@ Misc 2.0.1 (2017-03-21) ================== -- Fix allow-head to include name on route (#1737) +- Fix allow-head to include name on route (`#1737 `_) -- Fixed AttributeError in WebSocketResponse.can_prepare (#1736) +- Fixed AttributeError in WebSocketResponse.can_prepare (`#1736 `_) 2.0.0 (2017-03-20) ================== -- Added `json` to `ClientSession.request()` method (#1726) +- Added `json` to `ClientSession.request()` method (`#1726 `_) - Added session's `raise_for_status` parameter, automatically calls - raise_for_status() on any request. (#1724) + raise_for_status() on any request. (`#1724 `_) - `response.json()` raises `ClientReponseError` exception if response's - content type does not match (#1723) + content type does not match (`#1723 `_) - Cleanup timer and loop handle on any client exception. @@ -641,25 +641,25 @@ Misc `2.0.0rc1` (2017-03-15) ======================= -- Properly handle payload errors (#1710) +- Properly handle payload errors (`#1710 `_) -- Added `ClientWebSocketResponse.get_extra_info()` (#1717) +- Added `ClientWebSocketResponse.get_extra_info()` (`#1717 `_) - It is not possible to combine Transfer-Encoding and chunked parameter, - same for compress and Content-Encoding (#1655) + same for compress and Content-Encoding (`#1655 `_) - Connector's `limit` parameter indicates total concurrent connections. - New `limit_per_host` added, indicates total connections per endpoint. (#1601) + New `limit_per_host` added, indicates total connections per endpoint. (`#1601 `_) -- Use url's `raw_host` for name resolution (#1685) +- Use url's `raw_host` for name resolution (`#1685 `_) -- Change `ClientResponse.url` to `yarl.URL` instance (#1654) +- Change `ClientResponse.url` to `yarl.URL` instance (`#1654 `_) -- Add max_size parameter to web.Request reading methods (#1133) +- Add max_size parameter to web.Request reading methods (`#1133 `_) -- Web Request.post() stores data in temp files (#1469) +- Web Request.post() stores data in temp files (`#1469 `_) -- Add the `allow_head=True` keyword argument for `add_get` (#1618) +- Add the `allow_head=True` keyword argument for `add_get` (`#1618 `_) - `run_app` and the Command Line Interface now support serving over Unix domain sockets for faster inter-process communication. @@ -668,54 +668,54 @@ Misc e.g. for socket-based activated applications, when binding of a socket is done by the parent process. -- Implementation for Trailer headers parser is broken (#1619) +- Implementation for Trailer headers parser is broken (`#1619 `_) - Fix FileResponse to not fall on bad request (range out of file size) - Fix FileResponse to correct stream video to Chromes -- Deprecate public low-level api (#1657) +- Deprecate public low-level api (`#1657 `_) - Deprecate `encoding` parameter for ClientSession.request() method -- Dropped aiohttp.wsgi (#1108) +- Dropped aiohttp.wsgi (`#1108 `_) - Dropped `version` from ClientSession.request() method -- Dropped websocket version 76 support (#1160) +- Dropped websocket version 76 support (`#1160 `_) -- Dropped: `aiohttp.protocol.HttpPrefixParser` (#1590) +- Dropped: `aiohttp.protocol.HttpPrefixParser` (`#1590 `_) - Dropped: Servers response's `.started`, `.start()` and - `.can_start()` method (#1591) + `.can_start()` method (`#1591 `_) - Dropped: Adding `sub app` via `app.router.add_subapp()` is deprecated - use `app.add_subapp()` instead (#1592) + use `app.add_subapp()` instead (`#1592 `_) -- Dropped: `Application.finish()` and `Application.register_on_finish()` (#1602) +- Dropped: `Application.finish()` and `Application.register_on_finish()` (`#1602 `_) - Dropped: `web.Request.GET` and `web.Request.POST` - Dropped: aiohttp.get(), aiohttp.options(), aiohttp.head(), aiohttp.post(), aiohttp.put(), aiohttp.patch(), aiohttp.delete(), and - aiohttp.ws_connect() (#1593) + aiohttp.ws_connect() (`#1593 `_) -- Dropped: `aiohttp.web.WebSocketResponse.receive_msg()` (#1605) +- Dropped: `aiohttp.web.WebSocketResponse.receive_msg()` (`#1605 `_) - Dropped: `ServerHttpProtocol.keep_alive_timeout` attribute and - `keep-alive`, `keep_alive_on`, `timeout`, `log` constructor parameters (#1606) + `keep-alive`, `keep_alive_on`, `timeout`, `log` constructor parameters (`#1606 `_) - Dropped: `TCPConnector's`` `.resolve`, `.resolved_hosts`, `.clear_resolved_hosts()` attributes and `resolve` constructor - parameter (#1607) + parameter (`#1607 `_) -- Dropped `ProxyConnector` (#1609) +- Dropped `ProxyConnector` (`#1609 `_) 1.3.5 (2017-03-16) ================== -- Fixed None timeout support (#1720) +- Fixed None timeout support (`#1720 `_) 1.3.4 (2017-03-14) @@ -729,30 +729,30 @@ Misc - Fix file_sender to correct stream video to Chromes -- Fix NotImplementedError server exception (#1703) +- Fix NotImplementedError server exception (`#1703 `_) -- Clearer error message for URL without a host name. (#1691) +- Clearer error message for URL without a host name. (`#1691 `_) -- Silence deprecation warning in __repr__ (#1690) +- Silence deprecation warning in __repr__ (`#1690 `_) -- IDN + HTTPS = `ssl.CertificateError` (#1685) +- IDN + HTTPS = `ssl.CertificateError` (`#1685 `_) 1.3.3 (2017-02-19) ================== -- Fixed memory leak in time service (#1656) +- Fixed memory leak in time service (`#1656 `_) 1.3.2 (2017-02-16) ================== -- Awaiting on WebSocketResponse.send_* does not work (#1645) +- Awaiting on WebSocketResponse.send_* does not work (`#1645 `_) - Fix multiple calls to client ws_connect when using a shared header - dict (#1643) + dict (`#1643 `_) -- Make CookieJar.filter_cookies() accept plain string parameter. (#1636) +- Make CookieJar.filter_cookies() accept plain string parameter. (`#1636 `_) 1.3.1 (2017-02-09) @@ -760,65 +760,65 @@ Misc - Handle CLOSING in WebSocketResponse.__anext__ -- Fixed AttributeError 'drain' for server websocket handler (#1613) +- Fixed AttributeError 'drain' for server websocket handler (`#1613 `_) 1.3.0 (2017-02-08) ================== - Multipart writer validates the data on append instead of on a - request send (#920) + request send (`#920 `_) - Multipart reader accepts multipart messages with or without their epilogue - to consistently handle valid and legacy behaviors (#1526) (#1581) + to consistently handle valid and legacy behaviors (`#1526 `_) (`#1581 `_) - Separate read + connect + request timeouts # 1523 -- Do not swallow Upgrade header (#1587) +- Do not swallow Upgrade header (`#1587 `_) -- Fix polls demo run application (#1487) +- Fix polls demo run application (`#1487 `_) -- Ignore unknown 1XX status codes in client (#1353) +- Ignore unknown 1XX status codes in client (`#1353 `_) -- Fix sub-Multipart messages missing their headers on serialization (#1525) +- Fix sub-Multipart messages missing their headers on serialization (`#1525 `_) - Do not use readline when reading the content of a part - in the multipart reader (#1535) + in the multipart reader (`#1535 `_) -- Add optional flag for quoting `FormData` fields (#916) +- Add optional flag for quoting `FormData` fields (`#916 `_) -- 416 Range Not Satisfiable if requested range end > file size (#1588) +- 416 Range Not Satisfiable if requested range end > file size (`#1588 `_) -- Having a `:` or `@` in a route does not work (#1552) +- Having a `:` or `@` in a route does not work (`#1552 `_) - Added `receive_timeout` timeout for websocket to receive complete - message. (#1325) + message. (`#1325 `_) - Added `heartbeat` parameter for websocket to automatically send - `ping` message. (#1024) (#777) + `ping` message. (`#1024 `_) (`#777 `_) -- Remove `web.Application` dependency from `web.UrlDispatcher` (#1510) +- Remove `web.Application` dependency from `web.UrlDispatcher` (`#1510 `_) -- Accepting back-pressure from slow websocket clients (#1367) +- Accepting back-pressure from slow websocket clients (`#1367 `_) -- Do not pause transport during set_parser stage (#1211) +- Do not pause transport during set_parser stage (`#1211 `_) -- Lingering close does not terminate before timeout (#1559) +- Lingering close does not terminate before timeout (`#1559 `_) -- `setsockopt` may raise `OSError` exception if socket is closed already (#1595) +- `setsockopt` may raise `OSError` exception if socket is closed already (`#1595 `_) -- Lots of CancelledError when requests are interrupted (#1565) +- Lots of CancelledError when requests are interrupted (`#1565 `_) - Allow users to specify what should happen to decoding errors - when calling a responses `text()` method (#1542) + when calling a responses `text()` method (`#1542 `_) -- Back port std module `http.cookies` for python3.4.2 (#1566) +- Back port std module `http.cookies` for python3.4.2 (`#1566 `_) -- Maintain url's fragment in client response (#1314) +- Maintain url's fragment in client response (`#1314 `_) -- Allow concurrently close WebSocket connection (#754) +- Allow concurrently close WebSocket connection (`#754 `_) -- Gzipped responses with empty body raises ContentEncodingError (#609) +- Gzipped responses with empty body raises ContentEncodingError (`#609 `_) - Return 504 if request handle raises TimeoutError. @@ -828,25 +828,25 @@ Misc message during client response release - Abort closed ssl client transports, broken servers can keep socket - open un-limit time (#1568) + open un-limit time (`#1568 `_) - Log warning instead of `RuntimeError` is websocket connection is closed. - Deprecated: `aiohttp.protocol.HttpPrefixParser` - will be removed in 1.4 (#1590) + will be removed in 1.4 (`#1590 `_) - Deprecated: Servers response's `.started`, `.start()` and - `.can_start()` method will be removed in 1.4 (#1591) + `.can_start()` method will be removed in 1.4 (`#1591 `_) - Deprecated: Adding `sub app` via `app.router.add_subapp()` is deprecated - use `app.add_subapp()` instead, will be removed in 1.4 (#1592) + use `app.add_subapp()` instead, will be removed in 1.4 (`#1592 `_) - Deprecated: aiohttp.get(), aiohttp.options(), aiohttp.head(), aiohttp.post(), aiohttp.put(), aiohttp.patch(), aiohttp.delete(), and aiohttp.ws_connect() - will be removed in 1.4 (#1593) + will be removed in 1.4 (`#1593 `_) - Deprecated: `Application.finish()` and `Application.register_on_finish()` - will be removed in 1.4 (#1602) + will be removed in 1.4 (`#1602 `_) 1.2.0 (2016-12-17) @@ -854,13 +854,13 @@ Misc - Extract `BaseRequest` from `web.Request`, introduce `web.Server` (former `RequestHandlerFactory`), introduce new low-level web server - which is not coupled with `web.Application` and routing (#1362) + which is not coupled with `web.Application` and routing (`#1362 `_) -- Make `TestServer.make_url` compatible with `yarl.URL` (#1389) +- Make `TestServer.make_url` compatible with `yarl.URL` (`#1389 `_) -- Implement range requests for static files (#1382) +- Implement range requests for static files (`#1382 `_) -- Support task attribute for StreamResponse (#1410) +- Support task attribute for StreamResponse (`#1410 `_) - Drop `TestClient.app` property, use `TestClient.server.app` instead (BACKWARD INCOMPATIBLE) @@ -871,84 +871,84 @@ Misc - `TestClient.server` property returns a test server instance, was `asyncio.AbstractServer` (BACKWARD INCOMPATIBLE) -- Follow gunicorn's signal semantics in `Gunicorn[UVLoop]WebWorker` (#1201) +- Follow gunicorn's signal semantics in `Gunicorn[UVLoop]WebWorker` (`#1201 `_) - Call worker_int and worker_abort callbacks in - `Gunicorn[UVLoop]WebWorker` (#1202) + `Gunicorn[UVLoop]WebWorker` (`#1202 `_) -- Has functional tests for client proxy (#1218) +- Has functional tests for client proxy (`#1218 `_) -- Fix bugs with client proxy target path and proxy host with port (#1413) +- Fix bugs with client proxy target path and proxy host with port (`#1413 `_) -- Fix bugs related to the use of unicode hostnames (#1444) +- Fix bugs related to the use of unicode hostnames (`#1444 `_) -- Preserve cookie quoting/escaping (#1453) +- Preserve cookie quoting/escaping (`#1453 `_) -- FileSender will send gzipped response if gzip version available (#1426) +- FileSender will send gzipped response if gzip version available (`#1426 `_) - Don't override `Content-Length` header in `web.Response` if no body - was set (#1400) + was set (`#1400 `_) -- Introduce `router.post_init()` for solving (#1373) +- Introduce `router.post_init()` for solving (`#1373 `_) - Fix raise error in case of multiple calls of `TimeServive.stop()` -- Allow to raise web exceptions on router resolving stage (#1460) +- Allow to raise web exceptions on router resolving stage (`#1460 `_) -- Add a warning for session creation outside of coroutine (#1468) +- Add a warning for session creation outside of coroutine (`#1468 `_) - Avoid a race when application might start accepting incoming requests but startup signals are not processed yet e98e8c6 - Raise a `RuntimeError` when trying to change the status of the HTTP response - after the headers have been sent (#1480) + after the headers have been sent (`#1480 `_) -- Fix bug with https proxy acquired cleanup (#1340) +- Fix bug with https proxy acquired cleanup (`#1340 `_) -- Use UTF-8 as the default encoding for multipart text parts (#1484) +- Use UTF-8 as the default encoding for multipart text parts (`#1484 `_) 1.1.6 (2016-11-28) ================== - Fix `BodyPartReader.read_chunk` bug about returns zero bytes before - `EOF` (#1428) + `EOF` (`#1428 `_) 1.1.5 (2016-11-16) ================== -- Fix static file serving in fallback mode (#1401) +- Fix static file serving in fallback mode (`#1401 `_) 1.1.4 (2016-11-14) ================== -- Make `TestServer.make_url` compatible with `yarl.URL` (#1389) +- Make `TestServer.make_url` compatible with `yarl.URL` (`#1389 `_) - Generate informative exception on redirects from server which - does not provide redirection headers (#1396) + does not provide redirection headers (`#1396 `_) 1.1.3 (2016-11-10) ================== -- Support *root* resources for sub-applications (#1379) +- Support *root* resources for sub-applications (`#1379 `_) 1.1.2 (2016-11-08) ================== -- Allow starting variables with an underscore (#1379) +- Allow starting variables with an underscore (`#1379 `_) -- Properly process UNIX sockets by gunicorn worker (#1375) +- Properly process UNIX sockets by gunicorn worker (`#1375 `_) - Fix ordering for `FrozenList` -- Don't propagate pre and post signals to sub-application (#1377) +- Don't propagate pre and post signals to sub-application (`#1377 `_) 1.1.1 (2016-11-04) ================== -- Fix documentation generation (#1120) +- Fix documentation generation (`#1120 `_) 1.1.0 (2016-11-03) ================== @@ -956,23 +956,23 @@ Misc - 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) + but `ClientResponse.url` is an `yarl.URL` instance now. (`#1217 `_) -- Close idle keep-alive connections on shutdown (#1222) +- Close idle keep-alive connections on shutdown (`#1222 `_) -- Modify regex in AccessLogger to accept underscore and numbers (#1225) +- 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) + now. (`#1224 `_) -- Accept `yarl.URL` by server redirections (#1278) +- Accept `yarl.URL` by server redirections (`#1278 `_) -- Return `yarl.URL` by `.make_url()` testing utility (#1279) +- Return `yarl.URL` by `.make_url()` testing utility (`#1279 `_) -- Properly format IPv6 addresses by `aiohttp.web.run_app` (#1139) +- Properly format IPv6 addresses by `aiohttp.web.run_app` (`#1139 `_) -- Use `yarl.URL` by server API (#1288) +- Use `yarl.URL` by server API (`#1288 `_) * Introduce `resource.url_for()`, deprecate `resource.url()`. @@ -983,38 +983,38 @@ Misc * Drop old-style routes: `Route`, `PlainRoute`, `DynamicRoute`, `StaticRoute`, `ResourceAdapter`. -- Revert `resp.url` back to `str`, introduce `resp.url_obj` (#1292) +- Revert `resp.url` back to `str`, introduce `resp.url_obj` (`#1292 `_) -- Raise ValueError if BasicAuth login has a ":" character (#1307) +- Raise ValueError if BasicAuth login has a ":" character (`#1307 `_) - Fix bug when ClientRequest send payload file with opened as - open('filename', 'r+b') (#1306) + open('filename', 'r+b') (`#1306 `_) -- Enhancement to AccessLogger (pass *extra* dict) (#1303) +- Enhancement to AccessLogger (pass *extra* dict) (`#1303 `_) -- Show more verbose message on import errors (#1319) +- Show more verbose message on import errors (`#1319 `_) -- Added save and load functionality for `CookieJar` (#1219) +- Added save and load functionality for `CookieJar` (`#1219 `_) -- Added option on `StaticRoute` to follow symlinks (#1299) +- Added option on `StaticRoute` to follow symlinks (`#1299 `_) -- Force encoding of `application/json` content type to utf-8 (#1339) +- Force encoding of `application/json` content type to utf-8 (`#1339 `_) -- Fix invalid invocations of `errors.LineTooLong` (#1335) +- Fix invalid invocations of `errors.LineTooLong` (`#1335 `_) -- Websockets: Stop `async for` iteration when connection is closed (#1144) +- Websockets: Stop `async for` iteration when connection is closed (`#1144 `_) -- Ensure TestClient HTTP methods return a context manager (#1318) +- 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) + if `ClientSession` object is closed by client when reading data. (`#1323 `_) -- Document deployment without `Gunicorn` (#1120) +- Document deployment without `Gunicorn` (`#1120 `_) - Add deprecation warning for MD5 and SHA1 digests when used for fingerprint - of site certs in TCPConnector. (#1186) + of site certs in TCPConnector. (`#1186 `_) -- Implement sub-applications (#1301) +- Implement sub-applications (`#1301 `_) - Don't inherit `web.Request` from `dict` but implement `MutableMapping` protocol. @@ -1039,55 +1039,55 @@ Misc 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) +- Boost performance by adding a custom time service (`#1350 `_) - Extend `ClientResponse` with `content_type` and `charset` - properties like in `web.Request`. (#1349) + properties like in `web.Request`. (`#1349 `_) -- Disable aiodns by default (#559) +- Disable aiodns by default (`#559 `_) - Don't flap `tcp_cork` in client code, use TCP_NODELAY mode by default. -- Implement `web.Request.clone()` (#1361) +- Implement `web.Request.clone()` (`#1361 `_) 1.0.5 (2016-10-11) ================== - Fix StreamReader._read_nowait to return all available - data up to the requested amount (#1297) + data up to the requested amount (`#1297 `_) 1.0.4 (2016-09-22) ================== - Fix FlowControlStreamReader.read_nowait so that it checks - whether the transport is paused (#1206) + whether the transport is paused (`#1206 `_) 1.0.2 (2016-09-22) ================== -- Make CookieJar compatible with 32-bit systems (#1188) +- Make CookieJar compatible with 32-bit systems (`#1188 `_) -- Add missing `WSMsgType` to `web_ws.__all__`, see (#1200) +- Add missing `WSMsgType` to `web_ws.__all__`, see (`#1200 `_) -- Fix `CookieJar` ctor when called with `loop=None` (#1203) +- Fix `CookieJar` ctor when called with `loop=None` (`#1203 `_) -- Fix broken upper-casing in wsgi support (#1197) +- Fix broken upper-casing in wsgi support (`#1197 `_) 1.0.1 (2016-09-16) ================== - Restore `aiohttp.web.MsgType` alias for `aiohttp.WSMsgType` for sake - of backward compatibility (#1178) + of backward compatibility (`#1178 `_) - Tune alabaster schema. - Use `text/html` content type for displaying index pages by static file handler. -- Fix `AssertionError` in static file handling (#1177) +- Fix `AssertionError` in static file handling (`#1177 `_) - Fix access log formats `%O` and `%b` for static file handling @@ -1099,9 +1099,9 @@ Misc ================== - Change default size for client session's connection pool from - unlimited to 20 (#977) + unlimited to 20 (`#977 `_) -- Add IE support for cookie deletion. (#994) +- Add IE support for cookie deletion. (`#994 `_) - Remove deprecated `WebSocketResponse.wait_closed` method (BACKWARD INCOMPATIBLE) @@ -1110,26 +1110,26 @@ Misc method (BACKWARD INCOMPATIBLE) - Avoid using of mutable CIMultiDict kw param in make_mocked_request - (#997) + (`#997 `_) - Make WebSocketResponse.close a little bit faster by avoiding new task creating just for timeout measurement - Add `proxy` and `proxy_auth` params to `client.get()` and family, - deprecate `ProxyConnector` (#998) + deprecate `ProxyConnector` (`#998 `_) - Add support for websocket send_json and receive_json, synchronize - server and client API for websockets (#984) + server and client API for websockets (`#984 `_) - Implement router shourtcuts for most useful HTTP methods, use `app.router.add_get()`, `app.router.add_post()` etc. instead of - `app.router.add_route()` (#986) + `app.router.add_route()` (`#986 `_) -- Support SSL connections for gunicorn worker (#1003) +- Support SSL connections for gunicorn worker (`#1003 `_) - Move obsolete examples to legacy folder -- Switch to multidict 2.0 and title-cased strings (#1015) +- Switch to multidict 2.0 and title-cased strings (`#1015 `_) - `{FOO}e` logger format is case-sensitive now @@ -1145,9 +1145,9 @@ Misc - Remove deprecated decode param from resp.read(decode=True) -- Use 5min default client timeout (#1028) +- Use 5min default client timeout (`#1028 `_) -- Relax HTTP method validation in UrlDispatcher (#1037) +- Relax HTTP method validation in UrlDispatcher (`#1037 `_) - Pin minimal supported asyncio version to 3.4.2+ (`loop.is_close()` should be present) @@ -1157,84 +1157,84 @@ Misc - Link header for 451 status code is mandatory -- Fix test_client fixture to allow multiple clients per test (#1072) +- Fix test_client fixture to allow multiple clients per test (`#1072 `_) -- make_mocked_request now accepts dict as headers (#1073) +- make_mocked_request now accepts dict as headers (`#1073 `_) - Add Python 3.5.2/3.6+ compatibility patch for async generator - protocol change (#1082) + protocol change (`#1082 `_) -- Improvement test_client can accept instance object (#1083) +- Improvement test_client can accept instance object (`#1083 `_) -- Simplify ServerHttpProtocol implementation (#1060) +- Simplify ServerHttpProtocol implementation (`#1060 `_) - Add a flag for optional showing directory index for static file - handling (#921) + handling (`#921 `_) -- Define `web.Application.on_startup()` signal handler (#1103) +- Define `web.Application.on_startup()` signal handler (`#1103 `_) -- Drop ChunkedParser and LinesParser (#1111) +- Drop ChunkedParser and LinesParser (`#1111 `_) -- Call `Application.startup` in GunicornWebWorker (#1105) +- Call `Application.startup` in GunicornWebWorker (`#1105 `_) - Fix client handling hostnames with 63 bytes when a port is given in - the url (#1044) + the url (`#1044 `_) -- Implement proxy support for ClientSession.ws_connect (#1025) +- Implement proxy support for ClientSession.ws_connect (`#1025 `_) -- Return named tuple from WebSocketResponse.can_prepare (#1016) +- Return named tuple from WebSocketResponse.can_prepare (`#1016 `_) -- Fix access_log_format in `GunicornWebWorker` (#1117) +- Fix access_log_format in `GunicornWebWorker` (`#1117 `_) -- Setup Content-Type to application/octet-stream by default (#1124) +- Setup Content-Type to application/octet-stream by default (`#1124 `_) - Deprecate debug parameter from app.make_handler(), use - `Application(debug=True)` instead (#1121) + `Application(debug=True)` instead (`#1121 `_) -- Remove fragment string in request path (#846) +- Remove fragment string in request path (`#846 `_) -- Use aiodns.DNSResolver.gethostbyname() if available (#1136) +- Use aiodns.DNSResolver.gethostbyname() if available (`#1136 `_) -- Fix static file sending on uvloop when sendfile is available (#1093) +- Fix static file sending on uvloop when sendfile is available (`#1093 `_) -- Make prettier urls if query is empty dict (#1143) +- Make prettier urls if query is empty dict (`#1143 `_) -- Fix redirects for HEAD requests (#1147) +- Fix redirects for HEAD requests (`#1147 `_) -- Default value for `StreamReader.read_nowait` is -1 from now (#1150) +- Default value for `StreamReader.read_nowait` is -1 from now (`#1150 `_) - `aiohttp.StreamReader` is not inherited from `asyncio.StreamReader` from now - (BACKWARD INCOMPATIBLE) (#1150) + (BACKWARD INCOMPATIBLE) (`#1150 `_) -- Streams documentation added (#1150) +- Streams documentation added (`#1150 `_) -- Add `multipart` coroutine method for web Request object (#1067) +- Add `multipart` coroutine method for web Request object (`#1067 `_) -- Publish ClientSession.loop property (#1149) +- Publish ClientSession.loop property (`#1149 `_) -- Fix static file with spaces (#1140) +- Fix static file with spaces (`#1140 `_) -- Fix piling up asyncio loop by cookie expiration callbacks (#1061) +- Fix piling up asyncio loop by cookie expiration callbacks (`#1061 `_) - Drop `Timeout` class for sake of `async_timeout` external library. `aiohttp.Timeout` is an alias for `async_timeout.timeout` - `use_dns_cache` parameter of `aiohttp.TCPConnector` is `True` by - default (BACKWARD INCOMPATIBLE) (#1152) + default (BACKWARD INCOMPATIBLE) (`#1152 `_) - `aiohttp.TCPConnector` uses asynchronous DNS resolver if available by - default (BACKWARD INCOMPATIBLE) (#1152) + default (BACKWARD INCOMPATIBLE) (`#1152 `_) -- Conform to RFC3986 - do not include url fragments in client requests (#1174) +- Conform to RFC3986 - do not include url fragments in client requests (`#1174 `_) -- Drop `ClientSession.cookies` (BACKWARD INCOMPATIBLE) (#1173) +- Drop `ClientSession.cookies` (BACKWARD INCOMPATIBLE) (`#1173 `_) -- Refactor `AbstractCookieJar` public API (BACKWARD INCOMPATIBLE) (#1173) +- Refactor `AbstractCookieJar` public API (BACKWARD INCOMPATIBLE) (`#1173 `_) - Fix clashing cookies with have the same name but belong to different - domains (BACKWARD INCOMPATIBLE) (#1125) + domains (BACKWARD INCOMPATIBLE) (`#1125 `_) -- Support binary Content-Transfer-Encoding (#1169) +- Support binary Content-Transfer-Encoding (`#1169 `_) 0.22.5 (08-02-2016) @@ -1245,17 +1245,17 @@ Misc 0.22.3 (07-26-2016) =================== -- Do not filter cookies if unsafe flag provided (#1005) +- Do not filter cookies if unsafe flag provided (`#1005 `_) 0.22.2 (07-23-2016) =================== -- Suppress CancelledError when Timeout raises TimeoutError (#970) +- Suppress CancelledError when Timeout raises TimeoutError (`#970 `_) - Don't expose `aiohttp.__version__` -- Add unsafe parameter to CookieJar (#968) +- Add unsafe parameter to CookieJar (`#968 `_) - Use unsafe cookie jar in test client tools @@ -1266,88 +1266,88 @@ Misc =================== - Large cookie expiration/max-age does not break an event loop from now - (fixes (#967)) + (fixes (`#967 `_)) 0.22.0 (07-15-2016) =================== -- Fix bug in serving static directory (#803) +- Fix bug in serving static directory (`#803 `_) -- Fix command line arg parsing (#797) +- Fix command line arg parsing (`#797 `_) -- Fix a documentation chapter about cookie usage (#790) +- Fix a documentation chapter about cookie usage (`#790 `_) -- Handle empty body with gzipped encoding (#758) +- Handle empty body with gzipped encoding (`#758 `_) -- Support 451 Unavailable For Legal Reasons http status (#697) +- Support 451 Unavailable For Legal Reasons http status (`#697 `_) -- Fix Cookie share example and few small typos in docs (#817) +- Fix Cookie share example and few small typos in docs (`#817 `_) -- UrlDispatcher.add_route with partial coroutine handler (#814) +- UrlDispatcher.add_route with partial coroutine handler (`#814 `_) -- Optional support for aiodns (#728) +- Optional support for aiodns (`#728 `_) -- Add ServiceRestart and TryAgainLater websocket close codes (#828) +- Add ServiceRestart and TryAgainLater websocket close codes (`#828 `_) -- Fix prompt message for `web.run_app` (#832) +- Fix prompt message for `web.run_app` (`#832 `_) -- Allow to pass None as a timeout value to disable timeout logic (#834) +- Allow to pass None as a timeout value to disable timeout logic (`#834 `_) -- Fix leak of connection slot during connection error (#835) +- Fix leak of connection slot during connection error (`#835 `_) - Gunicorn worker with uvloop support - `aiohttp.worker.GunicornUVLoopWebWorker` (#878) + `aiohttp.worker.GunicornUVLoopWebWorker` (`#878 `_) -- Don't send body in response to HEAD request (#838) +- Don't send body in response to HEAD request (`#838 `_) -- Skip the preamble in MultipartReader (#881) +- Skip the preamble in MultipartReader (`#881 `_) -- Implement BasicAuth decode classmethod. (#744) +- Implement BasicAuth decode classmethod. (`#744 `_) -- Don't crash logger when transport is None (#889) +- Don't crash logger when transport is None (`#889 `_) - Use a create_future compatibility wrapper instead of creating - Futures directly (#896) + Futures directly (`#896 `_) -- Add test utilities to aiohttp (#902) +- Add test utilities to aiohttp (`#902 `_) -- Improve Request.__repr__ (#875) +- Improve Request.__repr__ (`#875 `_) -- Skip DNS resolving if provided host is already an ip address (#874) +- Skip DNS resolving if provided host is already an ip address (`#874 `_) -- Add headers to ClientSession.ws_connect (#785) +- Add headers to ClientSession.ws_connect (`#785 `_) -- Document that server can send pre-compressed data (#906) +- Document that server can send pre-compressed data (`#906 `_) -- Don't add Content-Encoding and Transfer-Encoding if no body (#891) +- Don't add Content-Encoding and Transfer-Encoding if no body (`#891 `_) -- Add json() convenience methods to websocket message objects (#897) +- Add json() convenience methods to websocket message objects (`#897 `_) -- Add client_resp.raise_for_status() (#908) +- Add client_resp.raise_for_status() (`#908 `_) -- Implement cookie filter (#799) +- Implement cookie filter (`#799 `_) -- Include an example of middleware to handle error pages (#909) +- Include an example of middleware to handle error pages (`#909 `_) -- Fix error handling in StaticFileMixin (#856) +- Fix error handling in StaticFileMixin (`#856 `_) -- Add mocked request helper (#900) +- Add mocked request helper (`#900 `_) -- Fix empty ALLOW Response header for cls based View (#929) +- Fix empty ALLOW Response header for cls based View (`#929 `_) -- Respect CONNECT method to implement a proxy server (#847) +- Respect CONNECT method to implement a proxy server (`#847 `_) -- Add pytest_plugin (#914) +- Add pytest_plugin (`#914 `_) - Add tutorial - Add backlog option to support more than 128 (default value in - "create_server" function) concurrent connections (#892) + "create_server" function) concurrent connections (`#892 `_) -- Allow configuration of header size limits (#912) +- Allow configuration of header size limits (`#912 `_) -- Separate sending file logic from StaticRoute dispatcher (#901) +- Separate sending file logic from StaticRoute dispatcher (`#901 `_) - Drop deprecated share_cookies connector option (BACKWARD INCOMPATIBLE) @@ -1360,28 +1360,28 @@ Misc - Drop all mentions about api changes in documentation for versions older than 0.16 -- Allow to override default cookie jar (#963) +- Allow to override default cookie jar (`#963 `_) - Add manylinux wheel builds -- Dup a socket for sendfile usage (#964) +- Dup a socket for sendfile usage (`#964 `_) 0.21.6 (05-05-2016) =================== -- Drop initial query parameters on redirects (#853) +- Drop initial query parameters on redirects (`#853 `_) 0.21.5 (03-22-2016) =================== -- Fix command line arg parsing (#797) +- Fix command line arg parsing (`#797 `_) 0.21.4 (03-12-2016) =================== - Fix ResourceAdapter: don't add method to allowed if resource is not - match (#826) + match (`#826 `_) - Fix Resource: append found method to returned allowed methods @@ -1389,12 +1389,12 @@ Misc =================== - Fix a regression: support for handling ~/path in static file routes was - broken (#782) + broken (`#782 `_) 0.21.1 (02-10-2016) =================== -- Make new resources classes public (#767) +- Make new resources classes public (`#767 `_) - Add `router.resources()` view @@ -1403,22 +1403,22 @@ Misc 0.21.0 (02-04-2016) =================== -- Introduce on_shutdown signal (#722) +- Introduce on_shutdown signal (`#722 `_) -- Implement raw input headers (#726) +- Implement raw input headers (`#726 `_) -- Implement web.run_app utility function (#734) +- Implement web.run_app utility function (`#734 `_) - Introduce on_cleanup signal - Deprecate Application.finish() / Application.register_on_finish() in favor of on_cleanup. -- Get rid of bare aiohttp.request(), aiohttp.get() and family in docs (#729) +- Get rid of bare aiohttp.request(), aiohttp.get() and family in docs (`#729 `_) -- Deprecate bare aiohttp.request(), aiohttp.get() and family (#729) +- Deprecate bare aiohttp.request(), aiohttp.get() and family (`#729 `_) -- Refactor keep-alive support (#737): +- Refactor keep-alive support (`#737 `_): - Enable keepalive for HTTP 1.0 by default @@ -1437,18 +1437,18 @@ Misc - don't send `Connection` header for HTTP 1.0 - Add version parameter to ClientSession constructor, - deprecate it for session.request() and family (#736) + deprecate it for session.request() and family (`#736 `_) -- Enable access log by default (#735) +- Enable access log by default (`#735 `_) - Deprecate app.router.register_route() (the method was not documented intentionally BTW). - Deprecate app.router.named_routes() in favor of app.router.named_resources() -- route.add_static accepts pathlib.Path now (#743) +- route.add_static accepts pathlib.Path now (`#743 `_) -- Add command line support: `$ python -m aiohttp.web package.main` (#740) +- Add command line support: `$ python -m aiohttp.web package.main` (`#740 `_) - FAQ section was added to docs. Enjoy and fill free to contribute new topics @@ -1456,32 +1456,32 @@ Misc - Document ClientResponse's host, method, url properties -- Use CORK/NODELAY in client API (#748) +- Use CORK/NODELAY in client API (`#748 `_) - ClientSession.close and Connector.close are coroutines now - Close client connection on exception in ClientResponse.release() -- Allow to read multipart parts without content-length specified (#750) +- Allow to read multipart parts without content-length specified (`#750 `_) -- Add support for unix domain sockets to gunicorn worker (#470) +- Add support for unix domain sockets to gunicorn worker (`#470 `_) -- Add test for default Expect handler (#601) +- Add test for default Expect handler (`#601 `_) - Add the first demo project -- Rename `loader` keyword argument in `web.Request.json` method. (#646) +- Rename `loader` keyword argument in `web.Request.json` method. (`#646 `_) -- Add local socket binding for TCPConnector (#678) +- Add local socket binding for TCPConnector (`#678 `_) 0.20.2 (01-07-2016) =================== -- Enable use of `await` for a class based view (#717) +- Enable use of `await` for a class based view (`#717 `_) -- Check address family to fill wsgi env properly (#718) +- Check address family to fill wsgi env properly (`#718 `_) -- Fix memory leak in headers processing (thanks to Marco Paolini) (#723) +- Fix memory leak in headers processing (thanks to Marco Paolini) (`#723 `_) 0.20.1 (12-30-2015) =================== @@ -1489,7 +1489,7 @@ Misc - Raise RuntimeError is Timeout context manager was used outside of task context. -- Add number of bytes to stream.read_nowait (#700) +- Add number of bytes to stream.read_nowait (`#700 `_) - Use X-FORWARDED-PROTO for wsgi.url_scheme when available @@ -1500,19 +1500,19 @@ Misc - Extend list of web exceptions, add HTTPMisdirectedRequest, HTTPUpgradeRequired, HTTPPreconditionRequired, HTTPTooManyRequests, HTTPRequestHeaderFieldsTooLarge, HTTPVariantAlsoNegotiates, - HTTPNotExtended, HTTPNetworkAuthenticationRequired status codes (#644) + HTTPNotExtended, HTTPNetworkAuthenticationRequired status codes (`#644 `_) -- Do not remove AUTHORIZATION header by WSGI handler (#649) +- Do not remove AUTHORIZATION header by WSGI handler (`#649 `_) -- Fix broken support for https proxies with authentication (#617) +- Fix broken support for https proxies with authentication (`#617 `_) - Get REMOTE_* and SEVER_* http vars from headers when listening on - unix socket (#654) + unix socket (`#654 `_) -- Add HTTP 308 support (#663) +- Add HTTP 308 support (`#663 `_) - Add Tf format (time to serve request in seconds, %06f format) to - access log (#669) + access log (`#669 `_) - Remove one and a half years long deprecated ClientResponse.read_and_close() method @@ -1521,77 +1521,77 @@ Misc on sending chunked encoded data - Use TCP_CORK and TCP_NODELAY to optimize network latency and - throughput (#680) + throughput (`#680 `_) -- Websocket XOR performance improved (#687) +- Websocket XOR performance improved (`#687 `_) -- Avoid sending cookie attributes in Cookie header (#613) +- Avoid sending cookie attributes in Cookie header (`#613 `_) - Round server timeouts to seconds for grouping pending calls. That - leads to less amount of poller syscalls e.g. epoll.poll(). (#702) + leads to less amount of poller syscalls e.g. epoll.poll(). (`#702 `_) -- Close connection on websocket handshake error (#703) +- Close connection on websocket handshake error (`#703 `_) -- Implement class based views (#684) +- Implement class based views (`#684 `_) -- Add *headers* parameter to ws_connect() (#709) +- Add *headers* parameter to ws_connect() (`#709 `_) -- Drop unused function `parse_remote_addr()` (#708) +- Drop unused function `parse_remote_addr()` (`#708 `_) -- Close session on exception (#707) +- Close session on exception (`#707 `_) -- Store http code and headers in WSServerHandshakeError (#706) +- Store http code and headers in WSServerHandshakeError (`#706 `_) -- Make some low-level message properties readonly (#710) +- Make some low-level message properties readonly (`#710 `_) 0.19.0 (11-25-2015) =================== -- Memory leak in ParserBuffer (#579) +- Memory leak in ParserBuffer (`#579 `_) - Support gunicorn's `max_requests` settings in gunicorn worker -- Fix wsgi environment building (#573) +- Fix wsgi environment building (`#573 `_) -- Improve access logging (#572) +- Improve access logging (`#572 `_) -- Drop unused host and port from low-level server (#586) +- Drop unused host and port from low-level server (`#586 `_) -- Add Python 3.5 `async for` implementation to server websocket (#543) +- Add Python 3.5 `async for` implementation to server websocket (`#543 `_) - Add Python 3.5 `async for` implementation to client websocket - Add Python 3.5 `async with` implementation to client websocket -- Add charset parameter to web.Response constructor (#593) +- Add charset parameter to web.Response constructor (`#593 `_) - Forbid passing both Content-Type header and content_type or charset params into web.Response constructor -- Forbid duplicating of web.Application and web.Request (#602) +- Forbid duplicating of web.Application and web.Request (`#602 `_) -- Add an option to pass Origin header in ws_connect (#607) +- Add an option to pass Origin header in ws_connect (`#607 `_) -- Add json_response function (#592) +- Add json_response function (`#592 `_) -- Make concurrent connections respect limits (#581) +- Make concurrent connections respect limits (`#581 `_) -- Collect history of responses if redirects occur (#614) +- Collect history of responses if redirects occur (`#614 `_) -- Enable passing pre-compressed data in requests (#621) +- Enable passing pre-compressed data in requests (`#621 `_) -- Expose named routes via UrlDispatcher.named_routes() (#622) +- Expose named routes via UrlDispatcher.named_routes() (`#622 `_) -- Allow disabling sendfile by environment variable AIOHTTP_NOSENDFILE (#629) +- Allow disabling sendfile by environment variable AIOHTTP_NOSENDFILE (`#629 `_) - Use ensure_future if available -- Always quote params for Content-Disposition (#641) +- Always quote params for Content-Disposition (`#641 `_) -- Support async for in multipart reader (#640) +- Support async for in multipart reader (`#640 `_) -- Add Timeout context manager (#611) +- Add Timeout context manager (`#611 `_) 0.18.4 (13-11-2015) =================== @@ -1602,12 +1602,12 @@ Misc 0.18.3 (25-10-2015) =================== -- Fix formatting for _RequestContextManager helper (#590) +- Fix formatting for _RequestContextManager helper (`#590 `_) 0.18.2 (22-10-2015) =================== -- Fix regression for OpenSSL < 1.0.0 (#583) +- Fix regression for OpenSSL < 1.0.0 (`#583 `_) 0.18.1 (20-10-2015) =================== @@ -1619,7 +1619,7 @@ Misc =================== - Use errors.HttpProcessingError.message as HTTP error reason and - message (#459) + message (`#459 `_) - Optimize cythonized multidict a bit @@ -1627,27 +1627,27 @@ Misc - default headers in ClientSession are now case-insensitive -- Make '=' char and 'wss://' schema safe in urls (#477) +- Make '=' char and 'wss://' schema safe in urls (`#477 `_) -- `ClientResponse.close()` forces connection closing by default from now (#479) +- `ClientResponse.close()` forces connection closing by default from now (`#479 `_) N.B. Backward incompatible change: was `.close(force=False) Using `force` parameter for the method is deprecated: use `.release()` instead. -- Properly requote URL's path (#480) +- Properly requote URL's path (`#480 `_) -- add `skip_auto_headers` parameter for client API (#486) +- add `skip_auto_headers` parameter for client API (`#486 `_) -- Properly parse URL path in aiohttp.web.Request (#489) +- Properly parse URL path in aiohttp.web.Request (`#489 `_) -- Raise RuntimeError when chunked enabled and HTTP is 1.0 (#488) +- Raise RuntimeError when chunked enabled and HTTP is 1.0 (`#488 `_) -- Fix a bug with processing io.BytesIO as data parameter for client API (#500) +- Fix a bug with processing io.BytesIO as data parameter for client API (`#500 `_) -- Skip auto-generation of Content-Type header (#507) +- Skip auto-generation of Content-Type header (`#507 `_) -- Use sendfile facility for static file handling (#503) +- Use sendfile facility for static file handling (`#503 `_) - Default `response_factory` in `app.router.add_static` now is `StreamResponse`, not `None`. The functionality is not changed if @@ -1656,17 +1656,17 @@ Misc - Drop `ClientResponse.message` attribute, it was always implementation detail. - Streams are optimized for speed and mostly memory in case of a big - HTTP message sizes (#496) + HTTP message sizes (`#496 `_) - Fix a bug for server-side cookies for dropping cookie and setting it again without Max-Age parameter. -- Don't trim redirect URL in client API (#499) +- Don't trim redirect URL in client API (`#499 `_) -- Extend precision of access log "D" to milliseconds (#527) +- Extend precision of access log "D" to milliseconds (`#527 `_) - Deprecate `StreamResponse.start()` method in favor of - `StreamResponse.prepare()` coroutine (#525) + `StreamResponse.prepare()` coroutine (`#525 `_) `.start()` is still supported but responses begun with `.start()` does not call signal for response preparing to be sent. @@ -1674,48 +1674,48 @@ Misc - Add `StreamReader.__repr__` - Drop Python 3.3 support, from now minimal required version is Python - 3.4.1 (#541) + 3.4.1 (`#541 `_) -- Add `async with` support for `ClientSession.request()` and family (#536) +- Add `async with` support for `ClientSession.request()` and family (`#536 `_) -- Ignore message body on 204 and 304 responses (#505) +- Ignore message body on 204 and 304 responses (`#505 `_) -- `TCPConnector` processed both IPv4 and IPv6 by default (#559) +- `TCPConnector` processed both IPv4 and IPv6 by default (`#559 `_) -- Add `.routes()` view for urldispatcher (#519) +- Add `.routes()` view for urldispatcher (`#519 `_) -- Route name should be a valid identifier name from now (#567) +- Route name should be a valid identifier name from now (`#567 `_) -- Implement server signals (#562) +- Implement server signals (`#562 `_) - Drop a year-old deprecated *files* parameter from client API. -- Added `async for` support for aiohttp stream (#542) +- Added `async for` support for aiohttp stream (`#542 `_) 0.17.4 (09-29-2015) =================== -- Properly parse URL path in aiohttp.web.Request (#489) +- Properly parse URL path in aiohttp.web.Request (`#489 `_) - Add missing coroutine decorator, the client api is await-compatible now 0.17.3 (08-28-2015) =================== -- Remove Content-Length header on compressed responses (#450) +- Remove Content-Length header on compressed responses (`#450 `_) - Support Python 3.5 -- Improve performance of transport in-use list (#472) +- Improve performance of transport in-use list (`#472 `_) -- Fix connection pooling (#473) +- Fix connection pooling (`#473 `_) 0.17.2 (08-11-2015) =================== -- Don't forget to pass `data` argument forward (#462) +- Don't forget to pass `data` argument forward (`#462 `_) -- Fix multipart read bytes count (#463) +- Fix multipart read bytes count (`#463 `_) 0.17.1 (08-10-2015) =================== @@ -1725,28 +1725,28 @@ Misc 0.17.0 (08-04-2015) =================== -- Make StaticRoute support Last-Modified and If-Modified-Since headers (#386) +- Make StaticRoute support Last-Modified and If-Modified-Since headers (`#386 `_) - Add Request.if_modified_since and Stream.Response.last_modified properties -- Fix deflate compression when writing a chunked response (#395) +- Fix deflate compression when writing a chunked response (`#395 `_) - Request`s content-length header is cleared now after redirect from - POST method (#391) + POST method (`#391 `_) -- Return a 400 if server received a non HTTP content (#405) +- Return a 400 if server received a non HTTP content (`#405 `_) -- Fix keep-alive support for aiohttp clients (#406) +- Fix keep-alive support for aiohttp clients (`#406 `_) -- Allow gzip compression in high-level server response interface (#403) +- Allow gzip compression in high-level server response interface (`#403 `_) -- Rename TCPConnector.resolve and family to dns_cache (#415) +- Rename TCPConnector.resolve and family to dns_cache (`#415 `_) -- Make UrlDispatcher ignore quoted characters during url matching (#414) +- Make UrlDispatcher ignore quoted characters during url matching (`#414 `_) Backward-compatibility warning: this may change the url matched by - your queries if they send quoted character (like %2F for /) (#414) + your queries if they send quoted character (like %2F for /) (`#414 `_) -- Use optional cchardet accelerator if present (#418) +- Use optional cchardet accelerator if present (`#418 `_) - Borrow loop from Connector in ClientSession if loop is not set @@ -1755,50 +1755,50 @@ Misc - Add toplevel get(), post(), put(), head(), delete(), options(), patch() coroutines. -- Fix IPv6 support for client API (#425) +- Fix IPv6 support for client API (`#425 `_) -- Pass SSL context through proxy connector (#421) +- Pass SSL context through proxy connector (`#421 `_) - Make the rule: path for add_route should start with slash - Don't process request finishing by low-level server on closed event loop -- Don't override data if multiple files are uploaded with same key (#433) +- Don't override data if multiple files are uploaded with same key (`#433 `_) - Ensure multipart.BodyPartReader.read_chunk read all the necessary data to avoid false assertions about malformed multipart payload -- Don't send body for 204, 205 and 304 http exceptions (#442) +- Don't send body for 204, 205 and 304 http exceptions (`#442 `_) -- Correctly skip Cython compilation in MSVC not found (#453) +- Correctly skip Cython compilation in MSVC not found (`#453 `_) -- Add response factory to StaticRoute (#456) +- Add response factory to StaticRoute (`#456 `_) -- Don't append trailing CRLF for multipart.BodyPartReader (#454) +- Don't append trailing CRLF for multipart.BodyPartReader (`#454 `_) 0.16.6 (07-15-2015) =================== -- Skip compilation on Windows if vcvarsall.bat cannot be found (#438) +- Skip compilation on Windows if vcvarsall.bat cannot be found (`#438 `_) 0.16.5 (06-13-2015) =================== -- Get rid of all comprehensions and yielding in _multidict (#410) +- Get rid of all comprehensions and yielding in _multidict (`#410 `_) 0.16.4 (06-13-2015) =================== - Don't clear current exception in multidict's `__repr__` (cythonized - versions) (#410) + versions) (`#410 `_) 0.16.3 (05-30-2015) =================== -- Fix StaticRoute vulnerability to directory traversal attacks (#380) +- Fix StaticRoute vulnerability to directory traversal attacks (`#380 `_) 0.16.2 (05-27-2015) @@ -1808,26 +1808,26 @@ Misc 3.4.1 instead of 3.4.0 - Add check for presence of loop.is_closed() method before call the - former (#378) + former (`#378 `_) 0.16.1 (05-27-2015) =================== -- Fix regression in static file handling (#377) +- Fix regression in static file handling (`#377 `_) 0.16.0 (05-26-2015) =================== -- Unset waiter future after cancellation (#363) +- Unset waiter future after cancellation (`#363 `_) -- Update request url with query parameters (#372) +- Update request url with query parameters (`#372 `_) - Support new `fingerprint` param of TCPConnector to enable verifying - SSL certificates via MD5, SHA1, or SHA256 digest (#366) + SSL certificates via MD5, SHA1, or SHA256 digest (`#366 `_) - Setup uploaded filename if field value is binary and transfer - encoding is not specified (#349) + encoding is not specified (`#349 `_) - Implement `ClientSession.close()` method @@ -1842,20 +1842,20 @@ Misc - Add `__del__` to client-side objects: sessions, connectors, connections, requests, responses. -- Refactor connections cleanup by connector (#357) +- Refactor connections cleanup by connector (`#357 `_) -- Add `limit` parameter to connector constructor (#358) +- Add `limit` parameter to connector constructor (`#358 `_) -- Add `request.has_body` property (#364) +- Add `request.has_body` property (`#364 `_) -- Add `response_class` parameter to `ws_connect()` (#367) +- Add `response_class` parameter to `ws_connect()` (`#367 `_) - `ProxyConnector` does not support keep-alive requests by default - starting from now (#368) + starting from now (`#368 `_) - Add `connector.force_close` property -- Add ws_connect to ClientSession (#374) +- Add ws_connect to ClientSession (`#374 `_) - Support optional `chunk_size` parameter in `router.add_static()` @@ -1865,7 +1865,7 @@ Misc - Fix graceful shutdown handling -- Fix `Expect` header handling for not found and not allowed routes (#340) +- Fix `Expect` header handling for not found and not allowed routes (`#340 `_) 0.15.2 (04-19-2015) @@ -1877,15 +1877,15 @@ Misc - Allow to match any request method with `*` -- Explicitly call drain on transport (#316) +- Explicitly call drain on transport (`#316 `_) -- Make chardet module dependency mandatory (#318) +- Make chardet module dependency mandatory (`#318 `_) -- Support keep-alive for HTTP 1.0 (#325) +- Support keep-alive for HTTP 1.0 (`#325 `_) -- Do not chunk single file during upload (#327) +- Do not chunk single file during upload (`#327 `_) -- Add ClientSession object for cookie storage and default headers (#328) +- Add ClientSession object for cookie storage and default headers (`#328 `_) - Add `keep_alive_on` argument for HTTP server handler. @@ -1911,13 +1911,13 @@ Misc - Client WebSockets support -- New Multipart system (#273) +- New Multipart system (`#273 `_) -- Support for "Except" header (#287) (#267) +- Support for "Except" header (`#287 `_) (`#267 `_) -- Set default Content-Type for post requests (#184) +- Set default Content-Type for post requests (`#184 `_) -- Fix issue with construction dynamic route with regexps and trailing slash (#266) +- Fix issue with construction dynamic route with regexps and trailing slash (`#266 `_) - Add repr to web.Request @@ -1927,7 +1927,7 @@ Misc - Add repr for web.Application -- Add repr to UrlMappingMatchInfo (#217) +- Add repr to UrlMappingMatchInfo (`#217 `_) - Gunicorn 19.2.x compatibility @@ -1935,29 +1935,29 @@ Misc 0.14.4 (01-29-2015) =================== -- Fix issue with error during constructing of url with regex parts (#264) +- Fix issue with error during constructing of url with regex parts (`#264 `_) 0.14.3 (01-28-2015) =================== -- Use path='/' by default for cookies (#261) +- Use path='/' by default for cookies (`#261 `_) 0.14.2 (01-23-2015) =================== -- Connections leak in BaseConnector (#253) +- Connections leak in BaseConnector (`#253 `_) -- Do not swallow websocket reader exceptions (#255) +- Do not swallow websocket reader exceptions (`#255 `_) -- web.Request's read, text, json are memorized (#250) +- web.Request's read, text, json are memorized (`#250 `_) 0.14.1 (01-15-2015) =================== -- HttpMessage._add_default_headers does not overwrite existing headers (#216) +- HttpMessage._add_default_headers does not overwrite existing headers (`#216 `_) - Expose multidict classes at package level @@ -1996,21 +1996,21 @@ Misc - Server has 75 seconds keepalive timeout now, was non-keepalive by default. -- Application does not accept `**kwargs` anymore ((#243)). +- Application does not accept `**kwargs` anymore ((`#243 `_)). - Request is inherited from dict now for making per-request storage to - middlewares ((#242)). + middlewares ((`#242 `_)). 0.13.1 (12-31-2014) =================== -- Add `aiohttp.web.StreamResponse.started` property (#213) +- Add `aiohttp.web.StreamResponse.started` property (`#213 `_) - HTML escape traceback text in `ServerHttpProtocol.handle_error` - Mention handler and middlewares in `aiohttp.web.RequestHandler.handle_request` - on error ((#218)) + on error ((`#218 `_)) 0.13.0 (12-29-2014) @@ -2020,16 +2020,16 @@ Misc - Chain exceptions when raise `ClientRequestError`. -- Support custom regexps in route variables (#204) +- Support custom regexps in route variables (`#204 `_) - Fixed graceful shutdown, disable keep-alive on connection closing. - Decode HTTP message with `utf-8` encoding, some servers send headers - in utf-8 encoding (#207) + in utf-8 encoding (`#207 `_) -- Support `aiohtt.web` middlewares (#209) +- Support `aiohtt.web` middlewares (`#209 `_) -- Add ssl_context to TCPConnector (#206) +- Add ssl_context to TCPConnector (`#206 `_) 0.12.0 (12-12-2014) @@ -2039,7 +2039,7 @@ Misc Sorry, we have to do this. - Automatically force aiohttp.web handlers to coroutines in - `UrlDispatcher.add_route()` (#186) + `UrlDispatcher.add_route()` (`#186 `_) - Rename `Request.POST()` function to `Request.post()` @@ -2068,15 +2068,15 @@ Misc 0.11.0 (11-29-2014) =================== -- Support named routes in `aiohttp.web.UrlDispatcher` (#179) +- Support named routes in `aiohttp.web.UrlDispatcher` (`#179 `_) -- Make websocket subprotocols conform to spec (#181) +- Make websocket subprotocols conform to spec (`#181 `_) 0.10.2 (11-19-2014) =================== -- Don't unquote `environ['PATH_INFO']` in wsgi.py (#177) +- Don't unquote `environ['PATH_INFO']` in wsgi.py (`#177 `_) 0.10.1 (11-17-2014) @@ -2102,54 +2102,54 @@ Misc from 'Can not read status line' to explicit 'Connection closed by server' -- Drop closed connections from connector (#173) +- Drop closed connections from connector (`#173 `_) -- Set server.transport to None on .closing() (#172) +- Set server.transport to None on .closing() (`#172 `_) 0.9.3 (10-30-2014) ================== -- Fix compatibility with asyncio 3.4.1+ (#170) +- Fix compatibility with asyncio 3.4.1+ (`#170 `_) 0.9.2 (10-16-2014) ================== -- Improve redirect handling (#157) +- Improve redirect handling (`#157 `_) -- Send raw files as is (#153) +- Send raw files as is (`#153 `_) -- Better websocket support (#150) +- Better websocket support (`#150 `_) 0.9.1 (08-30-2014) ================== -- Added MultiDict support for client request params and data (#114). +- Added MultiDict support for client request params and data (`#114 `_). -- Fixed parameter type for IncompleteRead exception (#118). +- Fixed parameter type for IncompleteRead exception (`#118 `_). -- Strictly require ASCII headers names and values (#137) +- Strictly require ASCII headers names and values (`#137 `_) -- Keep port in ProxyConnector (#128). +- Keep port in ProxyConnector (`#128 `_). -- Python 3.4.1 compatibility (#131). +- Python 3.4.1 compatibility (`#131 `_). 0.9.0 (07-08-2014) ================== -- Better client basic authentication support (#112). +- Better client basic authentication support (`#112 `_). -- Fixed incorrect line splitting in HttpRequestParser (#97). +- Fixed incorrect line splitting in HttpRequestParser (`#97 `_). - Support StreamReader and DataQueue as request data. -- Client files handling refactoring (#20). +- Client files handling refactoring (`#20 `_). - Backward incompatible: Replace DataQueue with StreamReader for - request payload (#87). + request payload (`#87 `_). 0.8.4 (07-04-2014) @@ -2272,7 +2272,7 @@ Misc - Better support for server exit. -- Read response body until EOF if content-length is not defined (#14) +- Read response body until EOF if content-length is not defined (`#14 `_) 0.6.2 (02-18-2014) From 96e09c6a5c456475ff20ba2fd4c02549b0e56c66 Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Fri, 13 Apr 2018 12:13:16 +0300 Subject: [PATCH 4/5] Add changelog links fixer --- tools/fix_changelog.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tools/fix_changelog.py diff --git a/tools/fix_changelog.py b/tools/fix_changelog.py new file mode 100644 index 00000000000..e5a73f33219 --- /dev/null +++ b/tools/fix_changelog.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +import argparse +import re +import sys +from pathlib import Path + + +PATTERN = re.compile("\(#(\d+)\)") + + +def get_root(script_path): + folder = script_path.absolute().parent + while not (folder / '.git').exists(): + folder = folder.parent + if folder == folder.anchor: + raise RuntimeError("git repo not found") + return folder + + +def main(argv): + parser = argparse.ArgumentParser(description='Expand github links.') + parser.add_argument('filename', default='CHANGES.rst', nargs='?', + help="filename to proess") + args = parser.parse_args() + here = Path(argv[0]) + root = get_root(here) + fname = root / args.filename + + content = fname.read_text() + new = PATTERN.sub( + r'(`#\1 `_)', + content) + + fname.write_text(new) + print(f"Fixed links in {fname}") + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv)) From 77f5633ce02da71c6879d3b25b5fbe8b240647c6 Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Fri, 13 Apr 2018 12:29:16 +0300 Subject: [PATCH 5/5] Fix changenote --- CHANGES.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 02689ac2a1b..ce362dbf32c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -115,8 +115,6 @@ Bugfixes Improved Documentation ---------------------- -- Change ``ClientResponse.json()`` documentation to reflect that it now - allows "application/xxx+json" content-types (`#2206 `_) - Document behavior when cchardet detects encodings that are unknown to Python. (`#2732 `_) - Add diagrams for tracing request life style. (`#2748 `_)