Update most test/lint dependencies #14354
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==3.11.15
->==3.12.13
v0.11.4
->v0.12.1
==1.16.0
->==1.16.1
==24.2
->==25.0
7.2.0
->7.3.0
==0.11.4
->==0.12.1
==0.13.2
->==0.13.3
==0.7.4
->==0.7.17
Note: The
pre-commit
manager in Renovate is not supported by thepre-commit
maintainers or community. Please do not report any problems there, instead create a Discussion in the Renovate repository if you have any questions.Release Notes
aio-libs/aiohttp (aiohttp)
v3.12.13
Compare Source
====================
Bug fixes
Fixed auto-created :py:class:
~aiohttp.TCPConnector
not using the session's event loop when :py:class:~aiohttp.ClientSession
is created without an explicit connector -- by :user:bdraco
.Related issues and pull requests on GitHub:
:issue:
11147
.v3.12.12
Compare Source
====================
Bug fixes
Fixed cookie unquoting to properly handle octal escape sequences in cookie values (e.g.,
\012
for newline) by vendoring the correct_unquote
implementation from Python'shttp.cookies
module -- by :user:bdraco
.Related issues and pull requests on GitHub:
:issue:
11173
.Fixed
Cookie
header parsing to treat attribute names as regular cookies per :rfc:6265#section-5.4
-- by :user:bdraco
.Related issues and pull requests on GitHub:
:issue:
11178
.v3.12.11
Compare Source
====================
Features
Improved SSL connection handling by changing the default
ssl_shutdown_timeout
from
0.1
to0
seconds. SSL connections now use Python's default gracefulshutdown during normal operation but are aborted immediately when the connector
is closed, providing optimal behavior for both cases. Also added support for
ssl_shutdown_timeout=0
on all Python versions. Previously, this value wasrejected on Python 3.11+ and ignored on earlier versions. Non-zero values on
Python < 3.11 now trigger a
RuntimeWarning
-- by :user:bdraco
.The
ssl_shutdown_timeout
parameter is now deprecated and will be removed inaiohttp 4.0 as there is no clear use case for changing the default.
Related issues and pull requests on GitHub:
:issue:
11148
.Deprecations (removal in next major release)
Improved SSL connection handling by changing the default
ssl_shutdown_timeout
from
0.1
to0
seconds. SSL connections now use Python's default gracefulshutdown during normal operation but are aborted immediately when the connector
is closed, providing optimal behavior for both cases. Also added support for
ssl_shutdown_timeout=0
on all Python versions. Previously, this value wasrejected on Python 3.11+ and ignored on earlier versions. Non-zero values on
Python < 3.11 now trigger a
RuntimeWarning
-- by :user:bdraco
.The
ssl_shutdown_timeout
parameter is now deprecated and will be removed inaiohttp 4.0 as there is no clear use case for changing the default.
Related issues and pull requests on GitHub:
:issue:
11148
.v3.12.10
Compare Source
====================
Bug fixes
Fixed leak of
aiodns.DNSResolver
when :py:class:~aiohttp.TCPConnector
is closed and no resolver was passed when creating the connector -- by :user:Tasssadar
.This was a regression introduced in version 3.12.0 (:pr:
10897
).Related issues and pull requests on GitHub:
:issue:
11150
.v3.12.9
Compare Source
===================
Bug fixes
Fixed
IOBasePayload
andTextIOPayload
reading entire files into memory when streaming large files -- by :user:bdraco
.When using file-like objects with the aiohttp client, the entire file would be read into memory if the file size was provided in the
Content-Length
header. This could cause out-of-memory errors when uploading large files. The payload classes now correctly read data in chunks ofREAD_SIZE
(64KB) regardless of the total content length.Related issues and pull requests on GitHub:
:issue:
11138
.v3.12.8
Compare Source
===================
Features
Added preemptive digest authentication to :class:
~aiohttp.DigestAuthMiddleware
-- by :user:bdraco
.The middleware now reuses authentication credentials for subsequent requests to the same
protection space, improving efficiency by avoiding extra authentication round trips.
This behavior matches how web browsers handle digest authentication and follows
:rfc:
7616#section-3.6
.Preemptive authentication is enabled by default but can be disabled by passing
preemptive=False
to the middleware constructor.Related issues and pull requests on GitHub:
:issue:
11128
, :issue:11129
.v3.12.7
Compare Source
===================
.. warning::
This release fixes an issue where the
quote_cookie
parameter was not being properlyrespected for shared cookies (domain="", path=""). If your server does not handle quoted
cookies correctly, you may need to disable cookie quoting by setting
quote_cookie=False
when creating your :class:
~aiohttp.ClientSession
or :class:~aiohttp.CookieJar
.See :ref:
aiohttp-client-cookie-quoting-routine
for details.Bug fixes
Fixed cookie parsing to be more lenient when handling cookies with special characters
in names or values. Cookies with characters like
{
,}
, and/
in names are nowaccepted instead of causing a :exc:
~http.cookies.CookieError
and 500 errors. Additionally,cookies with mismatched quotes in values are now parsed correctly, and quoted cookie
values are now handled consistently whether or not they include special attributes
like
Domain
. Also fixed :class:~aiohttp.CookieJar
to ensure shared cookies (domain="", path="")respect the
quote_cookie
parameter, making cookie quoting behavior consistent forall cookies -- by :user:
bdraco
.Related issues and pull requests on GitHub:
:issue:
2683
, :issue:5397
, :issue:7993
, :issue:11112
.Fixed an issue where cookies with duplicate names but different domains or paths
were lost when updating the cookie jar. The :class:
~aiohttp.ClientSession
cookie jar now correctly stores all cookies even if they have the same name but
different domain or path, following the :rfc:
6265#section-5.3
storage model -- by :user:bdraco
.Note that :attr:
ClientResponse.cookies <aiohttp.ClientResponse.cookies>
returnsa :class:
~http.cookies.SimpleCookie
which uses the cookie name as a key, soonly the last cookie with each name is accessible via this interface. All cookies
can be accessed via :meth:
ClientResponse.headers.getall('Set-Cookie') <multidict.MultiDictProxy.getall>
if needed.Related issues and pull requests on GitHub:
:issue:
4486
, :issue:11105
, :issue:11106
.Miscellaneous internal changes
Avoided creating closed futures in
ResponseHandler
that will never be awaited -- by :user:bdraco
.Related issues and pull requests on GitHub:
:issue:
11107
.Downgraded the logging level for connector close errors from ERROR to DEBUG, as these are expected behavior with TLS 1.3 connections -- by :user:
bdraco
.Related issues and pull requests on GitHub:
:issue:
11114
.v3.12.6
Compare Source
===================
Bug fixes
Fixed spurious "Future exception was never retrieved" warnings for connection lost errors when the connector is not closed -- by :user:
bdraco
.When connections are lost, the exception is now marked as retrieved since it is always propagated through other means, preventing unnecessary warnings in logs.
Related issues and pull requests on GitHub:
:issue:
11100
.v3.12.4
Compare Source
===================
Bug fixes
Fixed connector not waiting for connections to close before returning from :meth:
~aiohttp.BaseConnector.close
(partial backport of :pr:3733
) -- by :user:atemate
and :user:bdraco
.Related issues and pull requests on GitHub:
:issue:
1925
, :issue:11074
.v3.12.3
Compare Source
===================
Bug fixes
Fixed memory leak in :py:meth:
~aiohttp.CookieJar.filter_cookies
that caused unbounded memory growthwhen making requests to different URL paths -- by :user:
bdraco
and :user:Cycloctane
.Related issues and pull requests on GitHub:
:issue:
11052
, :issue:11054
.v3.12.2
Compare Source
===================
Bug fixes
Fixed
Content-Length
header not being set to0
for non-GET requests withNone
body -- by :user:bdraco
.Non-GET requests (
POST
,PUT
,PATCH
,DELETE
) withNone
as the body now correctly set theContent-Length
header to0
, matching the behavior of requests with empty bytes (b""
). This regression was introduced in aiohttp 3.12.1.Related issues and pull requests on GitHub:
:issue:
11035
.v3.12.1
Compare Source
====================
Bug fixes
Fixed auto-created :py:class:
~aiohttp.TCPConnector
not using the session's event loop when :py:class:~aiohttp.ClientSession
is created without an explicit connector -- by :user:bdraco
.Related issues and pull requests on GitHub:
:issue:
11147
.v3.12.0
: 3.12.0Compare Source
Bug fixes
Fixed :py:attr:
~aiohttp.web.WebSocketResponse.prepared
property to correctly reflect the prepared state, especially during timeout scenarios -- by :user:bdraco
Related issues and pull requests on GitHub:
#6009, #10988.
Response is now always True, instead of using MutableMapping behaviour (False when map is empty)
Related issues and pull requests on GitHub:
#10119.
Fixed connection reuse for file-like data payloads by ensuring buffer
truncation respects content-length boundaries and preventing premature
connection closure race -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#10325, #10915, #10941, #10943.
Fixed pytest plugin to not use deprecated :py:mod:
asyncio
policy APIs.Related issues and pull requests on GitHub:
#10851.
Fixed :py:class:
~aiohttp.resolver.AsyncResolver
not using theloop
argument in versions 3.x where it should still be supported -- by :user:bdraco
.Related issues and pull requests on GitHub:
#10951.
Features
Added a comprehensive HTTP Digest Authentication client middleware (DigestAuthMiddleware)
that implements RFC 7616. The middleware supports all standard hash algorithms
(MD5, SHA, SHA-256, SHA-512) with session variants, handles both 'auth' and
'auth-int' quality of protection options, and automatically manages the
authentication flow by intercepting 401 responses and retrying with proper
credentials -- by :user:
feus4177
, :user:TimMenninger
, and :user:bdraco
.Related issues and pull requests on GitHub:
#2213, #10725.
Added client middleware support -- by :user:
bdraco
and :user:Dreamsorcerer
.This change allows users to add middleware to the client session and requests, enabling features like
authentication, logging, and request/response modification without modifying the core
request logic. Additionally, the
session
attribute was added toClientRequest
,allowing middleware to access the session for making additional requests.
Related issues and pull requests on GitHub:
#9732, #10902, #10945, #10952, #10959, #10968.
Allow user setting zlib compression backend -- by :user:
TimMenninger
This change allows the user to call :func:
aiohttp.set_zlib_backend()
with thezlib compression module of their choice. Default behavior continues to use
the builtin
zlib
library.Related issues and pull requests on GitHub:
#9798.
Added support for overriding the base URL with an absolute one in client sessions
-- by :user:
vivodi
.Related issues and pull requests on GitHub:
#10074.
Added
host
parameter toaiohttp_server
fixture -- by :user:christianwbrock
.Related issues and pull requests on GitHub:
#10120.
Detect blocking calls in coroutines using BlockBuster -- by :user:
cbornet
.Related issues and pull requests on GitHub:
#10433.
Added
socket_factory
to :py:class:aiohttp.TCPConnector
to allow specifying custom socket options-- by :user:
TimMenninger
.Related issues and pull requests on GitHub:
#10474, #10520, #10961, #10962.
Started building armv7l manylinux wheels -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#10797.
Implemented shared DNS resolver management to fix excessive resolver object creation
when using multiple client sessions. The new
_DNSResolverManager
singleton ensuresonly one
DNSResolver
object is created for default configurations, significantlyreducing resource usage and improving performance for applications using multiple
client sessions simultaneously -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#10847, #10923, #10946.
Upgraded to LLHTTP 9.3.0 -- by :user:
Dreamsorcerer
.Related issues and pull requests on GitHub:
#10972.
Optimized small HTTP requests/responses by coalescing headers and body into a single TCP packet -- by :user:
bdraco
.This change enhances network efficiency by reducing the number of packets sent for small HTTP payloads, improving latency and reducing overhead. Most importantly, this fixes compatibility with memory-constrained IoT devices that can only perform a single read operation and expect HTTP requests in one packet. The optimization uses zero-copy
writelines
when coalescing data and works with both regular and chunked transfer encoding.When
aiohttp
uses client middleware to communicate with anaiohttp
server, connection reuse is more likely to occur since complete responses arrive in a single packet for small payloads.This aligns
aiohttp
with other popular HTTP clients that already coalesce small requests.Related issues and pull requests on GitHub:
#10991.
Improved documentation
Improved documentation for middleware by adding warnings and examples about
request body stream consumption. The documentation now clearly explains that
request body streams can only be read once and provides best practices for
sharing parsed request data between middleware and handlers -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#2914.
Packaging updates and notes for downstreams
Removed non SPDX-license description from
setup.cfg
-- by :user:devanshu-ziphq
.Related issues and pull requests on GitHub:
#10662.
Added support for building against system
llhttp
library -- by :user:mgorny
.This change adds support for :envvar:
AIOHTTP_USE_SYSTEM_DEPS
environment variable thatcan be used to build aiohttp against the system install of the
llhttp
library ratherthan the vendored one.
Related issues and pull requests on GitHub:
#10759.
aiodns
is now installed on Windows with speedups extra -- by :user:bdraco
.As of
aiodns
3.3.0,SelectorEventLoop
is no longer required when usingpycares
4.7.0 or later.Related issues and pull requests on GitHub:
#10823.
Fixed compatibility issue with Cython 3.1.1 -- by :user:
bdraco
Related issues and pull requests on GitHub:
#10877.
Contributor-facing changes
Sped up tests by disabling
blockbuster
fixture fortest_static_file_huge
andtest_static_file_huge_cancel
tests -- by :user:dikos1337
.Related issues and pull requests on GitHub:
#9705, #10761.
Updated tests to avoid using deprecated :py:mod:
asyncio
policy APIs andmake it compatible with Python 3.14.
Related issues and pull requests on GitHub:
#10851.
Added Winloop to test suite to support in the future -- by :user:
Vizonex
.Related issues and pull requests on GitHub:
#10922.
Miscellaneous internal changes
Added support for the
partitioned
attribute in theset_cookie
method.Related issues and pull requests on GitHub:
#9870.
Setting :attr:
aiohttp.web.StreamResponse.last_modified
to an unsupported type will now raise :exc:TypeError
instead of silently failing -- by :user:bdraco
.Related issues and pull requests on GitHub:
#10146.
v3.11.18
Compare Source
====================
Bug fixes
Disabled TLS in TLS warning (when using HTTPS proxies) for uvloop and newer Python versions -- by :user:
lezgomatt
.Related issues and pull requests on GitHub:
:issue:
7686
.Fixed reading fragmented WebSocket messages when the payload was masked -- by :user:
bdraco
.The problem first appeared in 3.11.17
Related issues and pull requests on GitHub:
:issue:
10764
.v3.11.17
Compare Source
====================
Miscellaneous internal changes
Optimized web server performance when access logging is disabled by reducing time syscalls -- by :user:
bdraco
.Related issues and pull requests on GitHub:
:issue:
10713
.Improved web server performance when connection can be reused -- by :user:
bdraco
.Related issues and pull requests on GitHub:
:issue:
10714
.Improved performance of the WebSocket reader -- by :user:
bdraco
.Related issues and pull requests on GitHub:
:issue:
10740
.Improved performance of the WebSocket reader with large messages -- by :user:
bdraco
.Related issues and pull requests on GitHub:
:issue:
10744
.v3.11.16
Compare Source
====================
Bug fixes
Replaced deprecated
asyncio.iscoroutinefunction
with its counterpart frominspect
-- by :user:
layday
.Related issues and pull requests on GitHub:
:issue:
10634
.Fixed :class:
multidict.CIMultiDict
being mutated when passed to :class:aiohttp.web.Response
-- by :user:bdraco
.Related issues and pull requests on GitHub:
:issue:
10672
.astral-sh/ruff-pre-commit (astral-sh/ruff-pre-commit)
v0.12.1
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.12.1
v0.12.0
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.12.0
v0.11.13
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.13
v0.11.12
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.12
v0.11.11
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.11
v0.11.10
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.10
v0.11.9
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.9
v0.11.8
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.8
v0.11.7
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.7
v0.11.6
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.6
v0.11.5
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.11.5
python/mypy (mypy)
v1.16.1
Compare Source
pypa/packaging (packaging)
v25.0
Compare Source
What's Changed
New Contributors
Full Changelog: pypa/packaging@24.2...25.0
pycqa/flake8 (pycqa/flake8)
v7.3.0
Compare Source
astral-sh/ruff (ruff)
v0.12.1
Compare Source
Preview features
flake8-errmsg
] ExtendEM101
to support byte strings (#18867)flake8-use-pathlib
] Add autofix forPTH202
(#18763)pygrep-hooks
] AddAsyncMock
methods toinvalid-mock-access
(PGH005
) (#18547)pylint
] Ignore__init__.py
files in (PLC0414
) (#18400)ruff
] TriggerRUF037
for empty string and byte strings (#18862).pyi
files (#18888)Bug fixes
remove_argument
(#18805)flake8-logging
] Avoid false positive forexc_info=True
outsidelogger.exception
(LOG014
) (#18737)flake8-pytest-style
] Enforcepytest
import for decorators (#18779)flake8-pytest-style
] Mark autofix forPT001
andPT023
as unsafe if there's comments in the decorator (#18792)flake8-pytest-style
]PT001
/PT023
fix makes syntax error on parenthesized decorator (#18782)flake8-raise
] Make fix unsafe if it deletes comments (RSE102
) (#18788)flake8-simplify
] FixSIM911
autofix creating a syntax error (#18793)flake8-simplify
] Fix false negatives for shadowed bindings (SIM910
,SIM911
) (#18794)flake8-simplify
] Preserve original behavior forexcept ()
and bareexcept
(SIM105
) (#18213)flake8-pyi
] FixPYI041
's fix causingTypeError
withNone | None | ...
(#18637)perflint
] FixPERF101
autofix creating a syntax error and mark autofix as unsafe if there are comments in thelist
call expr (#18803)perflint
] Fix false negative inPERF401
(#18866)pylint
] Avoid flattening nestedmin
/max
when outer call has single argument (PLW3301
) (#16885)pylint
] FixPLC2801
autofix creating a syntax error (#18857)pylint
] MarkPLE0241
autofix as unsafe if there's comments in the base classes (#18832)pylint
] SuppressPLE2510
/PLE2512
/PLE2513
/PLE2514
/PLE2515
autofix if the text contains an odd number of backslashes (#18856)refurb
] Detect more exotic float literals inFURB164
(#18925)refurb
] FixFURB163
autofix creating a syntax error foryield
expressions (#18756)refurb
] MarkFURB129
autofix as unsafe if there's comments in thereadlines
call (#18858)ruff
] Fix false positives and negatives inRUF010
(#18690)analyze.direction
variant names (#18892)Rule changes
flake8-return
] MarkRET501
fix unsafe if comments are inside (#18780)flake8-async
] Fix detection for large integer sleep durations inASYNC116
rule (#18767)flake8-async
] Mark autofix forASYNC115
as unsafe if the call expression contains comments (#18753)flake8-bugbear
] Mark autofix forB004
as unsafe if thehasattr
call expr contains comments (#18755)flake8-comprehension
] Mark autofix forC420
as unsafe if there's comments inside the dict comprehension (#18768)flake8-comprehensions
] Handle template strings for comprehension fixes (#18710)flake8-future-annotations
] Add autofix (FA100
) (#18903)pyflakes
] MarkF504
/F522
/F523
autofix as unsafe if there's a call with side effect (#18839)pylint
] Allow fix with comments and document performance implications (PLW3301
) (#18936)pylint
] Detect more exoticNaN
literals inPLW0177
(#18630)pylint
] FixPLC1802
autofix creating a syntax error and mark autofix as unsafe if there's comments in thelen
call (#18836)pyupgrade
] Extend version detection to includesys.version_info.major
(UP036
) (#18633)ruff
] Add lint ruleRUF064
for callingchmod
with non-octal integers (#18541)ruff
] Addedcls.__dict__.get('__annotations__')
check (RUF063
) (#18233)ruff
] Frozendataclass
default should be valid (RUF009
) (#18735)Server
Documentation
perflint
] Small docs improvement toPERF401
(#18786)pyupgrade
]: Usesuper()
, not__super__
in error messages (UP008
) (#18743)flake8-pie
] Small docs fix toPIE794
(#18829)flake8-pyi
] Correctcollections-named-tuple
example to use PascalCase assignment (#16884)flake8-pie
] Add note on type checking benefits tounnecessary-dict-kwargs
(PIE804
) (#18666)pycodestyle
] Clarify PEP 8 relationship towhitespace-around-operator
rules (#18870)Other changes
flake8-logging
] Add fix safety section toLOG002
(#18840)pyupgrade
] Add fix safety section toUP010
(#18838)v0.12.0
Compare Source
Check out the blog post for a migration
guide and overview of the changes!
Breaking changes
Detection of more syntax errors
Ruff now detects version-related syntax errors, such as the use of the
match
statement on Python versions before 3.10, and syntax errors emitted by
CPython's compiler, such as irrefutable
match
patterns before the finalcase
arm.New default Python version handling for syntax errors
Ruff will default to the latest supported Python version (3.13) when
checking for the version-related syntax errors mentioned above to prevent
false positives in projects without a Python version configured. The default
in all other cases, like applying lint rules, is unchanged and remains at the
minimum supported Python version (3.9).
Updated f-string formatting
Ruff now formats multi-line f-strings with format specifiers to avoid adding a
line break after the format specifier. This addresses a change to the Python
grammar in version 3.13.4 that made such a line break a syntax error.
rust-toolchain.toml
is no longer included in source distributionsThe
rust-toolchain.toml
is used to specify a higher Rust version than Ruff'sminimum supported Rust version (MSRV) for development and building release
artifacts. However, when present in source distributions, it would also cause
downstream package maintainers to pull in the same Rust toolchain, even if
their available toolchain was MSRV-compatible.
Removed Rules
The following rules have been removed:
suspicious-xmle-tree-usage
(
S320
)Deprecated Rules
The following rules have been deprecated:
pandas-df-variable-name
Stabilization
The following rules have been stabilized and are no longer in preview:
for-loop-writes
(FURB122
)check-and-remove-from-set
(FURB132
)verbose-decimal-constructor
(FURB157
)fromisoformat-replace-z
(FURB162
)int-on-sliced-str
(FURB166
)exc-info-outside-except-handler
(LOG014
)import-outside-top-level
(PLC0415
)unnecessary-dict-index-lookup
(PLR1733
)nan-comparison
(PLW0177
)eq-without-hash
(PLW1641
)pytest-parameter-with-default-argument
(PT028
)pytest-warns-too-broad
(PT030
)pytest-warns-with-multiple-statements
(PT031
)invalid-formatter-suppression-comment
(RUF028
)dataclass-enum
(RUF049
)class-with-mixed-type-vars
(RUF053
)unnecessary-round
(RUF057
)starmap-zip
(RUF058
)non-pep604-annotation-optional
(UP045
)non-pep695-generic-class
(UP046
)non-pep695-generic-function
(UP047
)private-type-parameter
(UP049
)The following behaviors have been stabilized:
collection-literal-concatenation
] (RUF005
) now recognizes slices, inaddition to list literals and variables.
readlines-in-for
] (FURB129
) is now marked as always safe.if-else-block-instead-of-if-exp
] (SIM108
) will now further simplifyexpressions to use
or
instead of anif
expression, where possible.unused-noqa
] (RUF100
) now checks for file-levelnoqa
comments as wellas inline comments.
subprocess-without-shell-equals-true
] (S603
) now accepts literal strings,as well as lists and tuples of literal strings, as trusted input.
boolean-type-hint-positional-argument
] (FBT001
) now applies to types thatinclude
bool
, likebool | int
ortyping.Optional[bool]
, in addition toplain
bool
annotations.non-pep604-annotation-union
] (UP007
) has now been split into two rules.UP007
now applies only totyping.Union
, while[
non-pep604-annotation-optional
] (UP045
) checks for use oftyping.Optional
.UP045
has also been stabilized in this release, but youmay need to update existing
include
,ignore
, ornoqa
settings toaccommodate this change.
Preview features
ruff
] Check for non-context-manager use ofpytest.raises
,pytest.warns
, andpytest.deprecated_call
(RUF061
) (#17368)Bug fixes
readlines
(#18542)\r
and\r\n
handling in t- and f-string debug texts (#18673)}
when f-string expression has a format specifier (#18704)flake8-pyi
] Avoid syntax error in the case of starred and keyword arguments (PYI059
) (#18611)flake8-return
] FixRET504
autofix generating a syntax error (#18428)pep8-naming
] Suppress fix forN804
andN805
if the recommended name is already used (#18472)pycodestyle
] Avoid causing a syntax error in expressions spanning multiple lines (E731
) (#18479)pyupgrade
] SuppressUP008
ifsuper
is shadowed (#18688)refurb
] Parenthesize lambda and ternary expressions (FURB122
,FURB142
) (#18592)ruff
] Handle extra arguments todeque
(RUF037
) (#18614)ruff
] Preserve parentheses arounddeque
in fix forunnecessary-empty-iterable-within-deque-call
(RUF037
) (#18598)ruff
] Validate arguments before offering a fix (RUF056
) (#18631)ruff
] Skip fix forRUF059
if dummy name is already bound (#18509)pylint
] FixPLW0128
to check assignment targets in square brackets and after asterisks (#18665)Rule changes
return
statements (B909
) (#18408)ty:
comments as pragma comments (#18532)flake8-pyi
] Applycustom-typevar-for-self
to string annotations (PYI019
) (#18311)pyupgrade
] Don't offer a fix forOptional[None]
(UP007
,UP045)
(#18545)pyupgrade
] Fixsuper(__class__, self)
detection (UP008
) (#18478)refurb
] Make the fix forFURB163
unsafe forlog2
,log10
,*args
, and deleted comments (#18645)Server
Documentation
*
from glob pattern example forper-file-target-version
(#18709)pylint
] De-emphasize__hash__ = Parent.__hash__
(PLW1641
) (#18613)refurb
] Add a note about float literal handling (FURB157
) (#18615)v0.11.13
Compare Source
Preview features
airflow
] Add unsafe fix for module moved cases (AIR301
,AIR311
,AIR312
,AIR302
) (#18367,#18366,#18363,#18093)refurb
] Add coverage ofset
andfrozenset
calls (FURB171
) (#18035)refurb
] MarkFURB180
fix unsafe when class has bases (#18149)Bug fixes
perflint
] Fix missing parentheses for lambda and ternary conditions (PERF401
,PERF403
) (#18412)pyupgrade
] ApplyUP035
only on py313+ forget_type_hints()
(#18476)pyupgrade
] Make fix unsafe if it deletes comments (UP004
,UP050
) (#18393, #18390)Rule changes
fastapi
] Avoid false positive for class dependencies (FAST003
) (#18271)Documentation
Other changes
v0.11.12
Compare Source
Preview features
airflow
] Revise fix titles (AIR3
) (#18215)pylint
] Implementmissing-maxsplit-arg
(PLC0207
) (#17454)pyupgrade
] New ruleUP050
(useless-class-metaclass-type
) (#18334)flake8-use-pathlib
] Replaceos.symlink
withPath.symlink_to
(PTH211
) (#18337)Bug fixes
flake8-bugbear
] Ignore__debug__
attribute inB010
(#18357)flake8-async
] Fixanyio.sleep
argument name (ASYNC115
,ASYNC116
) (#18262)refurb
] FixFURB129
autofix generating invalid syntax (#18235)Rule changes
flake8-implicit-str-concat
] Add autofix forISC003
(#18256)pycodestyle
] Improve the diagnostic message forE712
(#18328)flake8-2020
] Fix diagnostic message for!=
comparisons (YTT201
) (#18293)pyupgrade
] Make fix unsafe if it deletes comments (UP010
) (#18291)Documentation
flake8-bugbear
] Add fix safety section (B006
) (#17652)v0.11.11
Compare Source
Release Notes
Preview features
airflow
] Add autofixes forAIR302
andAIR312
(#17942)airflow
] Move rules fromAIR312
toAIR302
(#17940)airflow
] UpdateAIR301
andAIR311
with the latest Airflow implementations (#17985)flake8-simplify
] Enable fix in preview mode (SIM117
) (#18208)Bug fixes
[]
and_
(#18147)pylint
] FixPLW1514
not recognizing theencoding
positional argument ofcodecs.open
(#18109)CLI
Documentation
flake8-print
] Improve print/pprint docs forT201
andT203
(#18130)flake8-simplify
] Add fix safety section (SIM110
,SIM210
) (#18114,#18100)pylint
] Fix docs example that produced different output (PLW0603
) (#18216)Contributors