-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Refactor ClientRequest #11012
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
base: master
Are you sure you want to change the base?
Refactor ClientRequest #11012
Conversation
for more information, see https://pre-commit.ci
…into clientrequest-refactor
❌ 128 Tests Failed:
View the top 3 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
aiohttp/client_reqrep.py
Outdated
@@ -190,623 +193,352 @@ class ConnectionKey(NamedTuple): | |||
proxy_headers_hash: Optional[int] # hash(CIMultiDict) | |||
|
|||
|
|||
class ClientRequest: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we can back-port a limited version of this to keep back-ports more manageable. Right now automatic back-porting fails far too often, and we aren't any closer to releasing 4.x so we are going to have to deal with that for a long time which makes the risk of back-port errors higher.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe. Will have to move backportable parts to another PR and merge, then update this one.
CodSpeed Performance ReportMerging #11012 will degrade performances by 9.34%Comparing Summary
Benchmarks breakdown
|
for more information, see https://pre-commit.ci
…into clientrequest-refactor
Sorry about the conflicts |
Bumps [pip](https://github.com/pypa/pip) from 24.3.1 to 25.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pypa/pip/blob/main/NEWS.rst">pip's changelog</a>.</em></p> <blockquote> <h1>25.0 (2025-01-26)</h1> <h2>Deprecations and Removals</h2> <ul> <li>Deprecate the <code>no-python-version-warning</code> flag as it has long done nothing since Python 2 support was removed in pip 21.0. (<code>[#13154](pypa/pip#13154) <https://github.com/pypa/pip/issues/13154></code>_)</li> </ul> <h2>Features</h2> <ul> <li>Prefer to display :pep:<code>639</code> <code>License-Expression</code> in <code>pip show</code> if metadata version is at least 2.4. (<code>[#13112](pypa/pip#13112) <https://github.com/pypa/pip/issues/13112></code>_)</li> <li>Support :pep:<code>639</code> <code>License-Expression</code> and <code>License-File</code> metadata fields in JSON output. <code>pip inspect</code> and <code>pip install --report</code> now emit <code>license_expression</code> and <code>license_file</code> fields in the <code>metadata</code> object, if the corresponding fields are present in the installed <code>METADATA</code> file. (<code>[#13134](pypa/pip#13134) <https://github.com/pypa/pip/issues/13134></code>_)</li> <li>Files in the network cache will inherit the read/write permissions of pip's cache directory (in addition to the current user retaining read/write access). This enables a single cache to be shared among multiple users. (<code>[aio-libs#11012](pypa/pip#11012) <https://github.com/pypa/pip/issues/11012></code>_)</li> <li>Return the size, along with the number, of files cleared on <code>pip cache purge</code> and <code>pip cache remove</code> (<code>[#12176](pypa/pip#12176) <https://github.com/pypa/pip/issues/12176></code>_)</li> <li>Cache <code>python-requires</code> checks while filtering potential installation candidates. (<code>[#13128](pypa/pip#13128) <https://github.com/pypa/pip/issues/13128></code>_)</li> <li>Optimize package collection by avoiding unnecessary URL parsing and other processing. (<code>[#13132](pypa/pip#13132) <https://github.com/pypa/pip/issues/13132></code>_)</li> </ul> <h2>Bug Fixes</h2> <ul> <li>Reorder the encoding detection when decoding a requirements file, relying on UTF-8 over the locale encoding by default, matching the documented behaviour. (<code>[#12771](pypa/pip#12771) <https://github.com/pypa/pip/issues/12771></code>_)</li> <li>The pip version self check is disabled on <code>EXTERNALLY-MANAGED</code> environments. (<code>[#11820](pypa/pip#11820) <https://github.com/pypa/pip/issues/11820></code>_)</li> <li>Fix a security bug allowing a specially crafted wheel to execute code during installation. (<code>[#13079](pypa/pip#13079) <https://github.com/pypa/pip/issues/13079></code>_)</li> <li>The inclusion of <code>packaging</code> 24.2 changes how pre-release specifiers with <code><</code> and <code>></code> behave. Including a pre-release version with these specifiers now implies accepting pre-releases (e.g., <code><2.0dev</code> can include <code>1.0rc1</code>). To avoid implying pre-releases, avoid specifying them (e.g., use <code><2.0</code>). The exception is <code>!=</code>, which never implies pre-releases. (<code>[#13163](pypa/pip#13163) <https://github.com/pypa/pip/issues/13163></code>_)</li> <li>The <code>--cert</code> and <code>--client-cert</code> command-line options are now respected while installing build dependencies. Consequently, the private <code>_PIP_STANDALONE_CERT</code> environment variable is no longer used. (<code>[aio-libs#5502](pypa/pip#5502) <https://github.com/pypa/pip/issues/5502></code>_)</li> <li>The <code>--proxy</code> command-line option is now respected while installing build dependencies. (<code>[aio-libs#6018](pypa/pip#6018) <https://github.com/pypa/pip/issues/6018></code>_)</li> </ul> <h2>Vendored Libraries</h2> <ul> <li>Upgrade CacheControl to 0.14.1</li> <li>Upgrade idna to 3.10</li> <li>Upgrade msgpack to 1.1.0</li> <li>Upgrade packaging to 24.2</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pypa/pip/commit/f47b5874299848c688336ae7c8d69534013fe2c6"><code>f47b587</code></a> Bump for release</li> <li><a href="https://github.com/pypa/pip/commit/74a7f3335338712af44be95241daf62e756f27ec"><code>74a7f33</code></a> Update AUTHORS.txt</li> <li><a href="https://github.com/pypa/pip/commit/a008888a5b123e8d5e4667bdd21e4b42f3fc034c"><code>a008888</code></a> Merge pull request <a href="https://redirect.github.com/pypa/pip/issues/13171">#13171</a> from pypa/dependabot/github_actions/github-actions-...</li> <li><a href="https://github.com/pypa/pip/commit/d265fb7427c3ba4dbd10e4874a0bebea2e59350e"><code>d265fb7</code></a> Merge pull request <a href="https://redirect.github.com/pypa/pip/issues/13174">#13174</a> from ichard26/changelog</li> <li><a href="https://github.com/pypa/pip/commit/d35384ef91cb372a5223a01f980e5deb84c8fde5"><code>d35384e</code></a> Copyedit news entries before 25.0</li> <li><a href="https://github.com/pypa/pip/commit/adc4f9951b51b6a06e405b8960dd0c5f030f0fb5"><code>adc4f99</code></a> Reorder requirements file decoding (<a href="https://redirect.github.com/pypa/pip/issues/12795">#12795</a>)</li> <li><a href="https://github.com/pypa/pip/commit/40c42149a51a63e8416c047d5ddc0da1694387ea"><code>40c4214</code></a> Bump pypa/gh-action-pypi-publish in the github-actions group</li> <li><a href="https://github.com/pypa/pip/commit/6b0fb904803fbb3ce7da63966b2759407b6cd9dc"><code>6b0fb90</code></a> Merge pull request <a href="https://redirect.github.com/pypa/pip/issues/13048">#13048</a> from sbidoul/trusted-publisher-sbi</li> <li><a href="https://github.com/pypa/pip/commit/c7fb1e13ec79b1b48481ac245144c2b368e64f7d"><code>c7fb1e1</code></a> Merge pull request <a href="https://redirect.github.com/pypa/pip/issues/13145">#13145</a> from befeleme/pip-show-pep639</li> <li><a href="https://github.com/pypa/pip/commit/41c807c5938d269703c6ff2644fb3b7dc88eda4e"><code>41c807c</code></a> Show License-Expression if present in package metadata</li> <li>Additional commits viewable in <a href="https://github.com/pypa/pip/compare/24.3.1...25.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
for more information, see https://pre-commit.ci
from aiohttp.compression_utils import ZLibBackend, ZLibBackendProtocol, set_zlib_backend | ||
from aiohttp.http import WS_KEY | ||
from aiohttp.helpers import BaseTimerContext, BasicAuth, TimerNoop |
Check notice
Code scanning / CodeQL
Unused import Note test
Import of 'BasicAuth' is not used.
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix the problem of the unused import, we should remove BaseTimerContext
from the import statement on line 38 in tests/conftest.py
. The other imported names (BasicAuth
, TimerNoop
) should remain untouched unless CodeQL also reports them as unused. No further changes are necessary, and removing just the unused import will not alter existing functionality.
-
Copy modified line R38
@@ -35,7 +35,7 @@ | ||
Fingerprint, | ||
) | ||
from aiohttp.compression_utils import ZLibBackend, ZLibBackendProtocol, set_zlib_backend | ||
from aiohttp.helpers import BaseTimerContext, BasicAuth, TimerNoop | ||
from aiohttp.helpers import BasicAuth, TimerNoop | ||
from aiohttp.http import WS_KEY, HttpVersion, HttpVersion11 | ||
from aiohttp.test_utils import get_unused_port_socket, loop_context | ||
from aiohttp.tracing import Trace |
from aiohttp.compression_utils import ZLibBackend, ZLibBackendProtocol, set_zlib_backend | ||
from aiohttp.http import WS_KEY | ||
from aiohttp.helpers import BaseTimerContext, BasicAuth, TimerNoop | ||
from aiohttp.http import WS_KEY, HttpVersion, HttpVersion11 |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix the unused import, remove the reference to HttpVersion
from the import statement on line 39. That is, change:
from aiohttp.http import WS_KEY, HttpVersion, HttpVersion11
to:
from aiohttp.http import WS_KEY, HttpVersion11
This removes the unused symbol without affecting the other (possibly used) imports, and leaves the codebase cleaner. Only line 39 in tests/conftest.py
needs to be changed.
-
Copy modified line R39
@@ -36,7 +36,7 @@ | ||
) | ||
from aiohttp.compression_utils import ZLibBackend, ZLibBackendProtocol, set_zlib_backend | ||
from aiohttp.helpers import BaseTimerContext, BasicAuth, TimerNoop | ||
from aiohttp.http import WS_KEY, HttpVersion, HttpVersion11 | ||
from aiohttp.http import WS_KEY, HttpVersion11 | ||
from aiohttp.test_utils import get_unused_port_socket, loop_context | ||
from aiohttp.tracing import Trace | ||
from aiohttp.typedefs import Query |
from aiohttp.test_utils import get_unused_port_socket, loop_context | ||
from aiohttp.tracing import Trace |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix an unused import, simply remove the corresponding import line.
Specifically, in tests/conftest.py
, delete the line:
from aiohttp.tracing import Trace
No additional changes are necessary since no part of the visible code uses Trace
, and we are not to introduce other imports or substitute the usage.
-
Copy modified line R41
@@ -38,7 +38,7 @@ | ||
from aiohttp.helpers import BaseTimerContext, BasicAuth, TimerNoop | ||
from aiohttp.http import WS_KEY, HttpVersion, HttpVersion11 | ||
from aiohttp.test_utils import get_unused_port_socket, loop_context | ||
from aiohttp.tracing import Trace | ||
|
||
from aiohttp.typedefs import Query | ||
|
||
try: |
@@ -11,7 +11,9 @@ | |||
from collections import defaultdict, deque | |||
from concurrent import futures | |||
from contextlib import closing, suppress | |||
from http.cookies import BaseCookie |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 4 days ago
The optimal solution is to remove the unused import statement for BaseCookie
(from http.cookies import BaseCookie
on line 14) from tests/test_connector.py
. This change should be restricted solely to the removal of that line. No other code changes are necessary since there is no usage of BaseCookie
in the shown code, and the absence of the import will have no effect on the rest of the file.
@@ -11,7 +11,6 @@ | ||
from collections import defaultdict, deque | ||
from concurrent import futures | ||
from contextlib import closing, suppress | ||
from http.cookies import BaseCookie | ||
from typing import ( | ||
Any, | ||
Awaitable, |
) | ||
from unittest import mock | ||
|
||
import pytest | ||
from multidict import CIMultiDict |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 4 days ago
To fix the problem, the unused import statement should be removed from the code. Specifically, delete the line from multidict import CIMultiDict
(line 32) in tests/test_connector.py
. This reduces unnecessary dependencies, cleans up the code, and removes potential confusion about the presence of an unused module.
@@ -29,7 +29,6 @@ | ||
from unittest import mock | ||
|
||
import pytest | ||
from multidict import CIMultiDict | ||
from pytest_mock import MockerFixture | ||
from yarl import URL | ||
|
@@ -50,10 +56,13 @@ | |||
_ConnectTunnelConnection, | |||
_DNSCacheTable, | |||
) | |||
from aiohttp.helpers import TimerNoop |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 4 days ago
To fix the unused import error, we should remove the line from aiohttp.helpers import TimerNoop
at line 58 in tests/test_connector.py
. This will eliminate the unnecessary dependency and improve code clarity and maintainability. No other changes are required, as nothing else depends on this symbol.
@@ -55,7 +55,6 @@ | ||
_ConnectTunnelConnection, | ||
_DNSCacheTable, | ||
) | ||
from aiohttp.helpers import TimerNoop | ||
from aiohttp.pytest_plugin import AiohttpClient, AiohttpServer | ||
from aiohttp.test_utils import unused_port | ||
from aiohttp.tracing import Trace |
for more information, see https://pre-commit.ci
from aiohttp.client_reqrep import ( | ||
ClientRequest, | ||
ClientRequestArgs, | ||
ClientResponse, | ||
Fingerprint, | ||
) |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix the problem, we should remove the unused symbol from the import statement. Specifically, in the multi-line import statement from aiohttp.client_reqrep
(lines 31–36), we can simply remove Fingerprint,
from the symbol list. This is the recommended way, as it eliminates the unused import without impacting any functional code. No other changes are required, since the rest of the file and import statement remain valid, and no functionality is altered.
@@ -32,7 +32,6 @@ | ||
ClientRequest, | ||
ClientRequestArgs, | ||
ClientResponse, | ||
Fingerprint, | ||
) | ||
from aiohttp.compression_utils import ZLibBackend, ZLibBackendProtocol, set_zlib_backend | ||
from aiohttp.helpers import BaseTimerContext, BasicAuth, TimerNoop |
ClientResponse, | ||
Fingerprint, | ||
_gen_default_accept_encoding, | ||
) | ||
from aiohttp.compression_utils import ZLibBackend | ||
from aiohttp.connector import Connection | ||
from aiohttp.http import HttpVersion10, HttpVersion11, StreamWriter | ||
from aiohttp.hdrs import METH_DELETE | ||
from aiohttp.helpers import TimerNoop |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix the unused import problem, simply remove the line where TimerNoop
is imported from aiohttp.helpers
. Specifically, delete line 41: from aiohttp.helpers import TimerNoop
in tests/test_client_request.py
. No further code changes or replacement for this import are required, and this will eliminate the unnecessary dependency and improve code readability.
-
Copy modified line R41
@@ -38,7 +38,7 @@ | ||
from aiohttp.compression_utils import ZLibBackend | ||
from aiohttp.connector import Connection | ||
from aiohttp.hdrs import METH_DELETE | ||
from aiohttp.helpers import TimerNoop | ||
|
||
from aiohttp.http import HttpVersion, HttpVersion10, HttpVersion11, StreamWriter | ||
from aiohttp.multipart import MultipartWriter | ||
from aiohttp.typedefs import LooseCookies |
from aiohttp.http import HttpVersion10, HttpVersion11, StreamWriter | ||
from aiohttp.hdrs import METH_DELETE | ||
from aiohttp.helpers import TimerNoop | ||
from aiohttp.http import HttpVersion, HttpVersion10, HttpVersion11, StreamWriter |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix the unused import error, the best approach is to remove only the unused symbol, HttpVersion
, from the import statement at line 42. If the other symbols in the same import (HttpVersion10
, HttpVersion11
, StreamWriter
) are used elsewhere, they should remain. The region to change is thus just the import statement itself, removing HttpVersion
while leaving the rest of the code intact.
-
Copy modified line R42
@@ -39,7 +39,7 @@ | ||
from aiohttp.connector import Connection | ||
from aiohttp.hdrs import METH_DELETE | ||
from aiohttp.helpers import TimerNoop | ||
from aiohttp.http import HttpVersion, HttpVersion10, HttpVersion11, StreamWriter | ||
from aiohttp.http import HttpVersion10, HttpVersion11, StreamWriter | ||
from aiohttp.multipart import MultipartWriter | ||
from aiohttp.typedefs import LooseCookies | ||
|
872f647
to
deec35d
Compare
from aiohttp.connector import _SSL_CONTEXT_VERIFIED | ||
from aiohttp.helpers import TimerNoop | ||
from aiohttp.http import HttpVersion |
Check notice
Code scanning / CodeQL
Unused import Note test
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 4 days ago
To fix the problem, we should simply remove the unused import statement from the file. Specifically, delete the line from aiohttp.http import HttpVersion
(line 21). This change is safe and does not affect any other logic in the file, as HttpVersion
is not referenced anywhere in the provided code. No further code changes or imports are required.
@@ -18,7 +18,6 @@ | ||
) | ||
from aiohttp.connector import _SSL_CONTEXT_VERIFIED | ||
from aiohttp.helpers import TimerNoop | ||
from aiohttp.http import HttpVersion | ||
|
||
if sys.version_info >= (3, 11): | ||
from typing import Unpack |
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
Goals