Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support using netrc for non-proxy HTTP credentials #7131

Merged
merged 51 commits into from Mar 17, 2023

Conversation

yuvipanda
Copy link
Contributor

@yuvipanda yuvipanda commented Dec 16, 2022

What do these changes do?

Currently, setting trust_env=True in ClientSession will only use the .netrc
file if present for authentication to proxies. With this change, the credentials will
also be used for regular HTTP hosts, and Basic Auth will be sent if an appropriate
entry is present in the user's .netrc file.

Are there changes in behavior for the user?

YES! Currently, their .netrc file will be ignored when not making proxy requests. This
will start sending any credentials in netrc files to hosts.

The behavior of this PR seems to have possibly been the suggested behavior when
netrc support was initially added, based on this comment: #2584 (comment).

The behavior with this PR applied also matches requests and other libraries. In fact, this
was a deep dive output after trying to figure out why accessing NASA open data with requests
works but aiohttp does not :D (nsidc/earthaccess#188 has the trail crumbs).

If this is considered a breaking change, I'm happy to instead introduce a new param that
toggles this behavior instead. However, trust_env is what requests and other libraries use,
so may be ok.

Related issue number

#2581
#2584 (comment)
(outside aiohttp) nsidc/earthaccess#188

Checklist

  • I think the code is well written
  • Unit tests for the changes exist
  • Documentation reflects the changes
  • If you provide code modification, please add yourself to CONTRIBUTORS.txt
    • The format is <Name> <Surname>.
    • Please keep alphabetical order, the file is sorted by names.
  • Add a new news fragment into the CHANGES folder
    • name it <issue_id>.<type> for example (588.bugfix)
    • if you don't have an issue_id change it to the pr id after creating the pr
    • ensure type is one of the following:
      • .feature: Signifying a new feature.
      • .bugfix: Signifying a bug fix.
      • .doc: Signifying a documentation improvement.
      • .removal: Signifying a deprecation or removal of public API.
      • .misc: A ticket has been closed, but it is not of interest to users.
    • Make sure to use full sentences with correct case and punctuation, for example: "Fix issue with non-ascii contents in doctest text files."

@yuvipanda
Copy link
Contributor Author

I will add tests and documentation changes soon! Wanted to open this early to get @asvetlov's opinion (and others' too maybe?) on wether this is a breaking change or not.

THANK YOU SO MUCH for all the work on aiohttplib! It is heavily used in the open science / climate science ecosystem, and we are grateful for it.

@codecov
Copy link

codecov bot commented Dec 16, 2022

Codecov Report

Merging #7131 (38a86d9) into master (d51013d) will decrease coverage by 0.01%.
The diff coverage is 95.31%.

@@            Coverage Diff             @@
##           master    #7131      +/-   ##
==========================================
- Coverage   97.38%   97.37%   -0.01%     
==========================================
  Files         106      106              
  Lines       31093    31146      +53     
  Branches     3875     3900      +25     
==========================================
+ Hits        30280    30329      +49     
- Misses        612      613       +1     
- Partials      201      204       +3     
Flag Coverage Δ
CI-GHA 97.28% <95.31%> (-0.01%) ⬇️
OS-Linux 96.93% <95.31%> (-0.02%) ⬇️
OS-Windows 95.34% <95.23%> (-0.01%) ⬇️
OS-macOS 96.50% <95.31%> (-0.01%) ⬇️
Py-3.10.8 ?
Py-3.10.9 97.02% <95.31%> (-0.01%) ⬇️
Py-3.11.0 95.60% <95.31%> (+<0.01%) ⬆️
Py-3.7.15 96.75% <95.23%> (-0.01%) ⬇️
Py-3.7.9 95.23% <95.16%> (-0.01%) ⬇️
Py-3.8.10 95.13% <95.23%> (-0.01%) ⬇️
Py-3.8.15 ?
Py-3.8.16 96.65% <95.31%> (?)
Py-3.9.13 95.12% <95.23%> (-0.01%) ⬇️
Py-3.9.14 ?
Py-3.9.15 ?
Py-3.9.16 96.66% <95.31%> (-0.01%) ⬇️
Py-pypy7.3.10 ?
Py-pypy7.3.11 94.15% <84.37%> (?)
Py-pypy7.3.9 ?
VM-macos 96.50% <95.31%> (-0.01%) ⬇️
VM-ubuntu 96.93% <95.31%> (-0.02%) ⬇️
VM-windows 95.34% <95.23%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
aiohttp/helpers.py 95.09% <86.66%> (-0.29%) ⬇️
tests/conftest.py 95.90% <87.50%> (-0.59%) ⬇️
aiohttp/client.py 94.38% <100.00%> (+0.21%) ⬆️
aiohttp/client_reqrep.py 97.74% <100.00%> (+0.01%) ⬆️
tests/test_client_request.py 99.58% <100.00%> (+<0.01%) ⬆️
tests/test_helpers.py 98.99% <100.00%> (+0.03%) ⬆️
tests/autobahn/test_autobahn.py 98.33% <0.00%> (-1.67%) ⬇️
tests/test_web_functional.py 98.04% <0.00%> (-0.07%) ⬇️
aiohttp/web.py 99.18% <0.00%> (ø)
aiohttp/http.py 100.00% <0.00%> (ø)
... and 2 more

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

