{"action":"closed","number":245,"pull_request":{"url":"https://api.github.com/repos/project-hypr/hypr2/pulls/245","id":179824705,"html_url":"https://github.com/project-hypr/hypr2/pull/245","diff_url":"https://github.com/project-hypr/hypr2/pull/245.diff","patch_url":"https://github.com/project-hypr/hypr2/pull/245.patch","issue_url":"https://api.github.com/repos/project-hypr/hypr2/issues/245","number":245,"state":"closed","locked":false,"title":"Update aiohttp to 3.1.2","user":{"login":"pyup-bot","id":16239342,"avatar_url":"https://avatars0.githubusercontent.com/u/16239342?v=4","gravatar_id":"","url":"https://api.github.com/users/pyup-bot","html_url":"https://github.com/pyup-bot","followers_url":"https://api.github.com/users/pyup-bot/followers","following_url":"https://api.github.com/users/pyup-bot/following{/other_user}","gists_url":"https://api.github.com/users/pyup-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/pyup-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pyup-bot/subscriptions","organizations_url":"https://api.github.com/users/pyup-bot/orgs","repos_url":"https://api.github.com/users/pyup-bot/repos","events_url":"https://api.github.com/users/pyup-bot/events{/privacy}","received_events_url":"https://api.github.com/users/pyup-bot/received_events","type":"User","site_admin":false},"body":"\nThis PR updates [aiohttp](https://pypi.org/project/aiohttp) from **1.3.3** to **3.1.2**.\n\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 3.1.2\n   ```\n   ==================\n\n- Make ``LineTooLong`` exception more detailed about actual data size (2863)\n- Call ``on_chunk_sent`` when write_eof takes as a param the last chunk (2909)\n   ```\n   \n  \n  \n   ### 3.1.1\n   ```\n   ==================\n\n- Support *asynchronous iterators* (and *asynchronous generators* as\n  well) in both client and server API as request / response BODY\n  payloads. (2802)\n   ```\n   \n  \n  \n   ### 3.1.0\n   ```\n   ==================\n\nWelcome to aiohttp 3.1 release.\n\nThis is an *incremental* release, fully backward compatible with *aiohttp 3.0*.\n\nBut we have added several new features.\n\nThe most visible one is ``app.add_routes()`` (an alias for existing\n``app.router.add_routes()``. The addition is very important because\nall *aiohttp* docs now uses ``app.add_routes()`` call in code\nsnippets. All your existing code still do register routes / resource\nwithout any warning but you&#39;ve got the idea for a favorite way: noisy\n``app.router.add_get()`` is replaced by ``app.add_routes()``.\n\nThe library does not make a preference between decorators::\n\n   routes = web.RouteTableDef()\n\n   routes.get(&#39;/&#39;)\n   async def hello(request):\n       return web.Response(text=&quot;Hello, world&quot;)\n\n   app.add_routes(routes)\n\nand route tables as a list::\n\n   async def hello(request):\n       return web.Response(text=&quot;Hello, world&quot;)\n\n   app.add_routes([web.get(&#39;/&#39;, hello)])\n\nBoth ways are equal, user may decide basing on own code taste.\n\nAlso we have a lot of minor features, bug fixes and documentation\nupdates, see below.\n\nFeatures\n--------\n\n- Relax JSON content-type checking in the ``ClientResponse.json()`` to allow\n  &quot;application/xxx+json&quot; instead of strict &quot;application/json&quot;. (2206)\n- Bump C HTTP parser to version 2.8 (2730)\n- Accept a coroutine as an application factory in ``web.run_app`` and gunicorn\n  worker. (2739)\n- Implement application cleanup context (``app.cleanup_ctx`` property). (2747)\n- Make ``writer.write_headers`` a coroutine. (2762)\n- Add tracking signals for getting request/response bodies. (2767)\n- Deprecate ClientResponseError.code in favor of .status to keep similarity\n  with response classes. (2781)\n- Implement ``app.add_routes()`` method. (2787)\n- Implement ``web.static()`` and ``RouteTableDef.static()`` API. (2795)\n- Install a test event loop as default by ``asyncio.set_event_loop()``. The\n  change affects aiohttp test utils but backward compatibility is not broken\n  for 99.99% of use cases. (2804)\n- Refactor ``ClientResponse`` constructor: make logically required constructor\n  arguments mandatory, drop ``_post_init()`` method. (2820)\n- Use ``app.add_routes()`` in server docs everywhere (2830)\n- Websockets refactoring, all websocket writer methods are converted into\n  coroutines. (2836)\n- Provide ``Content-Range`` header for ``Range`` requests (2844)\n\n\nBugfixes\n--------\n\n- Fix websocket client return EofStream. (2784)\n- Fix websocket demo. (2789)\n- Property ``BaseRequest.http_range`` now returns a python-like slice when\n  requesting the tail of the range. It&#39;s now indicated by a negative value in\n  ``range.start`` rather then in ``range.stop`` (2805)\n- Close a connection if an unexpected exception occurs while sending a request\n  (2827)\n- Fix firing DNS tracing events. (2841)\n\n\nImproved Documentation\n----------------------\n\n- Change ``ClientResponse.json()`` documentation to reflect that it now\n  allows &quot;application/xxx+json&quot; content-types (2206)\n- Document behavior when cchardet detects encodings that are unknown to Python.\n  (2732)\n- Add diagrams for tracing request life style. (2748)\n- Drop removed functionality for passing ``StreamReader`` as data at client\n  side. (2793)\n   ```\n   \n  \n  \n   ### 3.0.9\n   ```\n   ==================\n\n- Close a connection if an unexpected exception occurs while sending a request\n  (2827)\n   ```\n   \n  \n  \n   ### 3.0.8\n   ```\n   ==================\n\n- Use ``asyncio.current_task()`` on Python 3.7 (2825)\n   ```\n   \n  \n  \n   ### 3.0.7\n   ```\n   ==================\n\n- Fix SSL proxy support by client. (2810)\n- Restore a imperative check in ``setup.py`` for python version. The check\n  works in parallel to environment marker. As effect a error about unsupported\n  Python versions is raised even on outdated systems with very old\n  ``setuptools`` version installed. (2813)\n   ```\n   \n  \n  \n   ### 3.0.6\n   ```\n   ==================\n\n- Add ``_reuse_address`` and ``_reuse_port`` to\n  ``web_runner.TCPSite.__slots__``. (2792)\n   ```\n   \n  \n  \n   ### 3.0.5\n   ```\n   ==================\n\n- Fix ``InvalidStateError`` on processing a sequence of two\n  ``RequestHandler.data_received`` calls on web server. (2773)\n   ```\n   \n  \n  \n   ### 3.0.4\n   ```\n   ==================\n\n- Fix ``IndexError`` in HTTP request handling by server. (2752)\n- Fix MultipartWriter.append* no longer returning part/payload. (2759)\n   ```\n   \n  \n  \n   ### 3.0.3\n   ```\n   ==================\n\n- Relax ``attrs`` dependency to minimal actually supported version\n  17.0.3 The change allows to avoid version conflicts with currently\n  existing test tools.\n   ```\n   \n  \n  \n   ### 3.0.2\n   ```\n   ==================\n\nSecurity Fix\n------------\n\n- Prevent Windows absolute URLs in static files.  Paths like\n  ``/static/D:\\path`` and ``/static/\\\\hostname\\drive\\path`` are\n  forbidden.\n   ```\n   \n  \n  \n   ### 3.0.1\n   ```\n   =====\n\n- Technical release for fixing distribution problems.\n   ```\n   \n  \n  \n   ### 3.0.0\n   ```\n   ==================\n\nFeatures\n--------\n\n- Speed up the `PayloadWriter.write` method for large request bodies. (2126)\n- StreamResponse and Response are now MutableMappings. (2246)\n- ClientSession publishes a set of signals to track the HTTP request execution.\n  (2313)\n- Content-Disposition fast access in ClientResponse (2455)\n- Added support to Flask-style decorators with class-based Views. (2472)\n- Signal handlers (registered callbacks) should be coroutines. (2480)\n- Support ``async with test_client.ws_connect(...)`` (2525)\n- Introduce *site* and *application runner* as underlying API for `web.run_app`\n  implementation. (2530)\n- Only quote multipart boundary when necessary and sanitize input (2544)\n- Make the `aiohttp.ClientResponse.get_encoding` method public with the\n  processing of invalid charset while detecting content encoding. (2549)\n- Add optional configurable per message compression for\n  `ClientWebSocketResponse` and `WebSocketResponse`. (2551)\n- Add hysteresis to `StreamReader` to prevent flipping between paused and\n  resumed states too often. (2555)\n- Support `.netrc` by `trust_env` (2581)\n- Avoid to create a new resource when adding a route with the same name and\n  path of the last added resource (2586)\n- `MultipartWriter.boundary` is `str` now. (2589)\n- Allow a custom port to be used by `TestServer` (and associated pytest\n  fixtures) (2613)\n- Add param access_log_class to web.run_app function (2615)\n- Add ``ssl`` parameter to client API (2626)\n- Fixes performance issue introduced by 2577. When there are no middlewares\n  installed by the user, no additional and useless code is executed. (2629)\n- Rename PayloadWriter to StreamWriter (2654)\n- New options *reuse_port*, *reuse_address* are added to `run_app` and\n  `TCPSite`. (2679)\n- Use custom classes to pass client signals parameters (2686)\n- Use ``attrs`` library for data classes, replace `namedtuple`. (2690)\n- Pytest fixtures renaming, add ``aiohttp_`` prefix (2578)\n- Add ``aiohttp-`` prefix for ``pytest-aiohttp`` command line\n  parameters (2578)\n\nBugfixes\n--------\n\n- Correctly process upgrade request from server to HTTP2. ``aiohttp`` does not\n  support HTTP2 yet, the protocol is not upgraded but response is handled\n  correctly. (2277)\n- Fix ClientConnectorSSLError and ClientProxyConnectionError for proxy\n  connector (2408)\n- Fix connector convert OSError to ClientConnectorError (2423)\n- Fix connection attempts for multiple dns hosts (2424)\n- Fix writing to closed transport by raising `asyncio.CancelledError` (2499)\n- Fix warning in `ClientSession.__del__` by stopping to try to close it.\n  (2523)\n- Fixed race-condition for iterating addresses from the DNSCache. (2620)\n- Fix default value of `access_log_format` argument in `web.run_app` (2649)\n- Freeze sub-application on adding to parent app (2656)\n- Do percent encoding for `.url_for()` parameters (2668)\n- Correctly process request start time and multiple request/response\n  headers in access log extra (2641)\n\nImproved Documentation\n----------------------\n\n- Improve tutorial docs, using `literalinclude` to link to the actual files.\n  (2396)\n- Small improvement docs: better example for file uploads. (2401)\n- Rename `from_env` to `trust_env` in client reference. (2451)\n- ﻿Fixed mistype in `Proxy Support` section where `trust_env` parameter was\n  used in `session.get(&quot;http://python.org&quot;, trust_env=True)` method instead of\n  aiohttp.ClientSession constructor as follows:\n  `aiohttp.ClientSession(trust_env=True)`. (2688)\n- Fix issue with unittest example not compiling in testing docs. (2717)\n\nDeprecations and Removals\n-------------------------\n\n- Simplify HTTP pipelining implementation (2109)\n- Drop `StreamReaderPayload` and `DataQueuePayload`. (2257)\n- Drop `md5` and `sha1` finger-prints (2267)\n- Drop WSMessage.tp (2321)\n- Drop Python 3.4 and Python 3.5.0, 3.5.1, 3.5.2. Minimal supported Python\n  versions are 3.5.3 and 3.6.0. `yield from` is gone, use `async/await` syntax.\n  (2343)\n- Drop `aiohttp.Timeout` and use `async_timeout.timeout` instead. (2348)\n- Drop `resolve` param from TCPConnector. (2377)\n- Add DeprecationWarning for returning HTTPException (2415)\n- `send_str()`, `send_bytes()`, `send_json()`, `ping()` and `pong()` are\n  genuine async functions now. (2475)\n- Drop undocumented `app.on_pre_signal` and `app.on_post_signal`. Signal\n  handlers should be coroutines, support for regular functions is dropped.\n  (2480)\n- `StreamResponse.drain()` is not a part of public API anymore, just use `await\n  StreamResponse.write()`. `StreamResponse.write` is converted to async\n  function. (2483)\n- Drop deprecated `slow_request_timeout` param and `**kwargs`` from\n  `RequestHandler`. (2500)\n- Drop deprecated `resource.url()`. (2501)\n- Remove `%u` and `%l` format specifiers from access log format. (2506)\n- Drop deprecated `request.GET` property. (2547)\n- Simplify stream classes: drop `ChunksQueue` and `FlowControlChunksQueue`,\n  merge `FlowControlStreamReader` functionality into `StreamReader`, drop\n  `FlowControlStreamReader` name. (2555)\n- Do not create a new resource on `router.add_get(..., allow_head=True)`\n  (2585)\n- Drop access to TCP tuning options from PayloadWriter and Response classes\n  (2604)\n- Drop deprecated `encoding` parameter from client API (2606)\n- Deprecate ``verify_ssl``, ``ssl_context`` and ``fingerprint`` parameters in\n  client API (2626)\n- Get rid of the legacy class StreamWriter. (2651)\n- Forbid non-strings in `resource.url_for()` parameters. (2668)\n- Deprecate inheritance from ``ClientSession`` and ``web.Application`` and\n  custom user attributes for ``ClientSession``, ``web.Request`` and\n  ``web.Application`` (2691)\n- Drop `resp = await aiohttp.request(...)` syntax for sake of `async with\n  aiohttp.request(...) as resp:`. (2540)\n- Forbid synchronous context managers for `ClientSession` and test\n  server/client. (2362)\n\n\nMisc\n----\n\n- 2552\n   ```\n   \n  \n  \n   ### 2.3.10\n   ```\n   ===================\n\n- Fix 100% CPU usage on HTTP GET and websocket connection just after it (1955)\n\n- Patch broken `ssl.match_hostname()` on Python&lt;3.7 (2674)\n   ```\n   \n  \n  \n   ### 2.3.9\n   ```\n   ==================\n\n- Fix colon handing in path for dynamic resources (2670)\n   ```\n   \n  \n  \n   ### 2.3.8\n   ```\n   ==================\n\n- Do not use `yarl.unquote` internal function in aiohttp.  Fix\n  incorrectly unquoted path part in URL dispatcher (2662)\n\n- Fix compatibility with `yarl==1.0.0` (2662)\n   ```\n   \n  \n  \n   ### 2.3.7\n   ```\n   ==================\n\n- Fixed race-condition for iterating addresses from the DNSCache. (2620)\n- Fix docstring for request.host (2591)\n- Fix docstring for request.remote (2592)\n   ```\n   \n  \n  \n   ### 2.3.6\n   ```\n   ==================\n\n- Correct `request.app` context (for handlers not just middlewares). (2577)\n   ```\n   \n  \n  \n   ### 2.3.5\n   ```\n   ==================\n\n- Fix compatibility with `pytest` 3.3+ (2565)\n   ```\n   \n  \n  \n   ### 2.3.4\n   ```\n   ==================\n\n- Make `request.app` point to proper application instance when using nested\n  applications (with middlewares). (2550)\n- Change base class of ClientConnectorSSLError to ClientSSLError from\n  ClientConnectorError. (2563)\n- Return client connection back to free pool on error in `connector.connect()`.\n  (2567)\n   ```\n   \n  \n  \n   ### 2.3.3\n   ```\n   ==================\n\n- Having a `;` in Response content type does not assume it contains a charset\n  anymore. (2197)\n- Use `getattr(asyncio, &#39;async&#39;)` for keeping compatibility with Python 3.7.\n  (2476)\n- Ignore `NotImplementedError` raised by `set_child_watcher` from `uvloop`.\n  (2491)\n- Fix warning in `ClientSession.__del__` by stopping to try to close it.\n  (2523)\n- Fixed typo&#39;s in Third-party libraries page. And added async-v20 to the list\n  (2510)\n   ```\n   \n  \n  \n   ### 2.3.2\n   ```\n   ==================\n\n- Fix passing client max size on cloning request obj. (2385)\n- Fix ClientConnectorSSLError and ClientProxyConnectionError for proxy\n  connector. (2408)\n- Drop generated `_http_parser` shared object from tarball distribution. (2414)\n- Fix connector convert OSError to ClientConnectorError. (2423)\n- Fix connection attempts for multiple dns hosts. (2424)\n- Fix ValueError for AF_INET6 sockets if a preexisting INET6 socket to the\n  `aiohttp.web.run_app` function. (2431)\n- `_SessionRequestContextManager` closes the session properly now. (2441)\n- Rename `from_env` to `trust_env` in client reference. (2451)\n   ```\n   \n  \n  \n   ### 2.3.1\n   ```\n   ==================\n\n- Relax attribute lookup in warning about old-styled middleware (2340)\n   ```\n   \n  \n  \n   ### 2.3.0\n   ```\n   ==================\n\nFeatures\n--------\n\n- Add SSL related params to `ClientSession.request` (1128)\n- Make enable_compression work on HTTP/1.0 (1828)\n- Deprecate registering synchronous web handlers (1993)\n- Switch to `multidict 3.0`. All HTTP headers preserve casing now but compared\n  in case-insensitive way. (1994)\n- Improvement for `normalize_path_middleware`. Added possibility to handle URLs\n  with query string. (1995)\n- Use towncrier for CHANGES.txt build (1997)\n- Implement `trust_env=True` param in `ClientSession`. (1998)\n- Added variable to customize proxy headers (2001)\n- Implement `router.add_routes` and router decorators. (2004)\n- Deprecated `BaseRequest.has_body` in favor of\n  `BaseRequest.can_read_body` Added `BaseRequest.body_exists`\n  attribute that stays static for the lifetime of the request (2005)\n- Provide `BaseRequest.loop` attribute (2024)\n- Make `_CoroGuard` awaitable and fix `ClientSession.close` warning message\n  (2026)\n- Responses to redirects without Location header are returned instead of\n  raising a RuntimeError (2030)\n- Added `get_client`, `get_server`, `setUpAsync` and `tearDownAsync` methods to\n  AioHTTPTestCase (2032)\n- Add automatically a SafeChildWatcher to the test loop (2058)\n- add ability to disable automatic response decompression (2110)\n- Add support for throttling DNS request, avoiding the requests saturation when\n  there is a miss in the DNS cache and many requests getting into the connector\n  at the same time. (2111)\n- Use request for getting access log information instead of message/transport\n  pair. Add `RequestBase.remote` property for accessing to IP of client\n  initiated HTTP request. (2123)\n- json() raises a ContentTypeError exception if the content-type does not meet\n  the requirements instead of raising a generic ClientResponseError. (2136)\n- Make the HTTP client able to return HTTP chunks when chunked transfer\n  encoding is used. (2150)\n- add `append_version` arg into `StaticResource.url` and\n  `StaticResource.url_for` methods for getting an url with hash (version) of\n  the file. (2157)\n- Fix parsing the Forwarded header. * commas and semicolons are allowed inside\n  quoted-strings; * empty forwarded-pairs (as in for=_1;;by=_2) are allowed; *\n  non-standard parameters are allowed (although this alone could be easily done\n  in the previous parser). (2173)\n- Don&#39;t require ssl module to run. aiohttp does not require SSL to function.\n  The code paths involved with SSL will only be hit upon SSL usage. Raise\n  `RuntimeError` if HTTPS protocol is required but ssl module is not present.\n  (2221)\n- Accept coroutine fixtures in pytest plugin (2223)\n- Call `shutdown_asyncgens` before event loop closing on Python 3.6. (2227)\n- Speed up Signals when there are no receivers (2229)\n- Raise `InvalidURL` instead of `ValueError` on fetches with invalid URL.\n  (2241)\n- Move `DummyCookieJar` into `cookiejar.py` (2242)\n- `run_app`: Make `print=None` disable printing (2260)\n- Support `brotli` encoding (generic-purpose lossless compression algorithm)\n  (2270)\n- Add server support for WebSockets Per-Message Deflate. Add client option to\n  add deflate compress header in WebSockets request header. If calling\n  ClientSession.ws_connect() with `compress=15` the client will support deflate\n  compress negotiation. (2273)\n- Support `verify_ssl`, `fingerprint`, `ssl_context` and `proxy_headers` by\n  `client.ws_connect`. (2292)\n- Added `aiohttp.ClientConnectorSSLError` when connection fails due\n  `ssl.SSLError` (2294)\n- `aiohttp.web.Application.make_handler` support `access_log_class` (2315)\n- Build HTTP parser extension in non-strict mode by default. (2332)\n\n\nBugfixes\n--------\n\n- Clear auth information on redirecting to other domain (1699)\n- Fix missing app.loop on startup hooks during tests (2060)\n- Fix issue with synchronous session closing when using `ClientSession` as an\n  asynchronous context manager. (2063)\n- Fix issue with `CookieJar` incorrectly expiring cookies in some edge cases.\n  (2084)\n- Force use of IPv4 during test, this will make tests run in a Docker container\n  (2104)\n- Warnings about unawaited coroutines now correctly point to the user&#39;s code.\n  (2106)\n- Fix issue with `IndexError` being raised by the `StreamReader.iter_chunks()`\n  generator. (2112)\n- Support HTTP 308 Permanent redirect in client class. (2114)\n- Fix `FileResponse` sending empty chunked body on 304. (2143)\n- Do not add `Content-Length: 0` to GET/HEAD/TRACE/OPTIONS requests by default.\n  (2167)\n- Fix parsing the Forwarded header according to RFC 7239. (2170)\n- Securely determining remote/scheme/host 2171 (2171)\n- Fix header name parsing, if name is split into multiple lines (2183)\n- Handle session close during connection, `KeyError:\n  &lt;aiohttp.connector._TransportPlaceholder&gt;` (2193)\n- Fixes uncaught `TypeError` in `helpers.guess_filename` if `name` is not a\n  string (2201)\n- Raise OSError on async DNS lookup if resolved domain is an alias for another\n  one, which does not have an A or CNAME record. (2231)\n- Fix incorrect warning in `StreamReader`. (2251)\n- Properly clone state of web request (2284)\n- Fix C HTTP parser for cases when status line is split into different TCP\n  packets. (2311)\n- Fix `web.FileResponse` overriding user supplied Content-Type (2317)\n\n\nImproved Documentation\n----------------------\n\n- Add a note about possible performance degradation in `await resp.text()` if\n  charset was not provided by `Content-Type` HTTP header. Pass explicit\n  encoding to solve it. (1811)\n- Drop `disqus` widget from documentation pages. (2018)\n- Add a graceful shutdown section to the client usage documentation. (2039)\n- Document `connector_owner` parameter. (2072)\n- Update the doc of web.Application (2081)\n- Fix mistake about access log disabling. (2085)\n- Add example usage of on_startup and on_shutdown signals by creating and\n  disposing an aiopg connection engine. (2131)\n- Document `encoded=True` for `yarl.URL`, it disables all yarl transformations.\n  (2198)\n- Document that all app&#39;s middleware factories are run for every request.\n  (2225)\n- Reflect the fact that default resolver is threaded one starting from aiohttp\n  1.1 (2228)\n\n\nDeprecations and Removals\n-------------------------\n\n- Drop deprecated `Server.finish_connections` (2006)\n- Drop %O format from logging, use %b instead. Drop %e format from logging,\n  environment variables are not supported anymore. (2123)\n- Drop deprecated secure_proxy_ssl_header support (2171)\n- Removed TimeService in favor of simple caching. TimeService also had a bug\n  where it lost about 0.5 seconds per second. (2176)\n- Drop unused response_factory from static files API (2290)\n\n\nMisc\n----\n\n- 2013, 2014, 2048, 2094, 2149, 2187, 2214, 2225, 2243, 2248\n   ```\n   \n  \n  \n   ### 2.2.5\n   ```\n   ==================\n\n- Don&#39;t raise deprecation warning on\n  `loop.run_until_complete(client.close())` (2065)\n   ```\n   \n  \n  \n   ### 2.2.4\n   ```\n   ==================\n\n- Fix issue with synchronous session closing when using ClientSession\n  as an asynchronous context manager.  (2063)\n   ```\n   \n  \n  \n   ### 2.2.3\n   ```\n   ==================\n\n- Fix `_CoroGuard` for python 3.4\n   ```\n   \n  \n  \n   ### 2.2.2\n   ```\n   ==================\n\n- Allow `await session.close()` along with `yield from session.close()`\n   ```\n   \n  \n  \n   ### 2.2.1\n   ```\n   ==================\n\n- Relax `yarl` requirement to 0.11+\n\n- Backport 2026: `session.close` *is* a coroutine (2029)\n   ```\n   \n  \n  \n   ### 2.2.0\n   ```\n   ==================\n\n- Add doc for add_head, update doc for add_get. (1944)\n\n- Fixed consecutive calls for `Response.write_eof`.\n\n- Retain method attributes (e.g. :code:`__doc__`) when registering synchronous\n  handlers for resources. (1953)\n\n- Added signal TERM handling in `run_app` to gracefully exit (1932)\n\n- Fix websocket issues caused by frame fragmentation. (1962)\n\n- Raise RuntimeError is you try to set the Content Length and enable\n  chunked encoding at the same time (1941)\n\n- Small update for `unittest_run_loop`\n\n- Use CIMultiDict for ClientRequest.skip_auto_headers (1970)\n\n- Fix wrong startup sequence: test server and `run_app()` are not raise\n  `DeprecationWarning` now (1947)\n\n- Make sure cleanup signal is sent if startup signal has been sent (1959)\n\n- Fixed server keep-alive handler, could cause 100% cpu utilization (1955)\n\n- Connection can be destroyed before response get processed if\n  `await aiohttp.request(..)` is used (1981)\n\n- MultipartReader does not work with -OO (1969)\n\n- Fixed `ClientPayloadError` with blank `Content-Encoding` header (1931)\n\n- Support `deflate` encoding implemented in `httpbin.org/deflate` (1918)\n\n- Fix BadStatusLine caused by extra `CRLF` after `POST` data (1792)\n\n- Keep a reference to `ClientSession` in response object (1985)\n\n- Deprecate undocumented `app.on_loop_available` signal (1978)\n   ```\n   \n  \n  \n   ### 2.1.0\n   ```\n   ==================\n\n- Added support for experimental `async-tokio` event loop written in Rust\n  https://github.com/PyO3/tokio\n\n- Write to transport ``\\r\\n`` before closing after keepalive timeout,\n  otherwise client can not detect socket disconnection. (1883)\n\n- Only call `loop.close` in `run_app` if the user did *not* supply a loop.\n  Useful for allowing clients to specify their own cleanup before closing the\n  asyncio loop if they wish to tightly control loop behavior\n\n- Content disposition with semicolon in filename (917)\n\n- Added `request_info` to response object and `ClientResponseError`. (1733)\n\n- Added `history` to `ClientResponseError`. (1741)\n\n- Allow to disable redirect url re-quoting (1474)\n\n- Handle RuntimeError from transport (1790)\n\n- Dropped &quot;%O&quot; in access logger (1673)\n\n- Added `args` and `kwargs` to `unittest_run_loop`. Useful with other\n  decorators, for example `patch`. (1803)\n\n- Added `iter_chunks` to response.content object. (1805)\n\n- Avoid creating TimerContext when there is no timeout to allow\n  compatibility with Tornado. (1817) (1180)\n\n- Add `proxy_from_env` to `ClientRequest` to read from environment\n  variables. (1791)\n\n- Add DummyCookieJar helper. (1830)\n\n- Fix assertion errors in Python 3.4 from noop helper. (1847)\n\n- Do not unquote `+` in match_info values (1816)\n\n- Use Forwarded, X-Forwarded-Scheme and X-Forwarded-Host for better scheme and\n  host resolution. (1134)\n\n- Fix sub-application middlewares resolution order (1853)\n\n- Fix applications comparison (1866)\n\n- Fix static location in index when prefix is used (1662)\n\n- Make test server more reliable (1896)\n\n- Extend list of web exceptions, add HTTPUnprocessableEntity,\n  HTTPFailedDependency, HTTPInsufficientStorage status codes (1920)\n   ```\n   \n  \n  \n   ### 2.0.7\n   ```\n   ==================\n\n- Fix *pypi* distribution\n\n- Fix exception description (1807)\n\n- Handle socket error in FileResponse (1773)\n\n- Cancel websocket heartbeat on close (1793)\n   ```\n   \n  \n  \n   ### 2.0.6\n   ```\n   ==================\n\n- Keeping blank values for `request.post()` and `multipart.form()` (1765)\n\n- TypeError in data_received of ResponseHandler (1770)\n\n- Fix ``web.run_app`` not to bind to default host-port pair if only socket is\n  passed (1786)\n   ```\n   \n  \n  \n   ### 2.0.5\n   ```\n   ==================\n\n- Memory leak with aiohttp.request (1756)\n\n- Disable cleanup closed ssl transports by default.\n\n- Exception in request handling if the server responds before the body\n  is sent (1761)\n   ```\n   \n  \n  \n   ### 2.0.4\n   ```\n   ==================\n\n- Memory leak with aiohttp.request (1756)\n\n- Encoding is always UTF-8 in POST data (1750)\n\n- Do not add &quot;Content-Disposition&quot; header by default (1755)\n   ```\n   \n  \n  \n   ### 2.0.3\n   ```\n   ==================\n\n- Call https website through proxy will cause error (1745)\n\n- Fix exception on multipart/form-data post if content-type is not set (1743)\n   ```\n   \n  \n  \n   ### 2.0.2\n   ```\n   ==================\n\n- Fixed Application.on_loop_available signal (1739)\n\n- Remove debug code\n   ```\n   \n  \n  \n   ### 2.0.1\n   ```\n   ==================\n\n- Fix allow-head to include name on route (1737)\n\n- Fixed AttributeError in WebSocketResponse.can_prepare (1736)\n   ```\n   \n  \n  \n   ### 2.0.0\n   ```\n   ==================\n\n- Added `json` to `ClientSession.request()` method (1726)\n\n- Added session&#39;s `raise_for_status` parameter, automatically calls\n  raise_for_status() on any request. (1724)\n\n- `response.json()` raises `ClientReponseError` exception if response&#39;s\n  content type does not match (1723)\n\n  - Cleanup timer and loop handle on any client exception.\n\n- Deprecate `loop` parameter for Application&#39;s constructor\n   ```\n   \n  \n  \n   ### 2.0.0rc1\n   ```\n   =======================\n\n- Properly handle payload errors (1710)\n\n- Added `ClientWebSocketResponse.get_extra_info()` (1717)\n\n- It is not possible to combine Transfer-Encoding and chunked parameter,\n  same for compress and Content-Encoding (1655)\n\n- Connector&#39;s `limit` parameter indicates total concurrent connections.\n  New `limit_per_host` added, indicates total connections per endpoint. (1601)\n\n- Use url&#39;s `raw_host` for name resolution (1685)\n\n- Change `ClientResponse.url` to `yarl.URL` instance (1654)\n\n- Add max_size parameter to web.Request reading methods (1133)\n\n- Web Request.post() stores data in temp files (1469)\n\n- Add the `allow_head=True` keyword argument for `add_get` (1618)\n\n- `run_app` and the Command Line Interface now support serving over\n  Unix domain sockets for faster inter-process communication.\n\n- `run_app` now supports passing a preexisting socket object. This can be useful\n  e.g. for socket-based activated applications, when binding of a socket is\n  done by the parent process.\n\n- Implementation for Trailer headers parser is broken (1619)\n\n- Fix FileResponse to not fall on bad request (range out of file size)\n\n- Fix FileResponse to correct stream video to Chromes\n\n- Deprecate public low-level api (1657)\n\n- Deprecate `encoding` parameter for ClientSession.request() method\n\n- Dropped aiohttp.wsgi (1108)\n\n- Dropped `version` from ClientSession.request() method\n\n- Dropped websocket version 76 support (1160)\n\n- Dropped: `aiohttp.protocol.HttpPrefixParser`  (1590)\n\n- Dropped: Servers response&#39;s `.started`, `.start()` and\n  `.can_start()` method (1591)\n\n- Dropped:  Adding `sub app` via `app.router.add_subapp()` is deprecated\n  use `app.add_subapp()` instead (1592)\n\n- Dropped: `Application.finish()` and `Application.register_on_finish()` (1602)\n\n- Dropped: `web.Request.GET` and `web.Request.POST`\n\n- Dropped: aiohttp.get(), aiohttp.options(), aiohttp.head(),\n  aiohttp.post(), aiohttp.put(), aiohttp.patch(), aiohttp.delete(), and\n  aiohttp.ws_connect() (1593)\n\n- Dropped: `aiohttp.web.WebSocketResponse.receive_msg()` (1605)\n\n- Dropped: `ServerHttpProtocol.keep_alive_timeout` attribute and\n  `keep-alive`, `keep_alive_on`, `timeout`, `log` constructor parameters (1606)\n\n- Dropped: `TCPConnector&#39;s`` `.resolve`, `.resolved_hosts`,\n  `.clear_resolved_hosts()` attributes and `resolve` constructor\n  parameter (1607)\n\n- Dropped `ProxyConnector` (1609)\n   ```\n   \n  \n  \n   ### 1.3.5\n   ```\n   ==================\n\n- Fixed None timeout support (1720)\n   ```\n   \n  \n  \n   ### 1.3.4\n   ```\n   ==================\n\n- Revert timeout handling in client request\n\n- Fix StreamResponse representation after eof\n\n- Fix file_sender to not fall on bad request (range out of file size)\n\n- Fix file_sender to correct stream video to Chromes\n\n- Fix NotImplementedError server exception (1703)\n\n- Clearer error message for URL without a host name. (1691)\n\n- Silence deprecation warning in __repr__ (1690)\n\n- IDN + HTTPS = `ssl.CertificateError` (1685)\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/aiohttp\n  - Changelog: https://pyup.io/changelogs/aiohttp/\n  - Repo: https://github.com/aio-libs/aiohttp/\n</details>\n\n","created_at":"2018-04-05T23:47:07Z","updated_at":"2018-04-13T12:04:28Z","closed_at":"2018-04-13T12:04:28Z","merged_at":null,"merge_commit_sha":"9b472405b616dfb2ef13b9d241daa9bcdfac329e","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/project-hypr/hypr2/pulls/245/commits","review_comments_url":"https://api.github.com/repos/project-hypr/hypr2/pulls/245/comments","review_comment_url":"https://api.github.com/repos/project-hypr/hypr2/pulls/comments{/number}","comments_url":"https://api.github.com/repos/project-hypr/hypr2/issues/245/comments","statuses_url":"https://api.github.com/repos/project-hypr/hypr2/statuses/0d2326cee397fa7742eb0856a279b5091d94f947","head":{"label":"project-hypr:pyup-update-aiohttp-1.3.3-to-3.1.2","ref":"pyup-update-aiohttp-1.3.3-to-3.1.2","sha":"0d2326cee397fa7742eb0856a279b5091d94f947","user":{"login":"project-hypr","id":9267642,"avatar_url":"https://avatars0.githubusercontent.com/u/9267642?v=4","gravatar_id":"","url":"https://api.github.com/users/project-hypr","html_url":"https://github.com/project-hypr","followers_url":"https://api.github.com/users/project-hypr/followers","following_url":"https://api.github.com/users/project-hypr/following{/other_user}","gists_url":"https://api.github.com/users/project-hypr/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hypr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hypr/subscriptions","organizations_url":"https://api.github.com/users/project-hypr/orgs","repos_url":"https://api.github.com/users/project-hypr/repos","events_url":"https://api.github.com/users/project-hypr/events{/privacy}","received_events_url":"https://api.github.com/users/project-hypr/received_events","type":"Organization","site_admin":false},"repo":{"id":69046456,"name":"hypr2","full_name":"project-hypr/hypr2","owner":{"login":"project-hypr","id":9267642,"avatar_url":"https://avatars0.githubusercontent.com/u/9267642?v=4","gravatar_id":"","url":"https://api.github.com/users/project-hypr","html_url":"https://github.com/project-hypr","followers_url":"https://api.github.com/users/project-hypr/followers","following_url":"https://api.github.com/users/project-hypr/following{/other_user}","gists_url":"https://api.github.com/users/project-hypr/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hypr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hypr/subscriptions","organizations_url":"https://api.github.com/users/project-hypr/orgs","repos_url":"https://api.github.com/users/project-hypr/repos","events_url":"https://api.github.com/users/project-hypr/events{/privacy}","received_events_url":"https://api.github.com/users/project-hypr/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-hypr/hypr2","description":"Build a secure and RESTful hypermedia API.","fork":false,"url":"https://api.github.com/repos/project-hypr/hypr2","forks_url":"https://api.github.com/repos/project-hypr/hypr2/forks","keys_url":"https://api.github.com/repos/project-hypr/hypr2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-hypr/hypr2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-hypr/hypr2/teams","hooks_url":"https://api.github.com/repos/project-hypr/hypr2/hooks","issue_events_url":"https://api.github.com/repos/project-hypr/hypr2/issues/events{/number}","events_url":"https://api.github.com/repos/project-hypr/hypr2/events","assignees_url":"https://api.github.com/repos/project-hypr/hypr2/assignees{/user}","branches_url":"https://api.github.com/repos/project-hypr/hypr2/branches{/branch}","tags_url":"https://api.github.com/repos/project-hypr/hypr2/tags","blobs_url":"https://api.github.com/repos/project-hypr/hypr2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-hypr/hypr2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-hypr/hypr2/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-hypr/hypr2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-hypr/hypr2/statuses/{sha}","languages_url":"https://api.github.com/repos/project-hypr/hypr2/languages","stargazers_url":"https://api.github.com/repos/project-hypr/hypr2/stargazers","contributors_url":"https://api.github.com/repos/project-hypr/hypr2/contributors","subscribers_url":"https://api.github.com/repos/project-hypr/hypr2/subscribers","subscription_url":"https://api.github.com/repos/project-hypr/hypr2/subscription","commits_url":"https://api.github.com/repos/project-hypr/hypr2/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-hypr/hypr2/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-hypr/hypr2/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-hypr/hypr2/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-hypr/hypr2/contents/{+path}","compare_url":"https://api.github.com/repos/project-hypr/hypr2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-hypr/hypr2/merges","archive_url":"https://api.github.com/repos/project-hypr/hypr2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-hypr/hypr2/downloads","issues_url":"https://api.github.com/repos/project-hypr/hypr2/issues{/number}","pulls_url":"https://api.github.com/repos/project-hypr/hypr2/pulls{/number}","milestones_url":"https://api.github.com/repos/project-hypr/hypr2/milestones{/number}","notifications_url":"https://api.github.com/repos/project-hypr/hypr2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-hypr/hypr2/labels{/name}","releases_url":"https://api.github.com/repos/project-hypr/hypr2/releases{/id}","deployments_url":"https://api.github.com/repos/project-hypr/hypr2/deployments","created_at":"2016-09-23T17:28:19Z","updated_at":"2017-07-24T13:05:24Z","pushed_at":"2018-04-13T12:04:24Z","git_url":"git://github.com/project-hypr/hypr2.git","ssh_url":"git@github.com:project-hypr/hypr2.git","clone_url":"https://github.com/project-hypr/hypr2.git","svn_url":"https://github.com/project-hypr/hypr2","homepage":"https://project-hypr.github.io/","size":136,"stargazers_count":2,"watchers_count":2,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause"},"forks":0,"open_issues":6,"watchers":2,"default_branch":"master"}},"base":{"label":"project-hypr:master","ref":"master","sha":"b49ab9774255f998d0e0e05ee8952b1701a17357","user":{"login":"project-hypr","id":9267642,"avatar_url":"https://avatars0.githubusercontent.com/u/9267642?v=4","gravatar_id":"","url":"https://api.github.com/users/project-hypr","html_url":"https://github.com/project-hypr","followers_url":"https://api.github.com/users/project-hypr/followers","following_url":"https://api.github.com/users/project-hypr/following{/other_user}","gists_url":"https://api.github.com/users/project-hypr/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hypr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hypr/subscriptions","organizations_url":"https://api.github.com/users/project-hypr/orgs","repos_url":"https://api.github.com/users/project-hypr/repos","events_url":"https://api.github.com/users/project-hypr/events{/privacy}","received_events_url":"https://api.github.com/users/project-hypr/received_events","type":"Organization","site_admin":false},"repo":{"id":69046456,"name":"hypr2","full_name":"project-hypr/hypr2","owner":{"login":"project-hypr","id":9267642,"avatar_url":"https://avatars0.githubusercontent.com/u/9267642?v=4","gravatar_id":"","url":"https://api.github.com/users/project-hypr","html_url":"https://github.com/project-hypr","followers_url":"https://api.github.com/users/project-hypr/followers","following_url":"https://api.github.com/users/project-hypr/following{/other_user}","gists_url":"https://api.github.com/users/project-hypr/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hypr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hypr/subscriptions","organizations_url":"https://api.github.com/users/project-hypr/orgs","repos_url":"https://api.github.com/users/project-hypr/repos","events_url":"https://api.github.com/users/project-hypr/events{/privacy}","received_events_url":"https://api.github.com/users/project-hypr/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-hypr/hypr2","description":"Build a secure and RESTful hypermedia API.","fork":false,"url":"https://api.github.com/repos/project-hypr/hypr2","forks_url":"https://api.github.com/repos/project-hypr/hypr2/forks","keys_url":"https://api.github.com/repos/project-hypr/hypr2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-hypr/hypr2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-hypr/hypr2/teams","hooks_url":"https://api.github.com/repos/project-hypr/hypr2/hooks","issue_events_url":"https://api.github.com/repos/project-hypr/hypr2/issues/events{/number}","events_url":"https://api.github.com/repos/project-hypr/hypr2/events","assignees_url":"https://api.github.com/repos/project-hypr/hypr2/assignees{/user}","branches_url":"https://api.github.com/repos/project-hypr/hypr2/branches{/branch}","tags_url":"https://api.github.com/repos/project-hypr/hypr2/tags","blobs_url":"https://api.github.com/repos/project-hypr/hypr2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-hypr/hypr2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-hypr/hypr2/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-hypr/hypr2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-hypr/hypr2/statuses/{sha}","languages_url":"https://api.github.com/repos/project-hypr/hypr2/languages","stargazers_url":"https://api.github.com/repos/project-hypr/hypr2/stargazers","contributors_url":"https://api.github.com/repos/project-hypr/hypr2/contributors","subscribers_url":"https://api.github.com/repos/project-hypr/hypr2/subscribers","subscription_url":"https://api.github.com/repos/project-hypr/hypr2/subscription","commits_url":"https://api.github.com/repos/project-hypr/hypr2/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-hypr/hypr2/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-hypr/hypr2/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-hypr/hypr2/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-hypr/hypr2/contents/{+path}","compare_url":"https://api.github.com/repos/project-hypr/hypr2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-hypr/hypr2/merges","archive_url":"https://api.github.com/repos/project-hypr/hypr2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-hypr/hypr2/downloads","issues_url":"https://api.github.com/repos/project-hypr/hypr2/issues{/number}","pulls_url":"https://api.github.com/repos/project-hypr/hypr2/pulls{/number}","milestones_url":"https://api.github.com/repos/project-hypr/hypr2/milestones{/number}","notifications_url":"https://api.github.com/repos/project-hypr/hypr2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-hypr/hypr2/labels{/name}","releases_url":"https://api.github.com/repos/project-hypr/hypr2/releases{/id}","deployments_url":"https://api.github.com/repos/project-hypr/hypr2/deployments","created_at":"2016-09-23T17:28:19Z","updated_at":"2017-07-24T13:05:24Z","pushed_at":"2018-04-13T12:04:24Z","git_url":"git://github.com/project-hypr/hypr2.git","ssh_url":"git@github.com:project-hypr/hypr2.git","clone_url":"https://github.com/project-hypr/hypr2.git","svn_url":"https://github.com/project-hypr/hypr2","homepage":"https://project-hypr.github.io/","size":136,"stargazers_count":2,"watchers_count":2,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause"},"forks":0,"open_issues":6,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/project-hypr/hypr2/pulls/245"},"html":{"href":"https://github.com/project-hypr/hypr2/pull/245"},"issue":{"href":"https://api.github.com/repos/project-hypr/hypr2/issues/245"},"comments":{"href":"https://api.github.com/repos/project-hypr/hypr2/issues/245/comments"},"review_comments":{"href":"https://api.github.com/repos/project-hypr/hypr2/pulls/245/comments"},"review_comment":{"href":"https://api.github.com/repos/project-hypr/hypr2/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/project-hypr/hypr2/pulls/245/commits"},"statuses":{"href":"https://api.github.com/repos/project-hypr/hypr2/statuses/0d2326cee397fa7742eb0856a279b5091d94f947"}},"author_association":"COLLABORATOR","merged":false,"mergeable":true,"rebaseable":true,"mergeable_state":"unstable","merged_by":null,"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":1,"deletions":1,"changed_files":1}}
{"actor":{"display_login":"pyup-bot"}}