aiohttp/helpers.py Outdated Show resolved Hide resolved
aiohttp/helpers.py Outdated Show resolved Hide resolved
aiohttp/helpers.py Outdated Show resolved Hide resolved
aiohttp/helpers.py Outdated Show resolved Hide resolved
@yuvipanda
Copy link
Contributor Author

@Dreamsorcerer I really appreciate all the code clarity suggestions, thank you. I've implemented all of them, and tried to keep clarifying comments as well.

I've also added three unit tests. I'm not sure if test_netrc_from_env is redundant, happy to remove it if you think so.

@psf-chronographer psf-chronographer bot added the bot:chronographer:provided There is a change note present in this PR label Dec 19, 2022
@yuvipanda
Copy link
Contributor Author

I also appreciate the checklist in the PR body template, and believe I have ticked all the boxes.

@yuvipanda
Copy link
Contributor Author

I do not know what the correct version this is to be added in. I'd love to see this released sooner than later (:D) - would that be 3.8.4 or 3.9 or 4.x? It probably is either 3.9 or 4.x, but I am not sure what the next release is to be...

@webknjaz
Copy link
Member

webknjaz commented Dec 19, 2022

3.9 if backoported.

@yuvipanda
Copy link
Contributor Author

I see two relevant errors perhaps in make mypy:

aiohttp/helpers.py:273: error: Argument 1 to "BasicAuth" has incompatible type "Optional[str]"; expected "str"  [arg-type]
aiohttp/client_reqrep.py:443: error: Argument 2 to "basicauth_from_netrc" has incompatible type "Optional[str]"; expected "str"  [arg-type]

Both of these are things we guard against with an if and an intermediate variable, but mypy doesn't seem to detect that. I've this PR to my PR open that fixes these yuvipanda#3.

However, these intermediate bools were added at your explicit request, @webknjaz (see #7131 (comment)). I personally find what mypy want, without intermediate boolean variables, a lot more readable as well. However, at this juncture I'll basically do whatever it is that you want to get this PR merged - so if you can point me to a way to make mypy happy while also keeping your intermediate variables I'll do so :)

@Dreamsorcerer
Copy link
Member

However, these intermediate bools were added at your explicit request, @webknjaz (see #7131 (comment)). I personally find what mypy want, without intermediate boolean variables, a lot more readable as well.

Yeah, I don't think the second one improves readability at all. The first one is also scheduled for removal in a few years anyway, so I personally am not bothered about keeping them.

Don't use intermediary bools for None checks
@yuvipanda
Copy link
Contributor Author

@Dreamsorcerer i've hence merged in yuvipanda#3 so mypy should pass now!

@yuvipanda
Copy link
Contributor Author

yay, all tests seem to pass now!

@yuvipanda
Copy link
Contributor Author

Just wanted to check-in on this again, @Dreamsorcerer and @webknjaz :)

docs/glossary.rst Outdated Show resolved Hide resolved
tests/test_helpers.py Outdated Show resolved Hide resolved
@yuvipanda
Copy link
Contributor Author

The windows test failures seem unrelated? And the missing code coverage result is due to differences in python versions, so I hope that's ok.

@yuvipanda
Copy link
Contributor Author

This time there's a macos test failure :) So i'd imagine those are flakes.

the codecov warning is one missed line, and that's due to differing behavior in versions of python. I hope that's ok to ignore.

@Dreamsorcerer
Copy link
Member

This time there's a macos test failure :) So i'd imagine those are flakes.

Not flaky, they just don't work yet. If check has passed, then that means the tests are passing correctly.

the codecov warning is one missed line, and that's due to differing behavior in versions of python. I hope that's ok to ignore.

Hmm, that's not right. We run on Python 3.7-3.11, so if there was test coverage, it would have run. However, that code doesn't seem important and will be removed in a future version, so I'm not going to bother investigating.

@Dreamsorcerer
Copy link
Member

If @webknjaz is happy to resolve his comments, then I'll merge it in.

@yuvipanda
Copy link
Contributor Author

We run on Python 3.7-3.11, so if there was test coverage, it would have run.

Ah, hmm. I'm not sure why that's happening then :|

However, that code doesn't seem important and will be removed in a future version, so I'm not going to bother investigating.

I agree wholeheartedly!

@yuvipanda
Copy link
Contributor Author

I'm going on vacation from tuesday for 15 days, and wanted to check-in and see if there is anything I can do before I go :)

@yuvipanda
Copy link
Contributor Author

Just another gentle ping, as I slowly pick up back from vacation @Dreamsorcerer @webknjaz :)

@webknjaz
Copy link
Member

However, at this juncture I'll basically do whatever it is that you want to get this PR merged - so if you can point me to a way to make mypy happy while also keeping your intermediate variables I'll do so :)

I suppose you're talking about this 524c04d (#7131). I don't like complex clauses but if this bothers mypy, it's probably fine to do what you did for now. Wonder if explicit annotations on the vars would help...

@webknjaz webknjaz merged commit 6da0469 into aio-libs:master Mar 17, 2023
@patchback
Copy link
Contributor

patchback bot commented Mar 17, 2023

Backport to 3.9: 💔 cherry-picking failed — conflicts found

❌ Failed to cleanly apply 6da0469 on top of patchback/backports/3.9/6da04694fd87a39af9c3856048c9ff23ca815f88/pr-7131

Backporting merged PR #7131 into master

  1. Ensure you have a local repo clone of your fork. Unless you cloned it
    from the upstream, this would be your origin remote.
  2. Make sure you have an upstream repo added as a remote too. In these
    instructions you'll refer to it by the name upstream. If you don't
    have it, here's how you can add it:
    $ git remote add upstream https://github.com/aio-libs/aiohttp.git
  3. Ensure you have the latest copy of upstream and prepare a branch
    that will hold the backported code:
    $ git fetch upstream
    $ git checkout -b patchback/backports/3.9/6da04694fd87a39af9c3856048c9ff23ca815f88/pr-7131 upstream/3.9
  4. Now, cherry-pick PR Support using netrc for non-proxy HTTP credentials #7131 contents into that branch:
    $ git cherry-pick -x 6da04694fd87a39af9c3856048c9ff23ca815f88
    If it'll yell at you with something like fatal: Commit 6da04694fd87a39af9c3856048c9ff23ca815f88 is a merge but no -m option was given., add -m 1 as follows instead:
    $ git cherry-pick -m1 -x 6da04694fd87a39af9c3856048c9ff23ca815f88
  5. At this point, you'll probably encounter some merge conflicts. You must
    resolve them in to preserve the patch from PR Support using netrc for non-proxy HTTP credentials #7131 as close to the
    original as possible.
  6. Push this branch to your fork on GitHub:
    $ git push origin patchback/backports/3.9/6da04694fd87a39af9c3856048c9ff23ca815f88/pr-7131
  7. Create a PR, ensure that the CI is green. If it's not — update it so that
    the tests and any other checks pass. This is it!
    Now relax and wait for the maintainers to process your pull request
    when they have some cycles to do reviews. Don't worry — they'll tell you if
    any improvements are necessary when the time comes!

🤖 @patchback
I'm built with octomachinery and
my source is open — https://github.com/sanitizers/patchback-github-app.

@webknjaz
Copy link
Member

@yuvipanda looks like manual cherry-picking is needed

Dreamsorcerer pushed a commit that referenced this pull request Apr 8, 2023
Currently, setting `trust_env=True` in `ClientSession` will only use the `.netrc`
file if present for authentication to proxies. With this change, the credentials will
also be used for regular HTTP hosts, and Basic Auth will be sent if an appropriate
entry is present in the user's `.netrc` file.

PR #7131.

Co-authored-by: Sam Bull <aa6bs0@sambull.org>
Co-authored-by: Sviatoslav Sydorenko <webknjaz@redhat.com>
(cherry picked from commit 6da0469)
Dreamsorcerer added a commit that referenced this pull request Apr 8, 2023
Currently, setting `trust_env=True` in `ClientSession` will only use the
`.netrc` file if present for authentication to proxies. With this
change, the credentials will also be used for regular HTTP hosts, and
Basic Auth will be sent if an appropriate entry is present in the user's
`.netrc` file.

PR #7131.

Co-authored-by: Sam Bull <aa6bs0@sambull.org>
Co-authored-by: Sviatoslav Sydorenko <webknjaz@redhat.com>
(cherry picked from commit 6da0469)

<!-- Thank you for your contribution! -->

## What do these changes do?

<!-- Please give a short brief about these changes. -->

## Are there changes in behavior for the user?

<!-- Outline any notable behaviour for the end users. -->

## Related issue number

<!-- Are there any issues opened that will be resolved by merging this
change? -->

## Checklist

- [ ] I think the code is well written
- [ ] Unit tests for the changes exist
- [ ] Documentation reflects the changes
- [ ] If you provide code modification, please add yourself to
`CONTRIBUTORS.txt`
  * The format is &lt;Name&gt; &lt;Surname&gt;.
  * Please keep alphabetical order, the file is sorted by names.
- [ ] Add a new news fragment into the `CHANGES` folder
  * name it `<issue_id>.<type>` for example (588.bugfix)
* if you don't have an `issue_id` change it to the pr id after creating
the pr
  * ensure type is one of the following:
    * `.feature`: Signifying a new feature.
    * `.bugfix`: Signifying a bug fix.
    * `.doc`: Signifying a documentation improvement.
    * `.removal`: Signifying a deprecation or removal of public API.
* `.misc`: A ticket has been closed, but it is not of interest to users.
* Make sure to use full sentences with correct case and punctuation, for
example: "Fix issue with non-ascii contents in doctest text files."

Co-authored-by: Yuvi Panda <yuvipanda@gmail.com>
renovate bot added a commit to allenporter/pyrainbird that referenced this pull request Nov 20, 2023
[![Mend Renovate logo
banner](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [aiohttp](https://togithub.com/aio-libs/aiohttp) | `==3.8.6` ->
`==3.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/aiohttp/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/aiohttp/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/aiohttp/3.8.6/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/aiohttp/3.8.6/3.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>aio-libs/aiohttp (aiohttp)</summary>

###
[`v3.9.0`](https://togithub.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#390-2023-11-18)

[Compare
Source](https://togithub.com/aio-libs/aiohttp/compare/v3.8.6...v3.9.0)

\==================

## Features

- Introduced `AppKey` for static typing support of `Application`
storage.
See
https://docs.aiohttp.org/en/stable/web_advanced.html#application-s-config

    `#&#8203;5864 <https://github.com/aio-libs/aiohttp/issues/5864>`\_

- Added a graceful shutdown period which allows pending tasks to
complete before the application's cleanup is called.
The period can be adjusted with the `shutdown_timeout` parameter. -- by
:user:`Dreamsorcerer`.
See
https://docs.aiohttp.org/en/latest/web_advanced.html#graceful-shutdown

    `#&#8203;7188 <https://github.com/aio-libs/aiohttp/issues/7188>`\_

- Added `handler_cancellation
<https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation>`\_
parameter to cancel web handler on client disconnection. -- by
:user:`mosquito`
This (optionally) reintroduces a feature removed in a previous release.
Recommended for those looking for an extra level of protection against
denial-of-service attacks.

    `#&#8203;7056 <https://github.com/aio-libs/aiohttp/issues/7056>`\_

- Added support for setting response header parameters `max_line_size`
and `max_field_size`.

    `#&#8203;2304 <https://github.com/aio-libs/aiohttp/issues/2304>`\_

- Added `auto_decompress` parameter to `ClientSession.request` to
override `ClientSession._auto_decompress`. -- by :user:`Daste745`

    `#&#8203;3751 <https://github.com/aio-libs/aiohttp/issues/3751>`\_

-   Changed `raise_for_status` to allow a coroutine.

    `#&#8203;3892 <https://github.com/aio-libs/aiohttp/issues/3892>`\_

- Added client brotli compression support (optional with runtime check).

    `#&#8203;5219 <https://github.com/aio-libs/aiohttp/issues/5219>`\_

- Added `client_max_size` to `BaseRequest.clone()` to allow overriding
the request body size. -- :user:`anesabml`.

    `#&#8203;5704 <https://github.com/aio-libs/aiohttp/issues/5704>`\_

-   Added a middleware type alias `aiohttp.typedefs.Middleware`.

    `#&#8203;5898 <https://github.com/aio-libs/aiohttp/issues/5898>`\_

- Exported `HTTPMove` which can be used to catch any redirection request
    that has a location -- :user:`dreamsorcerer`.

    `#&#8203;6594 <https://github.com/aio-libs/aiohttp/issues/6594>`\_

- Changed the `path` parameter in `web.run_app()` to accept a
`pathlib.Path` object.

    `#&#8203;6839 <https://github.com/aio-libs/aiohttp/issues/6839>`\_

- Performance: Skipped filtering `CookieJar` when the jar is empty or
all cookies have expired.

    `#&#8203;7819 <https://github.com/aio-libs/aiohttp/issues/7819>`\_

- Performance: Only check origin if insecure scheme and there are
origins to treat as secure, in `CookieJar.filter_cookies()`.

    `#&#8203;7821 <https://github.com/aio-libs/aiohttp/issues/7821>`\_

- Performance: Used timestamp instead of `datetime` to achieve faster
cookie expiration in `CookieJar`.

    `#&#8203;7824 <https://github.com/aio-libs/aiohttp/issues/7824>`\_

- Added support for passing a custom server name parameter to HTTPS
connection.

    `#&#8203;7114 <https://github.com/aio-libs/aiohttp/issues/7114>`\_

- Added support for using Basic Auth credentials from :file:`.netrc`
file when making HTTP requests with the
:py:class:`~aiohttp.ClientSession` `trust_env` argument is set to
`True`. -- by :user:`yuvipanda`.

    `#&#8203;7131 <https://github.com/aio-libs/aiohttp/issues/7131>`\_

-   Turned access log into no-op when the logger is disabled.

    `#&#8203;7240 <https://github.com/aio-libs/aiohttp/issues/7240>`\_

- Added typing information to `RawResponseMessage`. -- by
:user:`Gobot1234`

    `#&#8203;7365 <https://github.com/aio-libs/aiohttp/issues/7365>`\_

- Removed `async-timeout` for Python 3.11+ (replaced with
`asyncio.timeout()` on newer releases).

    `#&#8203;7502 <https://github.com/aio-libs/aiohttp/issues/7502>`\_

- Added support for `brotlicffi` as an alternative to `brotli` (fixing
Brotli support on PyPy).

    `#&#8203;7611 <https://github.com/aio-libs/aiohttp/issues/7611>`\_

- Added `WebSocketResponse.get_extra_info()` to access a protocol
transport's extra info.

    `#&#8203;7078 <https://github.com/aio-libs/aiohttp/issues/7078>`\_

-   Allow `link` argument to be set to None/empty in HTTP 451 exception.

    `#&#8203;7689 <https://github.com/aio-libs/aiohttp/issues/7689>`\_

## Bugfixes

- Implemented stripping the trailing dots from fully-qualified domain
names in `Host` headers and TLS context when acting as an HTTP client.
This allows the client to connect to URLs with FQDN host name like
`https://example.com./`.
    \-- by :user:`martin-sucha`.

    `#&#8203;3636 <https://github.com/aio-libs/aiohttp/issues/3636>`\_

- Fixed client timeout not working when incoming data is always
available without waiting. -- by :user:`Dreamsorcerer`.

    `#&#8203;5854 <https://github.com/aio-libs/aiohttp/issues/5854>`\_

- Fixed `readuntil` to work with a delimiter of more than one character.

    `#&#8203;6701 <https://github.com/aio-libs/aiohttp/issues/6701>`\_

-   Added `__repr__` to `EmptyStreamReader` to avoid `AttributeError`.

    `#&#8203;6916 <https://github.com/aio-libs/aiohttp/issues/6916>`\_

-   Fixed bug when using `TCPConnector` with `ttl_dns_cache=0`.

    `#&#8203;7014 <https://github.com/aio-libs/aiohttp/issues/7014>`\_

- Fixed response returned from expect handler being thrown away. -- by
:user:`Dreamsorcerer`

    `#&#8203;7025 <https://github.com/aio-libs/aiohttp/issues/7025>`\_

- Avoided raising `UnicodeDecodeError` in multipart and in HTTP headers
parsing.

    `#&#8203;7044 <https://github.com/aio-libs/aiohttp/issues/7044>`\_

- Changed `sock_read` timeout to start after writing has finished,
avoiding read timeouts caused by an unfinished write. -- by
:user:`dtrifiro`

    `#&#8203;7149 <https://github.com/aio-libs/aiohttp/issues/7149>`\_

-   Fixed missing query in tracing method URLs when using `yarl` 1.9+.

    `#&#8203;7259 <https://github.com/aio-libs/aiohttp/issues/7259>`\_

- Changed max 32-bit timestamp to an aware datetime object, for
consistency with the non-32-bit one, and to avoid a `DeprecationWarning`
on Python 3.12.

    `#&#8203;7302 <https://github.com/aio-libs/aiohttp/issues/7302>`\_

- Fixed `EmptyStreamReader.iter_chunks()` never ending. -- by
:user:`mind1m`

    `#&#8203;7616 <https://github.com/aio-libs/aiohttp/issues/7616>`\_

- Fixed a rare `RuntimeError: await wasn't used with future` exception.
-- by :user:`stalkerg`

    `#&#8203;7785 <https://github.com/aio-libs/aiohttp/issues/7785>`\_

-   Fixed issue with insufficient HTTP method and version validation.

    `#&#8203;7700 <https://github.com/aio-libs/aiohttp/issues/7700>`\_

-   Added check to validate that absolute URIs have schemes.

    `#&#8203;7712 <https://github.com/aio-libs/aiohttp/issues/7712>`\_

- Fixed unhandled exception when Python HTTP parser encounters unpaired
Unicode surrogates.

    `#&#8203;7715 <https://github.com/aio-libs/aiohttp/issues/7715>`\_

- Updated parser to disallow invalid characters in header field names
and stop accepting LF as a request line separator.

    `#&#8203;7719 <https://github.com/aio-libs/aiohttp/issues/7719>`\_

-   Fixed Python HTTP parser not treating 204/304/1xx as an empty body.

    `#&#8203;7755 <https://github.com/aio-libs/aiohttp/issues/7755>`\_

-   Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3.

    `#&#8203;7756 <https://github.com/aio-libs/aiohttp/issues/7756>`\_

- Fixed an issue when a client request is closed before completing a
chunked payload. -- by :user:`Dreamsorcerer`

    `#&#8203;7764 <https://github.com/aio-libs/aiohttp/issues/7764>`\_

-   Edge Case Handling for ResponseParser for missing reason value.

    `#&#8203;7776 <https://github.com/aio-libs/aiohttp/issues/7776>`\_

- Fixed `ClientWebSocketResponse.close_code` being erroneously set to
`None` when there are concurrent async tasks receiving data and closing
the connection.

    `#&#8203;7306 <https://github.com/aio-libs/aiohttp/issues/7306>`\_

-   Added HTTP method validation.

    `#&#8203;6533 <https://github.com/aio-libs/aiohttp/issues/6533>`\_

- Fixed arbitrary sequence types being allowed to inject values via
version parameter. -- by :user:`Dreamsorcerer`

    `#&#8203;7835 <https://github.com/aio-libs/aiohttp/issues/7835>`\_

- Performance: Fixed increase in latency with small messages from
websocket compression changes.

    `#&#8203;7797 <https://github.com/aio-libs/aiohttp/issues/7797>`\_

## Improved Documentation

- Fixed the `ClientResponse.release`'s type in the doc. Changed from
`comethod` to `method`.

    `#&#8203;5836 <https://github.com/aio-libs/aiohttp/issues/5836>`\_

- Added information on behavior of base_url parameter in
`ClientSession`.

    `#&#8203;6647 <https://github.com/aio-libs/aiohttp/issues/6647>`\_

-   Fixed `ClientResponseError` docs.

    `#&#8203;6700 <https://github.com/aio-libs/aiohttp/issues/6700>`\_

-   Updated Redis code examples to follow the latest API.

    `#&#8203;6907 <https://github.com/aio-libs/aiohttp/issues/6907>`\_

- Added a note about possibly needing to update headers when using
`on_response_prepare`. -- by :user:`Dreamsorcerer`

    `#&#8203;7283 <https://github.com/aio-libs/aiohttp/issues/7283>`\_

- Completed `trust_env` parameter description to honor `wss_proxy`,
`ws_proxy` or `no_proxy` env.

    `#&#8203;7325 <https://github.com/aio-libs/aiohttp/issues/7325>`\_

- Expanded SSL documentation with more examples (e.g. how to use
certifi). -- by :user:`Dreamsorcerer`

    `#&#8203;7334 <https://github.com/aio-libs/aiohttp/issues/7334>`\_

-   Fix, update, and improve client exceptions documentation.

    `#&#8203;7733 <https://github.com/aio-libs/aiohttp/issues/7733>`\_

## Deprecations and Removals

-   Added `shutdown_timeout` parameter to `BaseRunner`, while
deprecating `shutdown_timeout` parameter from `BaseSite`. -- by
:user:`Dreamsorcerer`

    `#&#8203;7718 <https://github.com/aio-libs/aiohttp/issues/7718>`\_

-   Dropped Python 3.6 support.

    `#&#8203;6378 <https://github.com/aio-libs/aiohttp/issues/6378>`\_

-   Dropped Python 3.7 support. -- by :user:`Dreamsorcerer`

    `#&#8203;7336 <https://github.com/aio-libs/aiohttp/issues/7336>`\_

- Removed support for abandoned `tokio` event loop. -- by
:user:`Dreamsorcerer`

    `#&#8203;7281 <https://github.com/aio-libs/aiohttp/issues/7281>`\_

## Misc

-   Made `print` argument in `run_app()` optional.

    `#&#8203;3690 <https://github.com/aio-libs/aiohttp/issues/3690>`\_

-   Improved performance of `ceil_timeout` in some cases.

    `#&#8203;6316 <https://github.com/aio-libs/aiohttp/issues/6316>`\_

- Changed importing Gunicorn to happen on-demand, decreasing import time
by ~53%. -- :user:`Dreamsorcerer`

    `#&#8203;6591 <https://github.com/aio-libs/aiohttp/issues/6591>`\_

- Improved import time by replacing `http.server` with
`http.HTTPStatus`.

    `#&#8203;6903 <https://github.com/aio-libs/aiohttp/issues/6903>`\_

- Fixed annotation of `ssl` parameter to disallow `True`. -- by
:user:`Dreamsorcerer`.

    `#&#8203;7335 <https://github.com/aio-libs/aiohttp/issues/7335>`\_

***

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/allenporter/pyrainbird).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy41OS44IiwidXBkYXRlZEluVmVyIjoiMzcuNTkuOCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport-3.9 Trigger automatic backporting to the 3.9 release branch by Patchback robot bot:chronographer:provided There is a change note present in this PR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants