chore(deps): update all dependencies #57

Closed
renovate wants to merge 1 commit from renovate/all into master
Collaborator

This PR contains the following updates:

Package Type Update Change
actions/checkout action major v5v6
aiodns project.dependencies major ==3.6.1==4.0.0
aiohttp project.dependencies minor ==3.11.9==3.13.5
audioop-lts project.dependencies patch ==0.2.1==0.2.2
distlib project.dependencies minor ==0.3.9==0.4.0
docker/build-push-action action major v6v7
docker/login-action action major v3v4
docker/setup-buildx-action action major v3v4
emoji project.dependencies minor ==2.14.0==2.15.0
filelock project.dependencies minor ==3.16.1==3.29.0
open-meteo (changelog) project.dependencies minor ==0.3.2==0.4.0
orjson (changelog) project.dependencies patch ==3.11.5==3.11.8
ping3 (changelog) project.dependencies major ==4.0.8==5.1.5
platformdirs (changelog) project.dependencies minor ==4.3.6==4.9.6
pygithub project.dependencies minor ==2.6.1==2.9.1
python-dotenv project.dependencies patch ==1.2.1==1.2.2
pytz project.dependencies major ==2025.2==2026.1.post1
setuptools (changelog) project.dependencies major ==75.6.0==82.0.1
tzfpy project.dependencies minor ==1.0.0==1.3.0
virtualenv project.dependencies major ==20.28.0==21.3.0
whodap project.dependencies patch ==0.1.12==0.1.16

Release Notes

actions/checkout (actions/checkout)

v6

Compare Source

saghul/aiodns (aiodns)

v4.0.0

Compare Source

=====

  • Breaking change: Requires pycares >= 5.0.0
  • Added new query_dns() method returning native pycares 5.x DNSResult types
  • Deprecated query() method - still works with backward-compatible result types
  • Deprecated gethostbyname() method - use getaddrinfo() instead
  • Added compatibility layer for pycares 4.x result types to ease migration
  • Updated dependencies
    • Bumped pycares from 4.11.0 to 5.0.1 (#​220)
    • Bumped pytest from 8.4.2 to 9.0.2 (#​224)
    • Bumped pytest-asyncio from 1.2.0 to 1.3.0 (#​223)
    • Bumped mypy from 1.19.0 to 1.19.1 (#​219)
    • Bumped winloop from 0.3.1 to 0.4.0 (#​210)
    • Bumped actions/upload-artifact from 5 to 6 (#​222)
    • Bumped actions/download-artifact from 6.0.0 to 7.0.0 (#​221)
aio-libs/aiohttp (aiohttp)

v3.13.5

Compare Source

===================

Bug fixes

  • Skipped the duplicate singleton header check in lax mode (the default for response
    parsing). In strict mode (request parsing, or -X dev), all RFC 9110 singletons
    are still enforced -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:12302.


v3.13.4

Compare Source

===================

Features

  • Added max_headers parameter to limit the number of headers that should be read from a response -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11955.

  • Added a dns_cache_max_size parameter to TCPConnector to limit the size of the cache -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:12106.

Bug fixes

  • Fixed server hanging indefinitely when chunked transfer encoding chunk-size
    does not match actual data length. The server now raises
    TransferEncodingError instead of waiting forever for data that will
    never arrive -- by :user:Fridayai700.

    Related issues and pull requests on GitHub:
    :issue:10596.

  • Fixed access log timestamps ignoring daylight saving time (DST) changes. The
    previous implementation used :py:data:time.timezone which is a constant and
    does not reflect DST transitions -- by :user:nightcityblade.

    Related issues and pull requests on GitHub:
    :issue:11283.

  • Fixed RuntimeError: An event loop is running error when using aiohttp.GunicornWebWorker
    or aiohttp.GunicornUVLoopWebWorker on Python >=3.14.
    -- by :user:Tasssadar.

    Related issues and pull requests on GitHub:
    :issue:11701.

  • Fixed :exc:ValueError when creating a TLS connection with ClientTimeout(total=0) by converting 0 to None before passing to ssl_handshake_timeout in :py:meth:asyncio.loop.start_tls -- by :user:veeceey.

    Related issues and pull requests on GitHub:
    :issue:11859.

  • Restored :py:meth:~aiohttp.BodyPartReader.decode as a synchronous method
    for backward compatibility. The method was inadvertently changed to async
    in 3.13.3 as part of the decompression bomb security fix. A new
    :py:meth:~aiohttp.BodyPartReader.decode_iter method is now available
    for non-blocking decompression of large payloads using an async generator.
    Internal aiohttp code uses the async variant to maintain security protections.

    Changed multipart processing chunk sizes from 64 KiB to 256KiB, to better
    match aiohttp internals
    -- by :user:bdraco and :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11898.

  • Fixed false-positive :py:class:DeprecationWarning for passing enable_cleanup_closed=True to :py:class:~aiohttp.TCPConnector specifically on Python 3.12.7.
    -- by :user:Robsdedude.

    Related issues and pull requests on GitHub:
    :issue:11972.

  • Fixed _sendfile_fallback over-reading beyond requested count -- by :user:bysiber.

    Related issues and pull requests on GitHub:
    :issue:12096.

  • Fixed digest auth dropping challenge fields with empty string values -- by :user:bysiber.

    Related issues and pull requests on GitHub:
    :issue:12097.

  • ClientConnectorCertificateError.os_error no longer raises :exc:AttributeError
    -- by :user:themylogin.

    Related issues and pull requests on GitHub:
    :issue:12136.

  • Adjusted pure-Python request header value validation to align with RFC 9110 control-character handling, while preserving lax response parser behavior, and added regression tests for Host/header control-character cases.
    -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12231.

  • Rejected duplicate singleton headers (Host, Content-Type,
    Content-Length, etc.) in the C extension HTTP parser to match
    the pure Python parser behaviour, preventing potential host-based
    access control bypasses via parser differentials
    -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12240.

  • Aligned the pure-Python HTTP request parser with the C parser by splitting
    comma-separated and repeated Connection header values for keep-alive,
    close, and upgrade handling -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12249.

Improved documentation

  • Documented :exc:asyncio.TimeoutError for WebSocketResponse.receive()
    and related methods -- by :user:veeceey.

    Related issues and pull requests on GitHub:
    :issue:12042.

Packaging updates and notes for downstreams

  • Upgraded llhttp to 3.9.1 -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:12069.

Contributor-facing changes

  • The benchmark CI job now runs only in the upstream repository -- by :user:Cycloctane.

    It used to always fail in forks, which this change fixed.

    Related issues and pull requests on GitHub:
    :issue:11737.

  • Fixed flaky performance tests by using appropriate fixed thresholds that account for CI variability -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:11992.

Miscellaneous internal changes

  • Fixed test_invalid_idna to work with idna 3.11 by using an invalid character (\u0080) that is rejected by yarl during URL construction -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12027.

  • Fixed race condition in test_data_file on Python 3.14 free-threaded builds -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12170.


v3.13.3

Compare Source

===================

This release contains fixes for several vulnerabilities. It is advised to
upgrade as soon as possible.

Bug fixes

  • Fixed proxy authorization headers not being passed when reusing a connection, which caused 407 (Proxy authentication required) errors
    -- by :user:GLeurquin.

    Related issues and pull requests on GitHub:
    :issue:2596.

  • Fixed multipart reading failing when encountering an empty body part -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11857.

  • Fixed a case where the parser wasn't raising an exception for a websocket continuation frame when there was no initial frame in context.

    Related issues and pull requests on GitHub:
    :issue:11862.

Removals and backward incompatible breaking changes

  • Brotli and brotlicffi minimum version is now 1.2.
    Decompression now has a default maximum output size of 32MiB per decompress call -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11898.

Packaging updates and notes for downstreams

  • Moved dependency metadata from :file:setup.cfg to :file:pyproject.toml per :pep:621
    -- by :user:cdce8p.

    Related issues and pull requests on GitHub:
    :issue:11643.

Contributor-facing changes

  • Removed unused update-pre-commit github action workflow -- by :user:Cycloctane.

    Related issues and pull requests on GitHub:
    :issue:11689.

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.

  • Added regression test for cached logging status -- by :user:meehand.

    Related issues and pull requests on GitHub:
    :issue:11778.


v3.13.2

Compare Source

===================

Bug fixes

  • Fixed cookie parser to continue parsing subsequent cookies when encountering a malformed cookie that fails regex validation, such as Google's g_state cookie with unescaped quotes -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11632.

  • Fixed loading netrc credentials from the default :file:~/.netrc (:file:~/_netrc on Windows) location when the :envvar:NETRC environment variable is not set -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11713, :issue:11714.

  • Fixed WebSocket compressed sends to be cancellation safe. Tasks are now shielded during compression to prevent compressor state corruption. This ensures that the stateful compressor remains consistent even when send operations are cancelled -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11725.


v3.13.1

Compare Source

===================

Features

  • Make configuration options in AppRunner also available in run_app()
    -- by :user:Cycloctane.

    Related issues and pull requests on GitHub:
    :issue:11633.

Bug fixes

  • Switched to backports.zstd for Python <3.14 and fixed zstd decompression for chunked zstd streams -- by :user:ZhaoMJ.

    Note: Users who installed zstandard for support on Python <3.14 will now need to install
    backports.zstd instead (installing aiohttp[speedups] will do this automatically).

    Related issues and pull requests on GitHub:
    :issue:11623.

  • Updated Content-Type header parsing to return application/octet-stream when header contains invalid syntax.
    See :rfc:9110#section-8.3-5.

    -- by :user:sgaist.

    Related issues and pull requests on GitHub:
    :issue:10889.

  • Fixed Python 3.14 support when built without zstd support -- by :user:JacobHenner.

    Related issues and pull requests on GitHub:
    :issue:11603.

  • Fixed blocking I/O in the event loop when using netrc authentication by moving netrc file lookup to an executor -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11634.

  • Fixed routing to a sub-application added via .add_domain() not working
    if the same path exists on the parent app. -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11673.

Packaging updates and notes for downstreams

  • Moved core packaging metadata from :file:setup.cfg to :file:pyproject.toml per :pep:621
    -- by :user:cdce8p.

    Related issues and pull requests on GitHub:
    :issue:9951.


v3.13.0

Compare Source

===================

Features

  • Added support for Python 3.14.

    Related issues and pull requests on GitHub:
    :issue:10851, :issue:10872.

  • Added support for free-threading in Python 3.14+ -- by :user:kumaraditya303.

    Related issues and pull requests on GitHub:
    :issue:11466, :issue:11464.

  • Added support for Zstandard (aka Zstd) compression
    -- by :user:KGuillaume-chaps.

    Related issues and pull requests on GitHub:
    :issue:11161.

  • Added StreamReader.total_raw_bytes to check the number of bytes downloaded
    -- by :user:robpats.

    Related issues and pull requests on GitHub:
    :issue:11483.

Bug fixes

  • Fixed pytest plugin to not use deprecated :py:mod:asyncio policy APIs.

    Related issues and pull requests on GitHub:
    :issue:10851.

  • Updated Content-Disposition header parsing to handle trailing semicolons and empty parts
    -- by :user:PLPeeters.

    Related issues and pull requests on GitHub:
    :issue:11243.

  • Fixed saved CookieJar failing to be loaded if cookies have partitioned flag when
    http.cookie does not have partitioned cookies supports. -- by :user:Cycloctane.

    Related issues and pull requests on GitHub:
    :issue:11523.

Improved documentation

  • Added Wireup to third-party libraries -- by :user:maldoinc.

    Related issues and pull requests on GitHub:
    :issue:11233.

Packaging updates and notes for downstreams

  • The blockbuster test dependency is now optional; the corresponding test fixture is disabled when it is unavailable
    -- by :user:musicinybrain.

    Related issues and pull requests on GitHub:
    :issue:11363.

  • Added riscv64 build to releases -- by :user:eshattow.

    Related issues and pull requests on GitHub:
    :issue:11425.

Contributor-facing changes

  • Fixed test_send_compress_text failing when alternative zlib implementation
    is used. (zlib-ng in python 3.14 windows build) -- by :user:Cycloctane.

    Related issues and pull requests on GitHub:
    :issue:11546.


v3.12.15

Compare Source

====================

Bug fixes

  • Fixed :class:~aiohttp.DigestAuthMiddleware to preserve the algorithm case from the server's challenge in the authorization response. This improves compatibility with servers that perform case-sensitive algorithm matching (e.g., servers expecting algorithm=MD5-sess instead of algorithm=MD5-SESS)
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11352.

Improved documentation

  • Remove outdated contents of aiohttp-devtools and aiohttp-swagger
    from Web_advanced docs.
    -- by :user:Cycloctane

    Related issues and pull requests on GitHub:
    :issue:11347.

Packaging updates and notes for downstreams

  • Started including the llhttp :file:LICENSE file in wheels by adding vendor/llhttp/LICENSE to license-files in :file:setup.cfg -- by :user:threexc.

    Related issues and pull requests on GitHub:
    :issue:11226.

Contributor-facing changes

  • Updated a regex in test_aiohttp_request_coroutine for Python 3.14.

    Related issues and pull requests on GitHub:
    :issue:11271.


v3.12.14

Compare Source

====================

Bug fixes

  • Fixed file uploads failing with HTTP 422 errors when encountering 307/308 redirects, and 301/302 redirects for non-POST methods, by preserving the request body when appropriate per :rfc:9110#section-15.4.3-3.1 -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11270.

  • Fixed :py:meth:ClientSession.close() <aiohttp.ClientSession.close> hanging indefinitely when using HTTPS requests through HTTP proxies -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11273.

  • Bumped minimum version of aiosignal to 1.4+ to resolve typing issues -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11280.

Features

  • Added initial trailer parsing logic to Python HTTP parser -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11269.

Improved documentation

  • Clarified exceptions raised by WebSocketResponse.send_frame et al.
    -- by :user:DoctorJohn.

    Related issues and pull requests on GitHub:
    :issue:11234.


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's http.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 to 0 seconds. SSL connections now use Python's default graceful
    shutdown 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 was
    rejected 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 in
    aiohttp 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 to 0 seconds. SSL connections now use Python's default graceful
    shutdown 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 was
    rejected 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 in
    aiohttp 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 and TextIOPayload 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 of READ_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

===================

Features

  • Added max_headers parameter to limit the number of headers that should be read from a response -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11955.

  • Added a dns_cache_max_size parameter to TCPConnector to limit the size of the cache -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:12106.

Bug fixes

  • Fixed server hanging indefinitely when chunked transfer encoding chunk-size
    does not match actual data length. The server now raises
    TransferEncodingError instead of waiting forever for data that will
    never arrive -- by :user:Fridayai700.

    Related issues and pull requests on GitHub:
    :issue:10596.

  • Fixed access log timestamps ignoring daylight saving time (DST) changes. The
    previous implementation used :py:data:time.timezone which is a constant and
    does not reflect DST transitions -- by :user:nightcityblade.

    Related issues and pull requests on GitHub:
    :issue:11283.

  • Fixed RuntimeError: An event loop is running error when using aiohttp.GunicornWebWorker
    or aiohttp.GunicornUVLoopWebWorker on Python >=3.14.
    -- by :user:Tasssadar.

    Related issues and pull requests on GitHub:
    :issue:11701.

  • Fixed :exc:ValueError when creating a TLS connection with ClientTimeout(total=0) by converting 0 to None before passing to ssl_handshake_timeout in :py:meth:asyncio.loop.start_tls -- by :user:veeceey.

    Related issues and pull requests on GitHub:
    :issue:11859.

  • Restored :py:meth:~aiohttp.BodyPartReader.decode as a synchronous method
    for backward compatibility. The method was inadvertently changed to async
    in 3.13.3 as part of the decompression bomb security fix. A new
    :py:meth:~aiohttp.BodyPartReader.decode_iter method is now available
    for non-blocking decompression of large payloads using an async generator.
    Internal aiohttp code uses the async variant to maintain security protections.

    Changed multipart processing chunk sizes from 64 KiB to 256KiB, to better
    match aiohttp internals
    -- by :user:bdraco and :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:11898.

  • Fixed false-positive :py:class:DeprecationWarning for passing enable_cleanup_closed=True to :py:class:~aiohttp.TCPConnector specifically on Python 3.12.7.
    -- by :user:Robsdedude.

    Related issues and pull requests on GitHub:
    :issue:11972.

  • Fixed _sendfile_fallback over-reading beyond requested count -- by :user:bysiber.

    Related issues and pull requests on GitHub:
    :issue:12096.

  • Fixed digest auth dropping challenge fields with empty string values -- by :user:bysiber.

    Related issues and pull requests on GitHub:
    :issue:12097.

  • ClientConnectorCertificateError.os_error no longer raises :exc:AttributeError
    -- by :user:themylogin.

    Related issues and pull requests on GitHub:
    :issue:12136.

  • Adjusted pure-Python request header value validation to align with RFC 9110 control-character handling, while preserving lax response parser behavior, and added regression tests for Host/header control-character cases.
    -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12231.

  • Rejected duplicate singleton headers (Host, Content-Type,
    Content-Length, etc.) in the C extension HTTP parser to match
    the pure Python parser behaviour, preventing potential host-based
    access control bypasses via parser differentials
    -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12240.

  • Aligned the pure-Python HTTP request parser with the C parser by splitting
    comma-separated and repeated Connection header values for keep-alive,
    close, and upgrade handling -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12249.

Improved documentation

  • Documented :exc:asyncio.TimeoutError for WebSocketResponse.receive()
    and related methods -- by :user:veeceey.

    Related issues and pull requests on GitHub:
    :issue:12042.

Packaging updates and notes for downstreams

  • Upgraded llhttp to 3.9.1 -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue:12069.

Contributor-facing changes

  • The benchmark CI job now runs only in the upstream repository -- by :user:Cycloctane.

    It used to always fail in forks, which this change fixed.

    Related issues and pull requests on GitHub:
    :issue:11737.

  • Fixed flaky performance tests by using appropriate fixed thresholds that account for CI variability -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:11992.

Miscellaneous internal changes

  • Fixed test_invalid_idna to work with idna 3.11 by using an invalid character (\u0080) that is rejected by yarl during URL construction -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12027.

  • Fixed race condition in test_data_file on Python 3.14 free-threaded builds -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:12170.


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 growth
    when 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 to 0 for non-GET requests with None body -- by :user:bdraco.

    Non-GET requests (POST, PUT, PATCH, DELETE) with None as the body now correctly set the Content-Length header to 0, 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 :class:~aiohttp.DigestAuthMiddleware to preserve the algorithm case from the server's challenge in the authorization response. This improves compatibility with servers that perform case-sensitive algorithm matching (e.g., servers expecting algorithm=MD5-sess instead of algorithm=MD5-SESS)
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:11352.

Improved documentation

  • Remove outdated contents of aiohttp-devtools and aiohttp-swagger
    from Web_advanced docs.
    -- by :user:Cycloctane

    Related issues and pull requests on GitHub:
    :issue:11347.

Packaging updates and notes for downstreams

  • Started including the llhttp :file:LICENSE file in wheels by adding vendor/llhttp/LICENSE to license-files in :file:setup.cfg -- by :user:threexc.

    Related issues and pull requests on GitHub:
    :issue:11226.

Contributor-facing changes

  • Updated a regex in test_aiohttp_request_coroutine for Python 3.14.

    Related issues and pull requests on GitHub:
    :issue:11271.


v3.12.0

Compare 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:
    :issue:6009, :issue:10988.

  • Response is now always True, instead of using MutableMapping behaviour (False when map is empty)

    Related issues and pull requests on GitHub:
    :issue: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:
    :issue:10325, :issue:10915, :issue:10941, :issue:10943.

  • Fixed pytest plugin to not use deprecated :py:mod:asyncio policy APIs.

    Related issues and pull requests on GitHub:
    :issue:10851.

  • Fixed :py:class:~aiohttp.resolver.AsyncResolver not using the loop argument in versions 3.x where it should still be supported -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue: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:
    :issue:2213, :issue: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 to ClientRequest,
    allowing middleware to access the session for making additional requests.

    Related issues and pull requests on GitHub:
    :issue:9732, :issue:10902, :issue:10945, :issue:10952, :issue:10959, :issue:10968.

  • Allow user setting zlib compression backend -- by :user:TimMenninger

    This change allows the user to call :func:aiohttp.set_zlib_backend() with the
    zlib compression module of their choice. Default behavior continues to use
    the builtin zlib library.

    Related issues and pull requests on GitHub:
    :issue: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:
    :issue:10074.

  • Added host parameter to aiohttp_server fixture -- by :user:christianwbrock.

    Related issues and pull requests on GitHub:
    :issue:10120.

  • Detect blocking calls in coroutines using BlockBuster -- by :user:cbornet.

    Related issues and pull requests on GitHub:
    :issue: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:
    :issue:10474, :issue:10520, :issue:10961, :issue:10962.

  • Started building armv7l manylinux wheels -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10797.

  • Implemented shared DNS resolver management to fix excessive resolver object creation
    when using multiple client sessions. The new _DNSResolverManager singleton ensures
    only one DNSResolver object is created for default configurations, significantly
    reducing resource usage and improving performance for applications using multiple
    client sessions simultaneously -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10847, :issue:10923, :issue:10946.

  • Upgraded to LLHTTP 9.3.0 -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    :issue: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 an aiohttp 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:
    :issue: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:
    :issue: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:
    :issue:10662.

  • Added support for building against system llhttp library -- by :user:mgorny.

    This change adds support for :envvar:AIOHTTP_USE_SYSTEM_DEPS environment variable that
    can be used to build aiohttp against the system install of the llhttp library rather
    than the vendored one.

    Related issues and pull requests on GitHub:
    :issue: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 using pycares 4.7.0 or later.

    Related issues and pull requests on GitHub:
    :issue:10823.

  • Fixed compatibility issue with Cython 3.1.1 -- by :user:bdraco

    Related issues and pull requests on GitHub:
    :issue:10877.

Contributor-facing changes

  • Sped up tests by disabling blockbuster fixture for test_static_file_huge and test_static_file_huge_cancel tests -- by :user:dikos1337.

    Related issues and pull requests on GitHub:
    :issue:9705, :issue:10761.

  • Updated tests to avoid using deprecated :py:mod:asyncio policy APIs and
    make it compatible with Python 3.14.

    Related issues and pull requests on GitHub:
    :issue:10851.

  • Added Winloop to test suite to support in the future -- by :user:Vizonex.

    Related issues and pull requests on GitHub:
    :issue:10922.

Miscellaneous internal changes

  • Added support for the partitioned attribute in the set_cookie method.

    Related issues and pull requests on GitHub:
    :issue: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:
    :issue: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 from inspect
    -- 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.


v3.11.15

Compare Source

====================

Bug fixes

  • Reverted explicitly closing sockets if an exception is raised during create_connection -- by :user:bdraco.

    This change originally appeared in aiohttp 3.11.13

    Related issues and pull requests on GitHub:
    :issue:10464, :issue:10617, :issue:10656.

Miscellaneous internal changes

  • Improved performance of WebSocket buffer handling -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10601.

  • Improved performance of serializing headers -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10625.


v3.11.14

Compare Source

====================

Bug fixes

  • Fixed an issue where dns queries were delayed indefinitely when an exception occurred in a trace.send_dns_cache_miss
    -- by :user:logioniz.

    Related issues and pull requests on GitHub:
    :issue:10529.

  • Fixed DNS resolution on platforms that don't support socket.AI_ADDRCONFIG -- by :user:maxbachmann.

    Related issues and pull requests on GitHub:
    :issue:10542.

  • The connector now raises :exc:aiohttp.ClientConnectionError instead of :exc:OSError when failing to explicitly close the socket after :py:meth:asyncio.loop.create_connection fails -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10551.

  • Break cyclic references at connection close when there was a traceback -- by :user:bdraco.

    Special thanks to :user:availov for reporting the issue.

    Related issues and pull requests on GitHub:
    :issue:10556.

  • Break cyclic references when there is an exception handling a request -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10569.

Features

  • Improved logging on non-overlapping WebSocket client protocols to include the remote address -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10564.

Miscellaneous internal changes

  • Improved performance of parsing content types by adding a cache in the same manner currently done with mime types -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10552.


v3.11.13

Compare Source

====================

Bug fixes

  • Reverted explicitly closing sockets if an exception is raised during create_connection -- by :user:bdraco.

    This change originally appeared in aiohttp 3.11.13

    Related issues and pull requests on GitHub:
    :issue:10464, :issue:10617, :issue:10656.

Miscellaneous internal changes

  • Improved performance of WebSocket buffer handling -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10601.

  • Improved performance of serializing headers -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10625.


v3.11.12

Compare Source

====================

Bug fixes

  • MultipartForm.decode() now follows RFC1341 7.2.1 with a CRLF after the boundary
    -- by :user:imnotjames.

    Related issues and pull requests on GitHub:
    :issue:10270.

  • Restored the missing total_bytes attribute to EmptyStreamReader -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10387.

Features

  • Updated :py:func:~aiohttp.request to make it accept _RequestOptions kwargs.
    -- by :user:Cycloctane.

    Related issues and pull requests on GitHub:
    :issue:10300.

  • Improved logging of HTTP protocol errors to include the remote address -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10332.

Improved documentation

  • Added aiohttp-openmetrics to list of third-party libraries -- by :user:jelmer.

    Related issues and pull requests on GitHub:
    :issue:10304.

Packaging updates and notes for downstreams

  • Added missing files to the source distribution to fix Makefile targets.
    Added a cythonize-nodeps target to run Cython without invoking pip to install dependencies.

    Related issues and pull requests on GitHub:
    :issue:10366.

  • Started building armv7l musllinux wheels -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10404.

Contributor-facing changes

  • The CI/CD workflow has been updated to use upload-artifact v4 and download-artifact v4 GitHub Actions -- by :user:silamon.

    Related issues and pull requests on GitHub:
    :issue:10281.

Miscellaneous internal changes

  • Restored support for zero copy writes when using Python 3.12 versions 3.12.9 and later or Python 3.13.2+ -- by :user:bdraco.

    Zero copy writes were previously disabled due to :cve:2024-12254 which is resolved in these Python versions.

    Related issues and pull requests on GitHub:
    :issue:10137.


v3.11.11

Compare Source

====================

Bug fixes

  • Updated :py:meth:~aiohttp.ClientSession.request to reuse the quote_cookie setting from ClientSession._cookie_jar when processing cookies parameter.
    -- by :user:Cycloctane.

    Related issues and pull requests on GitHub:
    :issue:10093.

  • Fixed type of SSLContext for some static type checkers (e.g. pyright).

    Related issues and pull requests on GitHub:
    :issue:10099.

  • Updated :meth:aiohttp.web.StreamResponse.write annotation to also allow :class:bytearray and :class:memoryview as inputs -- by :user:cdce8p.

    Related issues and pull requests on GitHub:
    :issue:10154.

  • Fixed a hang where a connection previously used for a streaming
    download could be returned to the pool in a paused state.
    -- by :user:javitonino.

    Related issues and pull requests on GitHub:
    :issue:10169.

Features

  • Enabled ALPN on default SSL contexts. This improves compatibility with some
    proxies which don't work without this extension.
    -- by :user:Cycloctane.

    Related issues and pull requests on GitHub:
    :issue:10156.

Miscellaneous internal changes

  • Fixed an infinite loop that can occur when using aiohttp in combination
    with async-solipsism_ -- by :user:bmerry.

    .. _async-solipsism: https://github.com/bmerry/async-solipsism

    Related issues and pull requests on GitHub:
    :issue:10149.


v3.11.10

Compare Source

====================

Bug fixes

  • Fixed race condition in :class:aiohttp.web.FileResponse that could have resulted in an incorrect response if the file was replaced on the file system during prepare -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10101, :issue:10113.

  • Replaced deprecated call to :func:mimetypes.guess_type with :func:mimetypes.guess_file_type when using Python 3.13+ -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10102.

  • Disabled zero copy writes in the StreamWriter -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:10125.


AbstractUmbra/audioop (audioop-lts)

v0.2.2

Compare Source

pypa/distlib (distlib)

v0.4.0

Compare Source

docker/build-push-action (docker/build-push-action)

v7

Compare Source

docker/login-action (docker/login-action)

v4

Compare Source

docker/setup-buildx-action (docker/setup-buildx-action)

v4

Compare Source

carpedm20/emoji (emoji)

v2.15.0

Compare Source

  • Update to Unicode 17.0

v2.14.1

Compare Source

  • Use importlib.resources to load json files #​311
  • Update translations to Unicode release-46-1
tox-dev/py-filelock (filelock)

v3.29.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.28.0...3.29.0

v3.28.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.27.0...3.28.0

v3.25.2

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.25.1...3.25.2

v3.25.1

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.25.0...3.25.1

v3.25.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.24.4...3.25.0

v3.24.3

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.24.2...3.24.3

v3.24.2

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.24.1...3.24.2

v3.24.1

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.24.0...3.24.1

v3.24.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.23.0...3.24.0

v3.23.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.22.0...3.23.0

v3.22.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.21.2...3.22.0

v3.21.2

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.21.1...3.21.2

v3.21.1

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.21.0...3.21.1

v3.21.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.20.3...3.21.0

v3.20.4

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.20.3...3.20.4

v3.20.3

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.20.2...3.20.3

v3.20.2

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.20.1...3.20.2

v3.20.1

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/filelock/compare/3.20.0...3.20.1

v3.20.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.19.1...3.20.0

v3.19.1

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.19.0...3.19.1

v3.18.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/filelock/compare/3.17.0...3.18.0

v3.17.0: Drop 3.8

Compare Source

Full Changelog: https://github.com/tox-dev/filelock/compare/3.16.1...3.17.0

frenck/python-open-meteo (open-meteo)

v0.4.0

Compare Source

What’s changed

New features

🧰 Maintenance
⬆️ Dependency updates
Details
ijl/orjson (orjson)

v3.11.8

Compare Source

Changed
  • Build and compatibility improvements.

v3.11.7

Compare Source

Changed
  • Use a faster library to serialize float. Users with byte-exact regression
    tests should note positive exponents are now written using a +, e.g.,
    1.2e+30 instead of 1.2e30. Both formats are spec-compliant.
  • ABI compatibility with CPython 3.15 alpha 5 free-threading.

v3.11.6

Compare Source

Changed
  • orjson now includes code licensed under the Mozilla Public License 2.0 (MPL-2.0).
  • Drop support for Python 3.9.
  • ABI compatibility with CPython 3.15 alpha 5.
  • Build now depends on Rust 1.89 or later instead of 1.85.
Fixed
  • Fix sporadic crash serializing deeply nested list of dict.
kyan001/ping3 (ping3)

v5.1.3: Version 5.1.3

  • 5.1.0:
    • Feature: Support TTL (Hop Limit) for IPv6 on Linux.
  • 5.0.0:
    • Feature: Support IPv6 ping. ( #​85 )
tox-dev/platformdirs (platformdirs)

v4.9.6

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.9.5...4.9.6

v4.9.4

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.9.3...4.9.4

v4.9.2

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.9.1...4.9.2

v4.9.1

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.9.0...4.9.1

v4.9.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.8.0...4.9.0

v4.8.0

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.7.1...4.8.0

v4.7.1

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.7.0...4.7.1

v4.7.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.6.0...4.7.0

v4.6.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.5.1...4.6.0

v4.5.1

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.5.0...4.5.1

v4.5.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.4.0...4.5.0

v4.4.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.3.8...4.4.0

v4.3.8

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.3.7...4.3.8

v4.3.7

Compare Source

What's Changed

Full Changelog: https://github.com/tox-dev/platformdirs/compare/4.3.6...4.3.7

pygithub/pygithub (pygithub)

v2.9.1

Compare Source

Bug Fixes

Full Changelog: https://github.com/PyGithub/PyGithub/compare/v2.9.0...v2.9.1

v2.9.0

Compare Source

Notable changes
Lazy PyGithub objects

The notion of lazy objects has been added to some PyGithub classes in version 2.6.0. This release now makes all CompletableGithubObjects optionally lazy (if useful). See PyGithub/PyGithub#3403 for a complete list.

In lazy mode, getting a PyGithub object does not send a request to the GitHub API. Only accessing methods and properties sends the necessary requests to the GitHub API:


# Use lazy mode
g = Github(auth=auth, lazy=True)

# these method calls do not send requests to the GitHub API
user = g.get_user("PyGithub")    # get the user
repo = user.get_repo("PyGithub") # get the user's repo
pull = repo.get_pull(3403)       # get a known pull request
issue = pull.as_issue()          # turn the pull request into an issue

# these method and property calls send requests to Github API
issue.create_reaction("rocket")  # create a reaction
created = repo.created_at        # get property of lazy object repo

# once a lazy object has been fetched, all properties are available (no more requests)
licence = repo.license

All PyGithub classes that implement CompletableGithubObject support lazy mode (if useful). This is only useful for classes that have methods creating, changing, or getting objects.

By default, PyGithub objects are not lazy.

PyGithub objects with a paginated property

The GitHub API has the "feature" of paginated properties. Some objects returned by the API have a property that allows for pagination. Fetching subsequent pages of that property means fetching the entire object (with all other properties) and the specified page of the paginated property. Iterating over the paginated property means fetching all other properties multiple times. Fortunately, the allowed size of each page (per_page is usually 300, in contrast to the "usual" per_page maximum of 100).

Objects with paginated properties:

  • Commit.files
  • Comparison.commits
  • EnterpriseConsumedLicenses.users

This PR makes iterating those paginated properties use the configured per_page setting.

It further allows to specify an individual per_page when either retrieving such objects, or fetching paginated properties.

See Classes with paginated properties for details.

Drop Python 3.8 support due to End-of-Life

Python 3.8 reached its end-of-life September 6, 2024. Support has been removed with this release.

Deprecations
  • Method delete of Reaction is deprecated, use IssueComment.delete_reaction,
    PullRequestComment.delete_reaction, CommitComment.delete_reaction or Issue.delete_reaction instead.
  • Method Issue.assignee and parameter Issue.edit(assignee=…) are deprecated,
    use Issue.assignees and Issue.edit(assignees=…) instead.
  • Method Organization.edit_hook is deprecated, use Organization.get_hook(id).edit(…) instead.
    If you need to avoid Organization.get_hook(id) to fetch the Hook object from Github API,
    use a lazy Github instance:
Github(, lazy=True).get_organization().get_hook(id).edit()
  • Methods Team.add_to_members and Team.remove_from_members are deprecated,
    use Team.add_membership or Team.remove_membership instead.
New Features
Improvements
Bug Fixes
Maintenance

New Contributors

Full Changelog: https://github.com/PyGithub/PyGithub/compare/v2.8.0...v2.9.0

v2.8.1

Compare Source

What's Changed

Bug Fixes

Full Changelog: https://github.com/PyGithub/PyGithub/compare/v2.8.0...v2.8.1

v2.8.0

Compare Source

What's Changed

New Features
Improvements
Bug Fixes
Maintenance

New Contributors

Full Changelog: https://github.com/PyGithub/PyGithub/compare/v2.7.0...v2.8.0

v2.7.0

Compare Source

What's Changed

Breaking Changes
  • Method Github.get_rate_limit() now returns RateLimitOverview rather than RateLimit (PyGithub/PyGithub#3205).

Code like

gh.get_rate_limit().core.remaining

should be replaced with

gh.get_rate_limit().resources.core.remaining
  • Method GitTag.verification now returns GitCommitVerification rather than dict[str, Any] (PyGithub/PyGithub#3226).

Code like

tag.verification["reason"]
tag.verification.get("reason")

should be replaced with

tag.verification.reason
New Features
Improvements
Bug Fixes
Dependencies
Maintenance

New Contributors

Full Changelog: https://github.com/PyGithub/PyGithub/compare/v2.6.0...v2.7.0

theskumar/python-dotenv (python-dotenv)

v1.2.2

Compare Source

Added
  • Support for Python 3.14, including the free-threaded (3.14t) build. (#​588)
Changed
  • The dotenv run command now forwards flags directly to the specified command by [@​bbc2] in [#​607]
  • Improved documentation clarity regarding override behavior and the reference page.
  • Updated PyPy support to version 3.11.
  • Documentation for FIFO file support.
  • Dropped Support for Python 3.9.
Fixed
  • Improved set_key and unset_key behavior when interacting with symlinks by [@​bbc2] in [790c5c0]
  • Corrected the license specifier and added missing Python 3.14 classifiers in package metadata by [@​JYOuyang] in [#​590]
Breaking Changes
  • dotenv.set_key and dotenv.unset_key used to follow symlinks in some
    situations. This is no longer the case. For that behavior to be restored in
    all cases, follow_symlinks=True should be used.

  • In the CLI, set and unset used to follow symlinks in some situations. This
    is no longer the case.

  • dotenv.set_key, dotenv.unset_key and the CLI commands set and unset
    used to reset the file mode of the modified .env file to 0o600 in some
    situations. This is no longer the case: The original mode of the file is now
    preserved. Is the file needed to be created or wasn't a regular file, mode
    0o600 is used.

pypa/setuptools (setuptools)

v82.0.1

Compare Source

v82.0.0

Compare Source

v81.0.0

Compare Source

v80.10.2

Compare Source

v80.10.1

Compare Source

v80.9.0

Compare Source

v80.8.0

Compare Source

v80.7.1

Compare Source

v80.7.0

Compare Source

v80.6.0

Compare Source

v80.4.0

Compare Source

v80.3.1

Compare Source

v80.3.0

Compare Source

v80.2.0

Compare Source

v80.1.0

Compare Source

v80.0.1

Compare Source

v80.0.0

Compare Source

v79.0.1

Compare Source

v79.0.0

Compare Source

v78.1.1

Compare Source

v78.1.0

Compare Source

v78.0.2

Compare Source

v78.0.1

Compare Source

v77.0.3

Compare Source

v77.0.1

Compare Source

v76.1.0

Compare Source

v76.0.0

Compare Source

v75.9.1

Compare Source

v75.9.0

Compare Source

v75.8.2

Compare Source

v75.8.1

Compare Source

v75.8.0

Compare Source

v75.7.0

Compare Source

pypa/virtualenv (virtualenv)

v21.3.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/21.2.4...21.3.0

v21.2.4

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/21.2.3...21.2.4

v21.2.3

Compare Source

Full Changelog: https://github.com/pypa/virtualenv/compare/21.2.2...21.2.3

v21.2.2

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/21.2.1...21.2.2

v21.2.1

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/21.2.0...21.2.1

v21.2.0

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/21.1.0...21.2.0

v21.1.0

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/21.0.0...21.1.0

v21.0.0

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.39.1...21.0.0

v20.39.1

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.39.0...20.39.1

v20.39.0

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.38.0...20.39.0

v20.38.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.37.0...20.38.0

v20.36.1

Compare Source

v20.36.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.35.3...20.36.0

v20.35.4

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.35.3...20.35.4

v20.35.3

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.35.1...20.35.3

v20.35.2

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.35.1...20.35.2

v20.35.1

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.34.0...20.35.1

v20.35.0

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.34.0...20.35.0

v20.34.0

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.33.1...20.34.0

v20.33.1

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.33.0...20.33.1

v20.33.0

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.32.0...20.33.0

v20.32.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.31.2...20.32.0

v20.31.2

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.31.1...20.31.2

v20.31.1

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.31.0...20.31.1

v20.31.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.30.0...20.31.0

v20.30.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.29.3...20.30.0

v20.29.3

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.29.2...20.29.3

v20.29.2

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.29.1...20.29.2

v20.29.1

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.29.0...20.29.1

v20.29.0

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pypa/virtualenv/compare/20.28.1...20.29.0

v20.28.1

Compare Source

What's Changed

Full Changelog: https://github.com/pypa/virtualenv/compare/20.28.0...20.28.1

pogzyb/whodap (whodap)

v0.1.16

Compare Source

What's Changed

Full Changelog: https://github.com/pogzyb/whodap/compare/v0.1.15...v0.1.16

v0.1.15

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pogzyb/whodap/compare/v0.1.14...v0.1.15

v0.1.14

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pogzyb/whodap/compare/0.1.13...v0.1.14

v0.1.13

Compare Source

What's Changed
New Contributors

Full Changelog: https://github.com/pogzyb/whodap/compare/v0.1.12...0.1.13


Configuration

📅 Schedule: (in timezone Asia/Riyadh)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

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

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://github.com/actions/checkout) | action | major | `v5` → `v6` | | [aiodns](https://github.com/saghul/aiodns) | project.dependencies | major | `==3.6.1` → `==4.0.0` | | [aiohttp](https://github.com/aio-libs/aiohttp) | project.dependencies | minor | `==3.11.9` → `==3.13.5` | | [audioop-lts](https://github.com/AbstractUmbra/audioop) | project.dependencies | patch | `==0.2.1` → `==0.2.2` | | [distlib](https://github.com/pypa/distlib) | project.dependencies | minor | `==0.3.9` → `==0.4.0` | | [docker/build-push-action](https://github.com/docker/build-push-action) | action | major | `v6` → `v7` | | [docker/login-action](https://github.com/docker/login-action) | action | major | `v3` → `v4` | | [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | action | major | `v3` → `v4` | | [emoji](https://github.com/carpedm20/emoji) | project.dependencies | minor | `==2.14.0` → `==2.15.0` | | [filelock](https://github.com/tox-dev/py-filelock) | project.dependencies | minor | `==3.16.1` → `==3.29.0` | | [open-meteo](https://github.com/frenck/python-open-meteo) ([changelog](https://github.com/frenck/python-open-meteo/releases)) | project.dependencies | minor | `==0.3.2` → `==0.4.0` | | [orjson](https://github.com/ijl/orjson) ([changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)) | project.dependencies | patch | `==3.11.5` → `==3.11.8` | | [ping3](https://github.com/kyan001/ping3) ([changelog](https://github.com/kyan001/ping3/blob/master/CHANGELOG.md)) | project.dependencies | major | `==4.0.8` → `==5.1.5` | | [platformdirs](https://github.com/tox-dev/platformdirs) ([changelog](https://platformdirs.readthedocs.io/en/latest/changelog.html)) | project.dependencies | minor | `==4.3.6` → `==4.9.6` | | [pygithub](https://github.com/pygithub/pygithub) | project.dependencies | minor | `==2.6.1` → `==2.9.1` | | [python-dotenv](https://github.com/theskumar/python-dotenv) | project.dependencies | patch | `==1.2.1` → `==1.2.2` | | [pytz](http://pythonhosted.org/pytz) | project.dependencies | major | `==2025.2` → `==2026.1.post1` | | [setuptools](https://github.com/pypa/setuptools) ([changelog](https://setuptools.pypa.io/en/stable/history.html)) | project.dependencies | major | `==75.6.0` → `==82.0.1` | | [tzfpy](https://github.com/ringsaturn/tz-benchmark) | project.dependencies | minor | `==1.0.0` → `==1.3.0` | | [virtualenv](https://github.com/pypa/virtualenv) | project.dependencies | major | `==20.28.0` → `==21.3.0` | | [whodap](https://github.com/pogzyb/whodap) | project.dependencies | patch | `==0.1.12` → `==0.1.16` | --- ### Release Notes <details> <summary>actions/checkout (actions/checkout)</summary> ### [`v6`](https://github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v602) [Compare Source](https://github.com/actions/checkout/compare/v5...v6) - Fix tag handling: preserve annotations and explicit fetch-tags by [@&#8203;ericsciple](https://github.com/ericsciple) in [#&#8203;2356](https://github.com/actions/checkout/pull/2356) </details> <details> <summary>saghul/aiodns (aiodns)</summary> ### [`v4.0.0`](https://github.com/saghul/aiodns/blob/HEAD/ChangeLog#400) [Compare Source](https://github.com/saghul/aiodns/compare/v3.6.1...v4.0.0) \===== - **Breaking change**: Requires pycares >= 5.0.0 - Added new `query_dns()` method returning native pycares 5.x `DNSResult` types - Deprecated `query()` method - still works with backward-compatible result types - Deprecated `gethostbyname()` method - use `getaddrinfo()` instead - Added compatibility layer for pycares 4.x result types to ease migration - Updated dependencies - Bumped pycares from 4.11.0 to 5.0.1 ([#&#8203;220](https://github.com/saghul/aiodns/issues/220)) - Bumped pytest from 8.4.2 to 9.0.2 ([#&#8203;224](https://github.com/saghul/aiodns/issues/224)) - Bumped pytest-asyncio from 1.2.0 to 1.3.0 ([#&#8203;223](https://github.com/saghul/aiodns/issues/223)) - Bumped mypy from 1.19.0 to 1.19.1 ([#&#8203;219](https://github.com/saghul/aiodns/issues/219)) - Bumped winloop from 0.3.1 to 0.4.0 ([#&#8203;210](https://github.com/saghul/aiodns/issues/210)) - Bumped actions/upload-artifact from 5 to 6 ([#&#8203;222](https://github.com/saghul/aiodns/issues/222)) - Bumped actions/download-artifact from 6.0.0 to 7.0.0 ([#&#8203;221](https://github.com/saghul/aiodns/issues/221)) </details> <details> <summary>aio-libs/aiohttp (aiohttp)</summary> ### [`v3.13.5`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3135-2026-03-31) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.13.4...v3.13.5) \=================== ## Bug fixes - Skipped the duplicate singleton header check in lax mode (the default for response parsing). In strict mode (request parsing, or `-X dev`), all RFC 9110 singletons are still enforced -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`12302`. *** ### [`v3.13.4`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3134-2026-03-28) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.13.3...v3.13.4) \=================== ## Features - Added `max_headers` parameter to limit the number of headers that should be read from a response -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11955`. - Added a `dns_cache_max_size` parameter to `TCPConnector` to limit the size of the cache -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`12106`. ## Bug fixes - Fixed server hanging indefinitely when chunked transfer encoding chunk-size does not match actual data length. The server now raises `TransferEncodingError` instead of waiting forever for data that will never arrive -- by :user:`Fridayai700`. *Related issues and pull requests on GitHub:* :issue:`10596`. - Fixed access log timestamps ignoring daylight saving time (DST) changes. The previous implementation used :py:data:`time.timezone` which is a constant and does not reflect DST transitions -- by :user:`nightcityblade`. *Related issues and pull requests on GitHub:* :issue:`11283`. - Fixed `RuntimeError: An event loop is running` error when using `aiohttp.GunicornWebWorker` or `aiohttp.GunicornUVLoopWebWorker` on Python >=3.14. \-- by :user:`Tasssadar`. *Related issues and pull requests on GitHub:* :issue:`11701`. - Fixed :exc:`ValueError` when creating a TLS connection with `ClientTimeout(total=0)` by converting `0` to `None` before passing to `ssl_handshake_timeout` in :py:meth:`asyncio.loop.start_tls` -- by :user:`veeceey`. *Related issues and pull requests on GitHub:* :issue:`11859`. - Restored :py:meth:`~aiohttp.BodyPartReader.decode` as a synchronous method for backward compatibility. The method was inadvertently changed to async in 3.13.3 as part of the decompression bomb security fix. A new :py:meth:`~aiohttp.BodyPartReader.decode_iter` method is now available for non-blocking decompression of large payloads using an async generator. Internal aiohttp code uses the async variant to maintain security protections. Changed multipart processing chunk sizes from 64 KiB to 256KiB, to better match aiohttp internals \-- by :user:`bdraco` and :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11898`. - Fixed false-positive :py:class:`DeprecationWarning` for passing `enable_cleanup_closed=True` to :py:class:`~aiohttp.TCPConnector` specifically on Python 3.12.7. \-- by :user:`Robsdedude`. *Related issues and pull requests on GitHub:* :issue:`11972`. - Fixed \_sendfile\_fallback over-reading beyond requested count -- by :user:`bysiber`. *Related issues and pull requests on GitHub:* :issue:`12096`. - Fixed digest auth dropping challenge fields with empty string values -- by :user:`bysiber`. *Related issues and pull requests on GitHub:* :issue:`12097`. - `ClientConnectorCertificateError.os_error` no longer raises :exc:`AttributeError` \-- by :user:`themylogin`. *Related issues and pull requests on GitHub:* :issue:`12136`. - Adjusted pure-Python request header value validation to align with RFC 9110 control-character handling, while preserving lax response parser behavior, and added regression tests for Host/header control-character cases. \-- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12231`. - Rejected duplicate singleton headers (`Host`, `Content-Type`, `Content-Length`, etc.) in the C extension HTTP parser to match the pure Python parser behaviour, preventing potential host-based access control bypasses via parser differentials \-- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12240`. - Aligned the pure-Python HTTP request parser with the C parser by splitting comma-separated and repeated `Connection` header values for keep-alive, close, and upgrade handling -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12249`. ## Improved documentation - Documented :exc:`asyncio.TimeoutError` for `WebSocketResponse.receive()` and related methods -- by :user:`veeceey`. *Related issues and pull requests on GitHub:* :issue:`12042`. ## Packaging updates and notes for downstreams - Upgraded llhttp to 3.9.1 -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`12069`. ## Contributor-facing changes - The benchmark CI job now runs only in the upstream repository -- by :user:`Cycloctane`. It used to always fail in forks, which this change fixed. *Related issues and pull requests on GitHub:* :issue:`11737`. - Fixed flaky performance tests by using appropriate fixed thresholds that account for CI variability -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`11992`. ## Miscellaneous internal changes - Fixed `test_invalid_idna` to work with `idna` 3.11 by using an invalid character (`\u0080`) that is rejected by `yarl` during URL construction -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12027`. - Fixed race condition in `test_data_file` on Python 3.14 free-threaded builds -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12170`. *** ### [`v3.13.3`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3133-2026-01-03) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.13.2...v3.13.3) \=================== This release contains fixes for several vulnerabilities. It is advised to upgrade as soon as possible. ## Bug fixes - Fixed proxy authorization headers not being passed when reusing a connection, which caused 407 (Proxy authentication required) errors \-- by :user:`GLeurquin`. *Related issues and pull requests on GitHub:* :issue:`2596`. - Fixed multipart reading failing when encountering an empty body part -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11857`. - Fixed a case where the parser wasn't raising an exception for a websocket continuation frame when there was no initial frame in context. *Related issues and pull requests on GitHub:* :issue:`11862`. ## Removals and backward incompatible breaking changes - `Brotli` and `brotlicffi` minimum version is now 1.2. Decompression now has a default maximum output size of 32MiB per decompress call -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11898`. ## Packaging updates and notes for downstreams - Moved dependency metadata from :file:`setup.cfg` to :file:`pyproject.toml` per :pep:`621` \-- by :user:`cdce8p`. *Related issues and pull requests on GitHub:* :issue:`11643`. ## Contributor-facing changes - Removed unused `update-pre-commit` github action workflow -- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* :issue:`11689`. ## 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`. - Added regression test for cached logging status -- by :user:`meehand`. *Related issues and pull requests on GitHub:* :issue:`11778`. *** ### [`v3.13.2`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3132-2025-10-28) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.13.1...v3.13.2) \=================== ## Bug fixes - Fixed cookie parser to continue parsing subsequent cookies when encountering a malformed cookie that fails regex validation, such as Google's `g_state` cookie with unescaped quotes -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11632`. - Fixed loading netrc credentials from the default :file:`~/.netrc` (:file:`~/_netrc` on Windows) location when the :envvar:`NETRC` environment variable is not set -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11713`, :issue:`11714`. - Fixed WebSocket compressed sends to be cancellation safe. Tasks are now shielded during compression to prevent compressor state corruption. This ensures that the stateful compressor remains consistent even when send operations are cancelled -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11725`. *** ### [`v3.13.1`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3131-2025-10-17) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.13.0...v3.13.1) \=================== ## Features - Make configuration options in `AppRunner` also available in `run_app()` \-- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* :issue:`11633`. ## Bug fixes - Switched to `backports.zstd` for Python <3.14 and fixed zstd decompression for chunked zstd streams -- by :user:`ZhaoMJ`. Note: Users who installed `zstandard` for support on Python <3.14 will now need to install `backports.zstd` instead (installing `aiohttp[speedups]` will do this automatically). *Related issues and pull requests on GitHub:* :issue:`11623`. - Updated `Content-Type` header parsing to return `application/octet-stream` when header contains invalid syntax. See :rfc:`9110#section-8.3-5`. \-- by :user:`sgaist`. *Related issues and pull requests on GitHub:* :issue:`10889`. - Fixed Python 3.14 support when built without `zstd` support -- by :user:`JacobHenner`. *Related issues and pull requests on GitHub:* :issue:`11603`. - Fixed blocking I/O in the event loop when using netrc authentication by moving netrc file lookup to an executor -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11634`. - Fixed routing to a sub-application added via `.add_domain()` not working if the same path exists on the parent app. -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11673`. ## Packaging updates and notes for downstreams - Moved core packaging metadata from :file:`setup.cfg` to :file:`pyproject.toml` per :pep:`621` \-- by :user:`cdce8p`. *Related issues and pull requests on GitHub:* :issue:`9951`. *** ### [`v3.13.0`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3130-2025-10-06) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.15...v3.13.0) \=================== ## Features - Added support for Python 3.14. *Related issues and pull requests on GitHub:* :issue:`10851`, :issue:`10872`. - Added support for free-threading in Python 3.14+ -- by :user:`kumaraditya303`. *Related issues and pull requests on GitHub:* :issue:`11466`, :issue:`11464`. - Added support for Zstandard (aka Zstd) compression \-- by :user:`KGuillaume-chaps`. *Related issues and pull requests on GitHub:* :issue:`11161`. - Added `StreamReader.total_raw_bytes` to check the number of bytes downloaded \-- by :user:`robpats`. *Related issues and pull requests on GitHub:* :issue:`11483`. ## Bug fixes - Fixed pytest plugin to not use deprecated :py:mod:`asyncio` policy APIs. *Related issues and pull requests on GitHub:* :issue:`10851`. - Updated `Content-Disposition` header parsing to handle trailing semicolons and empty parts \-- by :user:`PLPeeters`. *Related issues and pull requests on GitHub:* :issue:`11243`. - Fixed saved `CookieJar` failing to be loaded if cookies have `partitioned` flag when `http.cookie` does not have partitioned cookies supports. -- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* :issue:`11523`. ## Improved documentation - Added `Wireup` to third-party libraries -- by :user:`maldoinc`. *Related issues and pull requests on GitHub:* :issue:`11233`. ## Packaging updates and notes for downstreams - The `blockbuster` test dependency is now optional; the corresponding test fixture is disabled when it is unavailable \-- by :user:`musicinybrain`. *Related issues and pull requests on GitHub:* :issue:`11363`. - Added `riscv64` build to releases -- by :user:`eshattow`. *Related issues and pull requests on GitHub:* :issue:`11425`. ## Contributor-facing changes - Fixed `test_send_compress_text` failing when alternative zlib implementation is used. (`zlib-ng` in python 3.14 windows build) -- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* :issue:`11546`. *** ### [`v3.12.15`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31215-2025-07-28) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.14...v3.12.15) \==================== ## Bug fixes - Fixed :class:`~aiohttp.DigestAuthMiddleware` to preserve the algorithm case from the server's challenge in the authorization response. This improves compatibility with servers that perform case-sensitive algorithm matching (e.g., servers expecting `algorithm=MD5-sess` instead of `algorithm=MD5-SESS`) \-- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11352`. ## Improved documentation - Remove outdated contents of `aiohttp-devtools` and `aiohttp-swagger` from Web\_advanced docs. \-- by :user:`Cycloctane` *Related issues and pull requests on GitHub:* :issue:`11347`. ## Packaging updates and notes for downstreams - Started including the `llhttp` :file:`LICENSE` file in wheels by adding `vendor/llhttp/LICENSE` to `license-files` in :file:`setup.cfg` -- by :user:`threexc`. *Related issues and pull requests on GitHub:* :issue:`11226`. ## Contributor-facing changes - Updated a regex in `test_aiohttp_request_coroutine` for Python 3.14. *Related issues and pull requests on GitHub:* :issue:`11271`. *** ### [`v3.12.14`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31214-2025-07-10) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.13...v3.12.14) \==================== ## Bug fixes - Fixed file uploads failing with HTTP 422 errors when encountering 307/308 redirects, and 301/302 redirects for non-POST methods, by preserving the request body when appropriate per :rfc:`9110#section-15.4.3-3.1` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11270`. - Fixed :py:meth:`ClientSession.close() <aiohttp.ClientSession.close>` hanging indefinitely when using HTTPS requests through HTTP proxies -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11273`. - Bumped minimum version of aiosignal to 1.4+ to resolve typing issues -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11280`. ## Features - Added initial trailer parsing logic to Python HTTP parser -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11269`. ## Improved documentation - Clarified exceptions raised by `WebSocketResponse.send_frame` et al. \-- by :user:`DoctorJohn`. *Related issues and pull requests on GitHub:* :issue:`11234`. *** ### [`v3.12.13`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31213-2025-06-14) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.12...v3.12.13) \==================== ## 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31212-2025-06-09) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.11...v3.12.12) \==================== ## 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's `http.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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31211-2025-06-07) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.10...v3.12.11) \==================== ## Features - Improved SSL connection handling by changing the default `ssl_shutdown_timeout` from `0.1` to `0` seconds. SSL connections now use Python's default graceful shutdown 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 was rejected 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 in aiohttp 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` to `0` seconds. SSL connections now use Python's default graceful shutdown 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 was rejected 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 in aiohttp 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31210-2025-06-07) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.9...v3.12.10) \==================== ## 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3129-2025-06-04) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.8...v3.12.9) \=================== ## Bug fixes - Fixed `IOBasePayload` and `TextIOPayload` 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 of `READ_SIZE` (64KB) regardless of the total content length. *Related issues and pull requests on GitHub:* :issue:`11138`. *** ### [`v3.12.8`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3128-2025-06-04) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.7...v3.12.8) \=================== ## 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3134-2026-03-28) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.6...v3.12.7) \=================== ## Features - Added `max_headers` parameter to limit the number of headers that should be read from a response -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11955`. - Added a `dns_cache_max_size` parameter to `TCPConnector` to limit the size of the cache -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`12106`. ## Bug fixes - Fixed server hanging indefinitely when chunked transfer encoding chunk-size does not match actual data length. The server now raises `TransferEncodingError` instead of waiting forever for data that will never arrive -- by :user:`Fridayai700`. *Related issues and pull requests on GitHub:* :issue:`10596`. - Fixed access log timestamps ignoring daylight saving time (DST) changes. The previous implementation used :py:data:`time.timezone` which is a constant and does not reflect DST transitions -- by :user:`nightcityblade`. *Related issues and pull requests on GitHub:* :issue:`11283`. - Fixed `RuntimeError: An event loop is running` error when using `aiohttp.GunicornWebWorker` or `aiohttp.GunicornUVLoopWebWorker` on Python >=3.14. \-- by :user:`Tasssadar`. *Related issues and pull requests on GitHub:* :issue:`11701`. - Fixed :exc:`ValueError` when creating a TLS connection with `ClientTimeout(total=0)` by converting `0` to `None` before passing to `ssl_handshake_timeout` in :py:meth:`asyncio.loop.start_tls` -- by :user:`veeceey`. *Related issues and pull requests on GitHub:* :issue:`11859`. - Restored :py:meth:`~aiohttp.BodyPartReader.decode` as a synchronous method for backward compatibility. The method was inadvertently changed to async in 3.13.3 as part of the decompression bomb security fix. A new :py:meth:`~aiohttp.BodyPartReader.decode_iter` method is now available for non-blocking decompression of large payloads using an async generator. Internal aiohttp code uses the async variant to maintain security protections. Changed multipart processing chunk sizes from 64 KiB to 256KiB, to better match aiohttp internals \-- by :user:`bdraco` and :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`11898`. - Fixed false-positive :py:class:`DeprecationWarning` for passing `enable_cleanup_closed=True` to :py:class:`~aiohttp.TCPConnector` specifically on Python 3.12.7. \-- by :user:`Robsdedude`. *Related issues and pull requests on GitHub:* :issue:`11972`. - Fixed \_sendfile\_fallback over-reading beyond requested count -- by :user:`bysiber`. *Related issues and pull requests on GitHub:* :issue:`12096`. - Fixed digest auth dropping challenge fields with empty string values -- by :user:`bysiber`. *Related issues and pull requests on GitHub:* :issue:`12097`. - `ClientConnectorCertificateError.os_error` no longer raises :exc:`AttributeError` \-- by :user:`themylogin`. *Related issues and pull requests on GitHub:* :issue:`12136`. - Adjusted pure-Python request header value validation to align with RFC 9110 control-character handling, while preserving lax response parser behavior, and added regression tests for Host/header control-character cases. \-- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12231`. - Rejected duplicate singleton headers (`Host`, `Content-Type`, `Content-Length`, etc.) in the C extension HTTP parser to match the pure Python parser behaviour, preventing potential host-based access control bypasses via parser differentials \-- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12240`. - Aligned the pure-Python HTTP request parser with the C parser by splitting comma-separated and repeated `Connection` header values for keep-alive, close, and upgrade handling -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12249`. ## Improved documentation - Documented :exc:`asyncio.TimeoutError` for `WebSocketResponse.receive()` and related methods -- by :user:`veeceey`. *Related issues and pull requests on GitHub:* :issue:`12042`. ## Packaging updates and notes for downstreams - Upgraded llhttp to 3.9.1 -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`12069`. ## Contributor-facing changes - The benchmark CI job now runs only in the upstream repository -- by :user:`Cycloctane`. It used to always fail in forks, which this change fixed. *Related issues and pull requests on GitHub:* :issue:`11737`. - Fixed flaky performance tests by using appropriate fixed thresholds that account for CI variability -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`11992`. ## Miscellaneous internal changes - Fixed `test_invalid_idna` to work with `idna` 3.11 by using an invalid character (`\u0080`) that is rejected by `yarl` during URL construction -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12027`. - Fixed race condition in `test_data_file` on Python 3.14 free-threaded builds -- by :user:`rodrigobnogueira`. *Related issues and pull requests on GitHub:* :issue:`12170`. *** ### [`v3.12.6`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3126-2025-05-31) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.4...v3.12.6) \=================== ## 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3124-2025-05-28) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.3...v3.12.4) \=================== ## 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3123-2025-05-28) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.2...v3.12.3) \=================== ## Bug fixes - Fixed memory leak in :py:meth:`~aiohttp.CookieJar.filter_cookies` that caused unbounded memory growth when 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3122-2025-05-26) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.1...v3.12.2) \=================== ## Bug fixes - Fixed `Content-Length` header not being set to `0` for non-GET requests with `None` body -- by :user:`bdraco`. Non-GET requests (`POST`, `PUT`, `PATCH`, `DELETE`) with `None` as the body now correctly set the `Content-Length` header to `0`, 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31215-2025-07-28) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.12.0...v3.12.1) \==================== ## Bug fixes - Fixed :class:`~aiohttp.DigestAuthMiddleware` to preserve the algorithm case from the server's challenge in the authorization response. This improves compatibility with servers that perform case-sensitive algorithm matching (e.g., servers expecting `algorithm=MD5-sess` instead of `algorithm=MD5-SESS`) \-- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`11352`. ## Improved documentation - Remove outdated contents of `aiohttp-devtools` and `aiohttp-swagger` from Web\_advanced docs. \-- by :user:`Cycloctane` *Related issues and pull requests on GitHub:* :issue:`11347`. ## Packaging updates and notes for downstreams - Started including the `llhttp` :file:`LICENSE` file in wheels by adding `vendor/llhttp/LICENSE` to `license-files` in :file:`setup.cfg` -- by :user:`threexc`. *Related issues and pull requests on GitHub:* :issue:`11226`. ## Contributor-facing changes - Updated a regex in `test_aiohttp_request_coroutine` for Python 3.14. *Related issues and pull requests on GitHub:* :issue:`11271`. *** ### [`v3.12.0`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#3120-2025-05-24) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.18...v3.12.0) \=================== ## 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:* :issue:`6009`, :issue:`10988`. - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* :issue:`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:* :issue:`10325`, :issue:`10915`, :issue:`10941`, :issue:`10943`. - Fixed pytest plugin to not use deprecated :py:mod:`asyncio` policy APIs. *Related issues and pull requests on GitHub:* :issue:`10851`. - Fixed :py:class:`~aiohttp.resolver.AsyncResolver` not using the `loop` argument in versions 3.x where it should still be supported -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`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:* :issue:`2213`, :issue:`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 to `ClientRequest`, allowing middleware to access the session for making additional requests. *Related issues and pull requests on GitHub:* :issue:`9732`, :issue:`10902`, :issue:`10945`, :issue:`10952`, :issue:`10959`, :issue:`10968`. - Allow user setting zlib compression backend -- by :user:`TimMenninger` This change allows the user to call :func:`aiohttp.set_zlib_backend()` with the zlib compression module of their choice. Default behavior continues to use the builtin `zlib` library. *Related issues and pull requests on GitHub:* :issue:`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:* :issue:`10074`. - Added `host` parameter to `aiohttp_server` fixture -- by :user:`christianwbrock`. *Related issues and pull requests on GitHub:* :issue:`10120`. - Detect blocking calls in coroutines using BlockBuster -- by :user:`cbornet`. *Related issues and pull requests on GitHub:* :issue:`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:* :issue:`10474`, :issue:`10520`, :issue:`10961`, :issue:`10962`. - Started building armv7l manylinux wheels -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10797`. - Implemented shared DNS resolver management to fix excessive resolver object creation when using multiple client sessions. The new `_DNSResolverManager` singleton ensures only one `DNSResolver` object is created for default configurations, significantly reducing resource usage and improving performance for applications using multiple client sessions simultaneously -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10847`, :issue:`10923`, :issue:`10946`. - Upgraded to LLHTTP 9.3.0 -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`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 an `aiohttp` 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:* :issue:`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:* :issue:`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:* :issue:`10662`. - Added support for building against system `llhttp` library -- by :user:`mgorny`. This change adds support for :envvar:`AIOHTTP_USE_SYSTEM_DEPS` environment variable that can be used to build aiohttp against the system install of the `llhttp` library rather than the vendored one. *Related issues and pull requests on GitHub:* :issue:`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 using `pycares` 4.7.0 or later. *Related issues and pull requests on GitHub:* :issue:`10823`. - Fixed compatibility issue with Cython 3.1.1 -- by :user:`bdraco` *Related issues and pull requests on GitHub:* :issue:`10877`. ## Contributor-facing changes - Sped up tests by disabling `blockbuster` fixture for `test_static_file_huge` and `test_static_file_huge_cancel` tests -- by :user:`dikos1337`. *Related issues and pull requests on GitHub:* :issue:`9705`, :issue:`10761`. - Updated tests to avoid using deprecated :py:mod:`asyncio` policy APIs and make it compatible with Python 3.14. *Related issues and pull requests on GitHub:* :issue:`10851`. - Added Winloop to test suite to support in the future -- by :user:`Vizonex`. *Related issues and pull requests on GitHub:* :issue:`10922`. ## Miscellaneous internal changes - Added support for the `partitioned` attribute in the `set_cookie` method. *Related issues and pull requests on GitHub:* :issue:`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:* :issue:`10146`. *** ### [`v3.11.18`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31118-2025-04-20) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.17...v3.11.18) \==================== ## 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31117-2025-04-19) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.16...v3.11.17) \==================== ## 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`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31116-2025-04-01) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.15...v3.11.16) \==================== ## Bug fixes - Replaced deprecated `asyncio.iscoroutinefunction` with its counterpart from `inspect` \-- 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`. *** ### [`v3.11.15`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31115-2025-03-31) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.14...v3.11.15) \==================== ## Bug fixes - Reverted explicitly closing sockets if an exception is raised during `create_connection` -- by :user:`bdraco`. This change originally appeared in aiohttp 3.11.13 *Related issues and pull requests on GitHub:* :issue:`10464`, :issue:`10617`, :issue:`10656`. ## Miscellaneous internal changes - Improved performance of WebSocket buffer handling -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10601`. - Improved performance of serializing headers -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10625`. *** ### [`v3.11.14`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31114-2025-03-16) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.13...v3.11.14) \==================== ## Bug fixes - Fixed an issue where dns queries were delayed indefinitely when an exception occurred in a `trace.send_dns_cache_miss` \-- by :user:`logioniz`. *Related issues and pull requests on GitHub:* :issue:`10529`. - Fixed DNS resolution on platforms that don't support `socket.AI_ADDRCONFIG` -- by :user:`maxbachmann`. *Related issues and pull requests on GitHub:* :issue:`10542`. - The connector now raises :exc:`aiohttp.ClientConnectionError` instead of :exc:`OSError` when failing to explicitly close the socket after :py:meth:`asyncio.loop.create_connection` fails -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10551`. - Break cyclic references at connection close when there was a traceback -- by :user:`bdraco`. Special thanks to :user:`availov` for reporting the issue. *Related issues and pull requests on GitHub:* :issue:`10556`. - Break cyclic references when there is an exception handling a request -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10569`. ## Features - Improved logging on non-overlapping WebSocket client protocols to include the remote address -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10564`. ## Miscellaneous internal changes - Improved performance of parsing content types by adding a cache in the same manner currently done with mime types -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10552`. *** ### [`v3.11.13`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31115-2025-03-31) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.12...v3.11.13) \==================== ## Bug fixes - Reverted explicitly closing sockets if an exception is raised during `create_connection` -- by :user:`bdraco`. This change originally appeared in aiohttp 3.11.13 *Related issues and pull requests on GitHub:* :issue:`10464`, :issue:`10617`, :issue:`10656`. ## Miscellaneous internal changes - Improved performance of WebSocket buffer handling -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10601`. - Improved performance of serializing headers -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10625`. *** ### [`v3.11.12`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31112-2025-02-05) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.11...v3.11.12) \==================== ## Bug fixes - `MultipartForm.decode()` now follows RFC1341 7.2.1 with a `CRLF` after the boundary \-- by :user:`imnotjames`. *Related issues and pull requests on GitHub:* :issue:`10270`. - Restored the missing `total_bytes` attribute to `EmptyStreamReader` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10387`. ## Features - Updated :py:func:`~aiohttp.request` to make it accept `_RequestOptions` kwargs. \-- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* :issue:`10300`. - Improved logging of HTTP protocol errors to include the remote address -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10332`. ## Improved documentation - Added `aiohttp-openmetrics` to list of third-party libraries -- by :user:`jelmer`. *Related issues and pull requests on GitHub:* :issue:`10304`. ## Packaging updates and notes for downstreams - Added missing files to the source distribution to fix `Makefile` targets. Added a `cythonize-nodeps` target to run Cython without invoking pip to install dependencies. *Related issues and pull requests on GitHub:* :issue:`10366`. - Started building armv7l musllinux wheels -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10404`. ## Contributor-facing changes - The CI/CD workflow has been updated to use `upload-artifact` v4 and `download-artifact` v4 GitHub Actions -- by :user:`silamon`. *Related issues and pull requests on GitHub:* :issue:`10281`. ## Miscellaneous internal changes - Restored support for zero copy writes when using Python 3.12 versions 3.12.9 and later or Python 3.13.2+ -- by :user:`bdraco`. Zero copy writes were previously disabled due to :cve:`2024-12254` which is resolved in these Python versions. *Related issues and pull requests on GitHub:* :issue:`10137`. *** ### [`v3.11.11`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31111-2024-12-18) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.10...v3.11.11) \==================== ## Bug fixes - Updated :py:meth:`~aiohttp.ClientSession.request` to reuse the `quote_cookie` setting from `ClientSession._cookie_jar` when processing cookies parameter. \-- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* :issue:`10093`. - Fixed type of `SSLContext` for some static type checkers (e.g. pyright). *Related issues and pull requests on GitHub:* :issue:`10099`. - Updated :meth:`aiohttp.web.StreamResponse.write` annotation to also allow :class:`bytearray` and :class:`memoryview` as inputs -- by :user:`cdce8p`. *Related issues and pull requests on GitHub:* :issue:`10154`. - Fixed a hang where a connection previously used for a streaming download could be returned to the pool in a paused state. \-- by :user:`javitonino`. *Related issues and pull requests on GitHub:* :issue:`10169`. ## Features - Enabled ALPN on default SSL contexts. This improves compatibility with some proxies which don't work without this extension. \-- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* :issue:`10156`. ## Miscellaneous internal changes - Fixed an infinite loop that can occur when using aiohttp in combination with `async-solipsism`\_ -- by :user:`bmerry`. .. \_async-solipsism: <https://github.com/bmerry/async-solipsism> *Related issues and pull requests on GitHub:* :issue:`10149`. *** ### [`v3.11.10`](https://github.com/aio-libs/aiohttp/blob/HEAD/CHANGES.rst#31110-2024-12-05) [Compare Source](https://github.com/aio-libs/aiohttp/compare/v3.11.9...v3.11.10) \==================== ## Bug fixes - Fixed race condition in :class:`aiohttp.web.FileResponse` that could have resulted in an incorrect response if the file was replaced on the file system during `prepare` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10101`, :issue:`10113`. - Replaced deprecated call to :func:`mimetypes.guess_type` with :func:`mimetypes.guess_file_type` when using Python 3.13+ -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10102`. - Disabled zero copy writes in the `StreamWriter` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`10125`. *** </details> <details> <summary>AbstractUmbra/audioop (audioop-lts)</summary> ### [`v0.2.2`](https://github.com/AbstractUmbra/audioop/compare/0.2.1...0.2.2) [Compare Source](https://github.com/AbstractUmbra/audioop/compare/0.2.1...0.2.2) </details> <details> <summary>pypa/distlib (distlib)</summary> ### [`v0.4.0`](https://github.com/pypa/distlib/compare/0.3.9...0.4.0) [Compare Source](https://github.com/pypa/distlib/compare/0.3.9...0.4.0) </details> <details> <summary>docker/build-push-action (docker/build-push-action)</summary> ### [`v7`](https://github.com/docker/build-push-action/compare/v6...v7) [Compare Source](https://github.com/docker/build-push-action/compare/v6...v7) </details> <details> <summary>docker/login-action (docker/login-action)</summary> ### [`v4`](https://github.com/docker/login-action/compare/v3...v4) [Compare Source](https://github.com/docker/login-action/compare/v3...v4) </details> <details> <summary>docker/setup-buildx-action (docker/setup-buildx-action)</summary> ### [`v4`](https://github.com/docker/setup-buildx-action/compare/v3...v4) [Compare Source](https://github.com/docker/setup-buildx-action/compare/v3...v4) </details> <details> <summary>carpedm20/emoji (emoji)</summary> ### [`v2.15.0`](https://github.com/carpedm20/emoji/blob/HEAD/CHANGES.md#v2150-2025-09-20) [Compare Source](https://github.com/carpedm20/emoji/compare/v2.14.1...v2.15.0) - Update to Unicode 17.0 ### [`v2.14.1`](https://github.com/carpedm20/emoji/blob/HEAD/CHANGES.md#v2141-2025-01-10) [Compare Source](https://github.com/carpedm20/emoji/compare/v2.14.0...v2.14.1) - Use `importlib.resources` to load json files [#&#8203;311](https://github.com/carpedm20/emoji/issues/311) - Update translations to Unicode release-46-1 </details> <details> <summary>tox-dev/py-filelock (filelock)</summary> ### [`v3.29.0`](https://github.com/tox-dev/filelock/releases/tag/3.29.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.28.0...3.29.0) <!-- Release notes generated using configuration in .github/release.yaml at 3.29.0 --> ##### What's Changed - 🐛 fix(async): use single-thread executor for lock consistency by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#533](https://github.com/tox-dev/filelock/pull/533) - ✨ feat(soft): enable stale lock detection on Windows by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#534](https://github.com/tox-dev/filelock/pull/534) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.28.0...3.29.0> ### [`v3.28.0`](https://github.com/tox-dev/filelock/releases/tag/3.28.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.25.2...3.28.0) <!-- Release notes generated using configuration in .github/release.yaml at 3.28.0 --> ##### What's Changed - 🐛 fix(ci): unbreak release workflow, publish to PyPI again by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#529](https://github.com/tox-dev/filelock/pull/529) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.27.0...3.28.0> ### [`v3.25.2`](https://github.com/tox-dev/filelock/releases/tag/3.25.2) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.25.1...3.25.2) <!-- Release notes generated using configuration in .github/release.yaml at 3.25.2 --> ##### What's Changed - 🐛 fix(unix): suppress EIO on close in Docker bind mounts by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#513](https://github.com/tox-dev/filelock/pull/513) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.25.1...3.25.2> ### [`v3.25.1`](https://github.com/tox-dev/filelock/releases/tag/3.25.1) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.25.0...3.25.1) <!-- Release notes generated using configuration in .github/release.yaml at 3.25.1 --> ##### What's Changed - 📝 docs(logo): add branded project logo by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#507](https://github.com/tox-dev/filelock/pull/507) - 🐛 fix(win): restore best-effort lock file cleanup on release by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#511](https://github.com/tox-dev/filelock/pull/511) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.25.0...3.25.1> ### [`v3.25.0`](https://github.com/tox-dev/filelock/releases/tag/3.25.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.24.3...3.25.0) <!-- Release notes generated using configuration in .github/release.yaml at 3.25.0 --> ##### What's Changed - Add permissions to check workflow by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#500](https://github.com/tox-dev/filelock/pull/500) - Move SECURITY.md to .github/SECURITY.md by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#501](https://github.com/tox-dev/filelock/pull/501) - Standardize .github files to .yaml suffix by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#504](https://github.com/tox-dev/filelock/pull/504) - ✨ feat(async): add AsyncReadWriteLock by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#506](https://github.com/tox-dev/filelock/pull/506) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.24.4...3.25.0> ### [`v3.24.3`](https://github.com/tox-dev/filelock/releases/tag/3.24.3) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.24.2...3.24.3) <!-- Release notes generated using configuration in .github/release.yml at 3.24.3 --> ##### What's Changed - 🐛 fix(ci): add trailing blank line after changelog entries by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#492](https://github.com/tox-dev/filelock/pull/492) - 🐛 fix(unix): handle ENOENT race on FUSE/NFS during acquire by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#495](https://github.com/tox-dev/filelock/pull/495) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.24.2...3.24.3> ### [`v3.24.2`](https://github.com/tox-dev/filelock/releases/tag/3.24.2) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.24.1...3.24.2) <!-- Release notes generated using configuration in .github/release.yml at 3.24.2 --> ##### What's Changed - 📝 docs: restructure using Diataxis framework by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#489](https://github.com/tox-dev/filelock/pull/489) - 🐛 fix(test): resolve flaky write non-starvation test by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#490](https://github.com/tox-dev/filelock/pull/490) - 🐛 fix(rw): close sqlite3 cursors and skip SoftFileLock Windows race by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#491](https://github.com/tox-dev/filelock/pull/491) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.24.1...3.24.2> ### [`v3.24.1`](https://github.com/tox-dev/filelock/releases/tag/3.24.1) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.24.0...3.24.1) <!-- Release notes generated using configuration in .github/release.yml at 3.24.1 --> ##### What's Changed - 🐛 fix(soft): resolve Windows deadlock and test race condition by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#488](https://github.com/tox-dev/filelock/pull/488) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.24.0...3.24.1> ### [`v3.24.0`](https://github.com/tox-dev/filelock/releases/tag/3.24.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.23.0...3.24.0) <!-- Release notes generated using configuration in .github/release.yml at 3.24.0 --> ##### What's Changed - 🐛 fix(unix): auto-fallback to SoftFileLock on ENOSYS by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#480](https://github.com/tox-dev/filelock/pull/480) - ✨ feat(lock): add poll\_interval to constructor by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#482](https://github.com/tox-dev/filelock/pull/482) - 🐛 fix(win): eliminate lock file race in threaded usage by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#484](https://github.com/tox-dev/filelock/pull/484) - ✨ feat(mode): respect POSIX default ACL inheritance by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#483](https://github.com/tox-dev/filelock/pull/483) - 🐛 fix(api): detect same-thread self-deadlock by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#481](https://github.com/tox-dev/filelock/pull/481) - ✨ feat(lock): add cancel\_check to acquire by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#487](https://github.com/tox-dev/filelock/pull/487) - ✨ feat(lock): add lifetime parameter for lock expiration by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#486](https://github.com/tox-dev/filelock/pull/486) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.23.0...3.24.0> ### [`v3.23.0`](https://github.com/tox-dev/filelock/releases/tag/3.23.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.22.0...3.23.0) <!-- Release notes generated using configuration in .github/release.yml at 3.23.0 --> ##### What's Changed - 📝 docs: add fasteners to similar libraries by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#478](https://github.com/tox-dev/filelock/pull/478) - 📝 docs: move from Unlicense to MIT by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#479](https://github.com/tox-dev/filelock/pull/479) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.22.0...3.23.0> ### [`v3.22.0`](https://github.com/tox-dev/filelock/releases/tag/3.22.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.21.2...3.22.0) <!-- Release notes generated using configuration in .github/release.yml at 3.22.0 --> ##### What's Changed - ✨ feat(soft): detect and break stale locks by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#476](https://github.com/tox-dev/filelock/pull/476) - 🐛 fix(soft): skip stale lock detection on Windows by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#477](https://github.com/tox-dev/filelock/pull/477) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.21.2...3.22.0> ### [`v3.21.2`](https://github.com/tox-dev/filelock/releases/tag/3.21.2) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.21.1...3.21.2) <!-- Release notes generated using configuration in .github/release.yml at 3.21.2 --> ##### What's Changed - 🐛 fix: catch ImportError for missing sqlite3 C library by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#475](https://github.com/tox-dev/filelock/pull/475) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.21.1...3.21.2> ### [`v3.21.1`](https://github.com/tox-dev/filelock/releases/tag/3.21.1) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.21.0...3.21.1) <!-- Release notes generated using configuration in .github/release.yml at 3.21.1 --> ##### What's Changed - 🐛 fix: gracefully handle missing `sqlite3` when importing `ReadWriteLock` by [@&#8203;bayandin](https://github.com/bayandin) in [tox-dev/filelock#473](https://github.com/tox-dev/filelock/pull/473) ##### New Contributors - [@&#8203;bayandin](https://github.com/bayandin) made their first contribution in [tox-dev/filelock#473](https://github.com/tox-dev/filelock/pull/473) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.21.0...3.21.1> ### [`v3.21.0`](https://github.com/tox-dev/filelock/releases/tag/3.21.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.20.4...3.21.0) <!-- Release notes generated using configuration in .github/release.yml at 3.21.0 --> ##### What's Changed - 🔧 chore: modernize tooling and bump deps by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#470](https://github.com/tox-dev/filelock/pull/470) - ✨ feat(lock): add SQLite-based ReadWriteLock by [@&#8203;leventov](https://github.com/leventov) in [tox-dev/filelock#399](https://github.com/tox-dev/filelock/pull/399) - Enable removal of UNIX lock files by [@&#8203;sbc100](https://github.com/sbc100) in [tox-dev/filelock#408](https://github.com/tox-dev/filelock/pull/408) - 👷 ci(release): persist changelog on release by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#471](https://github.com/tox-dev/filelock/pull/471) - 👷 ci(release): commit changelog and use release config by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#472](https://github.com/tox-dev/filelock/pull/472) ##### New Contributors - [@&#8203;leventov](https://github.com/leventov) made their first contribution in [tox-dev/filelock#399](https://github.com/tox-dev/filelock/pull/399) - [@&#8203;sbc100](https://github.com/sbc100) made their first contribution in [tox-dev/filelock#408](https://github.com/tox-dev/filelock/pull/408) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.20.3...3.21.0> ### [`v3.20.4`](https://github.com/tox-dev/filelock/releases/tag/3.20.4) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.20.3...3.20.4) <!-- Release notes generated using configuration in .github/release.yml at 3.20.4 --> ##### What's Changed - 🔧 chore: modernize tooling and bump deps by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#470](https://github.com/tox-dev/filelock/pull/470) - ✨ feat(lock): add SQLite-based ReadWriteLock by [@&#8203;leventov](https://github.com/leventov) in [tox-dev/filelock#399](https://github.com/tox-dev/filelock/pull/399) - Enable removal of UNIX lock files by [@&#8203;sbc100](https://github.com/sbc100) in [tox-dev/filelock#408](https://github.com/tox-dev/filelock/pull/408) - 👷 ci(release): persist changelog on release by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#471](https://github.com/tox-dev/filelock/pull/471) - 👷 ci(release): commit changelog and use release config by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#472](https://github.com/tox-dev/filelock/pull/472) ##### New Contributors - [@&#8203;leventov](https://github.com/leventov) made their first contribution in [tox-dev/filelock#399](https://github.com/tox-dev/filelock/pull/399) - [@&#8203;sbc100](https://github.com/sbc100) made their first contribution in [tox-dev/filelock#408](https://github.com/tox-dev/filelock/pull/408) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.20.3...3.20.4> ### [`v3.20.3`](https://github.com/tox-dev/filelock/releases/tag/3.20.3) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.20.2...3.20.3) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - Fix TOCTOU symlink vulnerability in SoftFileLock by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#465](https://github.com/tox-dev/filelock/pull/465) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.20.2...3.20.3> ### [`v3.20.2`](https://github.com/tox-dev/filelock/releases/tag/3.20.2) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.20.1...3.20.2) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - Support Unix systems without O\_NOFOLLOW by [@&#8203;mwilliamson](https://github.com/mwilliamson) in [tox-dev/filelock#463](https://github.com/tox-dev/filelock/pull/463) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [tox-dev/filelock#464](https://github.com/tox-dev/filelock/pull/464) ##### New Contributors - [@&#8203;mwilliamson](https://github.com/mwilliamson) made their first contribution in [tox-dev/filelock#463](https://github.com/tox-dev/filelock/pull/463) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.20.1...3.20.2> ### [`v3.20.1`](https://github.com/tox-dev/filelock/releases/tag/3.20.1) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.20.0...3.20.1) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - CVE-2025-68146: Fix TOCTOU symlink vulnerability in lock file creation by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#461](https://github.com/tox-dev/filelock/pull/461) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.20.0...3.20.1> ### [`v3.20.0`](https://github.com/tox-dev/filelock/releases/tag/3.20.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.19.1...3.20.0) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed - Add tox.toml to sdist by [@&#8203;mtelka](https://github.com/mtelka) in [tox-dev/filelock#436](https://github.com/tox-dev/filelock/pull/436) - Update docs with example by [@&#8203;znichollscr](https://github.com/znichollscr) in [tox-dev/filelock#438](https://github.com/tox-dev/filelock/pull/438) - Add 3.14 support and drop 3.9 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [tox-dev/filelock#448](https://github.com/tox-dev/filelock/pull/448) #### New Contributors - [@&#8203;mtelka](https://github.com/mtelka) made their first contribution in [tox-dev/filelock#436](https://github.com/tox-dev/filelock/pull/436) - [@&#8203;znichollscr](https://github.com/znichollscr) made their first contribution in [tox-dev/filelock#438](https://github.com/tox-dev/filelock/pull/438) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.19.1...3.20.0> ### [`v3.19.1`](https://github.com/tox-dev/filelock/releases/tag/3.19.1) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.18.0...3.19.1) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - add 3.14t (free threading) to matrix by [@&#8203;paultiq](https://github.com/paultiq) in [tox-dev/filelock#433](https://github.com/tox-dev/filelock/pull/433) - Increase test coverage by [@&#8203;paultiq](https://github.com/paultiq) in [tox-dev/filelock#434](https://github.com/tox-dev/filelock/pull/434) ##### New Contributors - [@&#8203;paultiq](https://github.com/paultiq) made their first contribution in [tox-dev/filelock#433](https://github.com/tox-dev/filelock/pull/433) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.19.0...3.19.1> ### [`v3.18.0`](https://github.com/tox-dev/filelock/releases/tag/3.18.0) [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.17.0...3.18.0) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - Indicate that locks are exclusive/write locks. by [@&#8203;bicarlsen](https://github.com/bicarlsen) in [tox-dev/filelock#394](https://github.com/tox-dev/filelock/pull/394) - Support fcntl check on Emscripten by [@&#8203;juntyr](https://github.com/juntyr) in [tox-dev/filelock#398](https://github.com/tox-dev/filelock/pull/398) ##### New Contributors - [@&#8203;bicarlsen](https://github.com/bicarlsen) made their first contribution in [tox-dev/filelock#394](https://github.com/tox-dev/filelock/pull/394) - [@&#8203;juntyr](https://github.com/juntyr) made their first contribution in [tox-dev/filelock#398](https://github.com/tox-dev/filelock/pull/398) **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.17.0...3.18.0> ### [`v3.17.0`](https://github.com/tox-dev/filelock/releases/tag/3.17.0): Drop 3.8 [Compare Source](https://github.com/tox-dev/py-filelock/compare/3.16.1...3.17.0) <!-- Release notes generated using configuration in .github/release.yml at main --> **Full Changelog**: <https://github.com/tox-dev/filelock/compare/3.16.1...3.17.0> </details> <details> <summary>frenck/python-open-meteo (open-meteo)</summary> ### [`v0.4.0`](https://github.com/frenck/python-open-meteo/releases/tag/v0.4.0) [Compare Source](https://github.com/frenck/python-open-meteo/compare/v0.3.2...v0.4.0) ##### What’s changed ✨ New features - Add support for air quality api by [@&#8203;freundTech](https://github.com/freundTech) in [#&#8203;1042](https://github.com/frenck/python-open-meteo/pull/1042) ##### 🧰 Maintenance - Process ruff changes by [@&#8203;frenck](https://github.com/frenck) in [#&#8203;1147](https://github.com/frenck/python-open-meteo/pull/1147) - :fireworks: Updates maintenance/license year to 2025 by [@&#8203;frenck](https://github.com/frenck) in [#&#8203;1148](https://github.com/frenck/python-open-meteo/pull/1148) ##### ⬆️ Dependency updates <details> <summary>Details</summary> - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;855](https://github.com/frenck/python-open-meteo/issues/855)) - ⬆️ Update actions/upload-artifact action to v4.5.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;856](https://github.com/frenck/python-open-meteo/issues/856)) - ⬆️ Update codecov/codecov-action action to v5.1.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;857](https://github.com/frenck/python-open-meteo/issues/857)) - ⬆️ Update dependency aiohttp to v3.11.11 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;858](https://github.com/frenck/python-open-meteo/issues/858)) - ⬆️ Update dependency ruff to v0.8.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;859](https://github.com/frenck/python-open-meteo/issues/859)) - ⬆️ Update dependency mypy to v1.14.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;860](https://github.com/frenck/python-open-meteo/issues/860)) - ⬆️ Update github/codeql-action action to v3.28.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;861](https://github.com/frenck/python-open-meteo/issues/861)) - ⬆️ Update dependency safety to v3.2.14 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;862](https://github.com/frenck/python-open-meteo/issues/862)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;863](https://github.com/frenck/python-open-meteo/issues/863)) - ⬆️ Update dependency pylint to v3.3.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;864](https://github.com/frenck/python-open-meteo/issues/864)) - ⬆️ Update dependency coverage to v7.6.10 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;865](https://github.com/frenck/python-open-meteo/issues/865)) - ⬆️ Update dependency orjson to v3.10.13 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;866](https://github.com/frenck/python-open-meteo/issues/866)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;867](https://github.com/frenck/python-open-meteo/issues/867)) - ⬆️ Update dependency mypy to v1.14.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;868](https://github.com/frenck/python-open-meteo/issues/868)) - ⬆️ Update dependency pytest-asyncio to v0.25.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;869](https://github.com/frenck/python-open-meteo/issues/869)) - ⬆️ Update dependency ruff to v0.8.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;870](https://github.com/frenck/python-open-meteo/issues/870)) - ⬆️ Update dependency ruff to v0.8.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;871](https://github.com/frenck/python-open-meteo/issues/871)) - ⬆️ Update dependency poetry to v2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;872](https://github.com/frenck/python-open-meteo/issues/872)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;873](https://github.com/frenck/python-open-meteo/issues/873)) - ⬆️ Update dependency pytest-asyncio to v0.25.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;874](https://github.com/frenck/python-open-meteo/issues/874)) - ⬆️ Update dependency orjson to v3.10.14 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;876](https://github.com/frenck/python-open-meteo/issues/876)) - ⬆️ Update dependency node to v22.13.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;875](https://github.com/frenck/python-open-meteo/issues/875)) - ⬆️ Update dependency ruff to v0.9.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;877](https://github.com/frenck/python-open-meteo/issues/877)) - ⬆️ Update actions/upload-artifact action to v4.6.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;878](https://github.com/frenck/python-open-meteo/issues/878)) - ⬆️ Update dependency ruff to v0.9.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;879](https://github.com/frenck/python-open-meteo/issues/879)) - ⬆️ Update github/codeql-action action to v3.28.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;880](https://github.com/frenck/python-open-meteo/issues/880)) - ⬆️ Update dependency poetry to v2.0.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;881](https://github.com/frenck/python-open-meteo/issues/881)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;882](https://github.com/frenck/python-open-meteo/issues/882)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;883](https://github.com/frenck/python-open-meteo/issues/883)) - ⬆️ Update dependency syrupy to v4.8.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;884](https://github.com/frenck/python-open-meteo/issues/884)) - ⬆️ Update dependency orjson to v3.10.15 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;885](https://github.com/frenck/python-open-meteo/issues/885)) - ⬆️ Update dependency ruff to v0.9.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;886](https://github.com/frenck/python-open-meteo/issues/886)) - ⬆️ Update release-drafter/release-drafter action to v6.1.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;887](https://github.com/frenck/python-open-meteo/issues/887)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;888](https://github.com/frenck/python-open-meteo/issues/888)) - ⬆️ Update dependency pre-commit to v4.1.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;889](https://github.com/frenck/python-open-meteo/issues/889)) - ⬆️ Update actions/stale action to v9.1.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;890](https://github.com/frenck/python-open-meteo/issues/890)) - ⬆️ Update dependency node to v22.13.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;891](https://github.com/frenck/python-open-meteo/issues/891)) - ⬆️ Update github/codeql-action action to v3.28.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;892](https://github.com/frenck/python-open-meteo/issues/892)) - ⬆️ Update dependency codespell to v2.4.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;893](https://github.com/frenck/python-open-meteo/issues/893)) - ⬆️ Update codecov/codecov-action action to v5.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;894](https://github.com/frenck/python-open-meteo/issues/894)) - ⬆️ Update github/codeql-action action to v3.28.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;895](https://github.com/frenck/python-open-meteo/issues/895)) - ⬆️ Update dependency ruff to v0.9.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;896](https://github.com/frenck/python-open-meteo/issues/896)) - ⬆️ Update codecov/codecov-action action to v5.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;898](https://github.com/frenck/python-open-meteo/issues/898)) - ⬆️ Update pypa/gh-action-pypi-publish action to v1.12.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;899](https://github.com/frenck/python-open-meteo/issues/899)) - ⬆️ Update github/codeql-action action to v3.28.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;897](https://github.com/frenck/python-open-meteo/issues/897)) - ⬆️ Update github/codeql-action action to v3.28.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;901](https://github.com/frenck/python-open-meteo/issues/901)) - ⬆️ Update codecov/codecov-action action to v5.3.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;900](https://github.com/frenck/python-open-meteo/issues/900)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;903](https://github.com/frenck/python-open-meteo/issues/903)) - ⬆️ Update actions/setup-node action to v4.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;904](https://github.com/frenck/python-open-meteo/issues/904)) - ⬆️ Update dependency pip to v25 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;902](https://github.com/frenck/python-open-meteo/issues/902)) - ⬆️ Update github/codeql-action action to v3.28.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;905](https://github.com/frenck/python-open-meteo/issues/905)) - ⬆️ Update actions/setup-python action to v5.4.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;906](https://github.com/frenck/python-open-meteo/issues/906)) - ⬆️ Update dependency pylint to v3.3.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;907](https://github.com/frenck/python-open-meteo/issues/907)) - ⬆️ Update dependency pytest-asyncio to v0.25.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;909](https://github.com/frenck/python-open-meteo/issues/909)) - ⬆️ Update dependency codespell to v2.4.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;908](https://github.com/frenck/python-open-meteo/issues/908)) - ⬆️ Update github/codeql-action action to v3.28.7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;910](https://github.com/frenck/python-open-meteo/issues/910)) - ⬆️ Update github/codeql-action action to v3.28.8 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;911](https://github.com/frenck/python-open-meteo/issues/911)) - ⬆️ Update dependency ruff to v0.9.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;912](https://github.com/frenck/python-open-meteo/issues/912)) - ⬆️ Update dependency mypy to v1.15.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;913](https://github.com/frenck/python-open-meteo/issues/913)) - ⬆️ Update dependency aiohttp to v3.11.12 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;914](https://github.com/frenck/python-open-meteo/issues/914)) - ⬆️ Update dependency ruff to v0.9.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;915](https://github.com/frenck/python-open-meteo/issues/915)) - ⬆️ Update github/codeql-action action to v3.28.9 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;916](https://github.com/frenck/python-open-meteo/issues/916)) - ⬆️ Update dependency coverage to v7.6.11 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;918](https://github.com/frenck/python-open-meteo/issues/918)) - ⬆️ Update dependency prettier to v3.5.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;919](https://github.com/frenck/python-open-meteo/issues/919)) - ⬆️ Update dependency pip to v25.0.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;920](https://github.com/frenck/python-open-meteo/issues/920)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;921](https://github.com/frenck/python-open-meteo/issues/921)) - ⬆️ Update dependency ruff to v0.9.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;922](https://github.com/frenck/python-open-meteo/issues/922)) - ⬆️ Update dependency node to v22.14.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;923](https://github.com/frenck/python-open-meteo/issues/923)) - ⬆️ Update dependency coverage to v7.6.12 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;924](https://github.com/frenck/python-open-meteo/issues/924)) - ⬆️ Update dependency prettier to v3.5.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;925](https://github.com/frenck/python-open-meteo/issues/925)) - ⬆️ Update dependency safety to v3.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;926](https://github.com/frenck/python-open-meteo/issues/926)) - ⬆️ Update dependency poetry to v2.1.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;927](https://github.com/frenck/python-open-meteo/issues/927)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;929](https://github.com/frenck/python-open-meteo/issues/929)) - ⬆️ Update dependency poetry to v2.1.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;928](https://github.com/frenck/python-open-meteo/issues/928)) - ⬆️ Update SonarSource/sonarqube-scan-action action to v5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;930](https://github.com/frenck/python-open-meteo/issues/930)) - ⬆️ Update dependency syrupy to v4.8.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;932](https://github.com/frenck/python-open-meteo/issues/932)) - ⬆️ Update dependency ruff to v0.9.7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;931](https://github.com/frenck/python-open-meteo/issues/931)) - ⬆️ Update github/codeql-action action to v3.28.10 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;933](https://github.com/frenck/python-open-meteo/issues/933)) - ⬆️ Update actions/upload-artifact action to v4.6.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;934](https://github.com/frenck/python-open-meteo/issues/934)) - ⬆️ Update dependency prettier to v3.5.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;935](https://github.com/frenck/python-open-meteo/issues/935)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;936](https://github.com/frenck/python-open-meteo/issues/936)) - ⬆️ Update dependency aiohttp to v3.11.13 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;937](https://github.com/frenck/python-open-meteo/issues/937)) - ⬆️ Update dependency safety to v3.3.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;938](https://github.com/frenck/python-open-meteo/issues/938)) - ⬆️ Update actions/download-artifact action to v4.1.9 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;939](https://github.com/frenck/python-open-meteo/issues/939)) - ⬆️ Update codecov/codecov-action action to v5.4.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;940](https://github.com/frenck/python-open-meteo/issues/940)) - ⬆️ Update dependency ruff to v0.9.8 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;941](https://github.com/frenck/python-open-meteo/issues/941)) - ⬆️ Update dependency ruff to v0.9.9 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;942](https://github.com/frenck/python-open-meteo/issues/942)) - ⬆️ Update dependency pytest to v8.3.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;943](https://github.com/frenck/python-open-meteo/issues/943)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;945](https://github.com/frenck/python-open-meteo/issues/945)) - ⬆️ Update dependency prettier to v3.5.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;944](https://github.com/frenck/python-open-meteo/issues/944)) - ⬆️ Update github/codeql-action action to v3.28.11 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;947](https://github.com/frenck/python-open-meteo/issues/947)) - ⬆️ Update dependency ruff to v0.9.10 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;946](https://github.com/frenck/python-open-meteo/issues/946)) - ⬆️ Update dependency syrupy to v4.9.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;948](https://github.com/frenck/python-open-meteo/issues/948)) - ⬆️ Update dependency pylint to v3.3.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;949](https://github.com/frenck/python-open-meteo/issues/949)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;950](https://github.com/frenck/python-open-meteo/issues/950)) - ⬆️ Update dependency yamllint to v1.36.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;951](https://github.com/frenck/python-open-meteo/issues/951)) - ⬆️ Update dependency ruff to v0.10.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;952](https://github.com/frenck/python-open-meteo/issues/952)) - ⬆️ Update dependency ruff to v0.11.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;953](https://github.com/frenck/python-open-meteo/issues/953)) - ⬆️ Update dependency yamllint to v1.36.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;954](https://github.com/frenck/python-open-meteo/issues/954)) - ⬆️ Update dependency coverage to v7.7.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;955](https://github.com/frenck/python-open-meteo/issues/955)) - ⬆️ Update dependency aiohttp to v3.11.14 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;956](https://github.com/frenck/python-open-meteo/issues/956)) - ⬆️ Update actions/setup-node action to v4.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;957](https://github.com/frenck/python-open-meteo/issues/957)) - ⬆️ Update dependency yamllint to v1.36.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;958](https://github.com/frenck/python-open-meteo/issues/958)) - ⬆️ Update actions/download-artifact action to v4.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;959](https://github.com/frenck/python-open-meteo/issues/959)) - ⬆️ Update dependency pre-commit to v4.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;960](https://github.com/frenck/python-open-meteo/issues/960)) - ⬆️ Update github/codeql-action action to v3.28.12 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;962](https://github.com/frenck/python-open-meteo/issues/962)) - ⬆️ Update actions/download-artifact action to v4.2.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;961](https://github.com/frenck/python-open-meteo/issues/961)) - ⬆️ Update actions/upload-artifact action to v4.6.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;963](https://github.com/frenck/python-open-meteo/issues/963)) - ⬆️ Update dependency pylint to v3.3.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;964](https://github.com/frenck/python-open-meteo/issues/964)) - ⬆️ Update dependency ruff to v0.11.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;965](https://github.com/frenck/python-open-meteo/issues/965)) - ⬆️ Update dependency ruff to v0.11.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;966](https://github.com/frenck/python-open-meteo/issues/966)) - ⬆️ Update dependency coverage to v7.7.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;967](https://github.com/frenck/python-open-meteo/issues/967)) - ⬆️ Update dependency yamllint to v1.37.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;968](https://github.com/frenck/python-open-meteo/issues/968)) - ⬆️ Update dependency syrupy to v4.9.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;969](https://github.com/frenck/python-open-meteo/issues/969)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;970](https://github.com/frenck/python-open-meteo/issues/970)) - ⬆️ Update dependency orjson to v3.10.16 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;971](https://github.com/frenck/python-open-meteo/issues/971)) - ⬆️ Update SonarSource/sonarqube-scan-action action to v5.1.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;973](https://github.com/frenck/python-open-meteo/issues/973)) - ⬆️ Update github/codeql-action action to v3.28.13 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;972](https://github.com/frenck/python-open-meteo/issues/972)) - ⬆️ Update actions/setup-python action to v5.5.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;974](https://github.com/frenck/python-open-meteo/issues/974)) - ⬆️ Update dependency pytest-asyncio to v0.26.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;975](https://github.com/frenck/python-open-meteo/issues/975)) - ⬆️ Update dependency poetry to v2.1.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;976](https://github.com/frenck/python-open-meteo/issues/976)) - ⬆️ Update dependency coverage to v7.8.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;977](https://github.com/frenck/python-open-meteo/issues/977)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;978](https://github.com/frenck/python-open-meteo/issues/978)) - ⬆️ Update dependency pytest-cov to v6.1.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;980](https://github.com/frenck/python-open-meteo/issues/980)) - ⬆️ Update dependency aiohttp to v3.11.15 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;979](https://github.com/frenck/python-open-meteo/issues/979)) - ⬆️ Update dependency aiohttp to v3.11.16 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;981](https://github.com/frenck/python-open-meteo/issues/981)) - ⬆️ Update dependency ruff to v0.11.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;982](https://github.com/frenck/python-open-meteo/issues/982)) - ⬆️ Update dependency ruff to v0.11.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;983](https://github.com/frenck/python-open-meteo/issues/983)) - ⬆️ Update dependency pytest-cov to v6.1.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;984](https://github.com/frenck/python-open-meteo/issues/984)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;985](https://github.com/frenck/python-open-meteo/issues/985)) - ⬆️ Update github/codeql-action action to v3.28.14 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;986](https://github.com/frenck/python-open-meteo/issues/986)) - ⬆️ Update github/codeql-action action to v3.28.15 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;987](https://github.com/frenck/python-open-meteo/issues/987)) - ⬆️ Update dependency ruff to v0.11.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;988](https://github.com/frenck/python-open-meteo/issues/988)) - ⬆️ Update actions/setup-node action to v4.4.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;989](https://github.com/frenck/python-open-meteo/issues/989)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;990](https://github.com/frenck/python-open-meteo/issues/990)) - ⬆️ Update codecov/codecov-action action to v5.4.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;991](https://github.com/frenck/python-open-meteo/issues/991)) - ⬆️ Update dependency ruff to v0.11.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;992](https://github.com/frenck/python-open-meteo/issues/992)) - ⬆️ Update dependency aiohttp to v3.11.17 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;993](https://github.com/frenck/python-open-meteo/issues/993)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;994](https://github.com/frenck/python-open-meteo/issues/994)) - ⬆️ Update dependency aiohttp to v3.11.18 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;995](https://github.com/frenck/python-open-meteo/issues/995)) - ⬆️ Update dependency node to v22.15.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;996](https://github.com/frenck/python-open-meteo/issues/996)) - ⬆️ Update github/codeql-action action to v3.28.16 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;997](https://github.com/frenck/python-open-meteo/issues/997)) - ⬆️ Update dependency safety to v3.4.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;998](https://github.com/frenck/python-open-meteo/issues/998)) - ⬆️ Update actions/setup-python action to v5.6.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;999](https://github.com/frenck/python-open-meteo/issues/999)) - ⬆️ Update actions/download-artifact action to v4.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1000](https://github.com/frenck/python-open-meteo/issues/1000)) - ⬆️ Update dependency ruff to v0.11.7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1001](https://github.com/frenck/python-open-meteo/issues/1001)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1003](https://github.com/frenck/python-open-meteo/issues/1003)) - ⬆️ Update dependency pip to v25.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1002](https://github.com/frenck/python-open-meteo/issues/1002)) - ⬆️ Update dependency orjson to v3.10.17 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1004](https://github.com/frenck/python-open-meteo/issues/1004)) - ⬆️ Update dependency orjson to v3.10.18 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1005](https://github.com/frenck/python-open-meteo/issues/1005)) - ⬆️ Update dependency ruff to v0.11.8 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1006](https://github.com/frenck/python-open-meteo/issues/1006)) - ⬆️ Update github/codeql-action action to v3.28.17 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1007](https://github.com/frenck/python-open-meteo/issues/1007)) - ⬆️ Update dependency yamllint to v1.37.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1009](https://github.com/frenck/python-open-meteo/issues/1009)) - ⬆️ Update dependency pylint to v3.3.7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1011](https://github.com/frenck/python-open-meteo/issues/1011)) - ⬆️ Update dependency pip to v25.1.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1008](https://github.com/frenck/python-open-meteo/issues/1008)) - ⬆️ Update dependency poetry to v2.1.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1010](https://github.com/frenck/python-open-meteo/issues/1010)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1012](https://github.com/frenck/python-open-meteo/issues/1012)) - ⬆️ Update SonarSource/sonarqube-scan-action action to v5.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1013](https://github.com/frenck/python-open-meteo/issues/1013)) - ⬆️ Update dependency safety to v3.5.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1014](https://github.com/frenck/python-open-meteo/issues/1014)) - ⬆️ Update dependency ruff to v0.11.9 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1015](https://github.com/frenck/python-open-meteo/issues/1015)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1016](https://github.com/frenck/python-open-meteo/issues/1016)) - ⬆️ Update dependency safety to v3.5.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1017](https://github.com/frenck/python-open-meteo/issues/1017)) - ⬆️ Update dependency node to v22.15.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1018](https://github.com/frenck/python-open-meteo/issues/1018)) - ⬆️ Update dependency ruff to v0.11.10 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1019](https://github.com/frenck/python-open-meteo/issues/1019)) - ⬆️ Update codecov/codecov-action action to v5.4.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1020](https://github.com/frenck/python-open-meteo/issues/1020)) - ⬆️ Update github/codeql-action action to v3.28.18 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1021](https://github.com/frenck/python-open-meteo/issues/1021)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1022](https://github.com/frenck/python-open-meteo/issues/1022)) - ⬆️ Update dependency mashumaro to v3.16 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1023](https://github.com/frenck/python-open-meteo/issues/1023)) - ⬆️ Update dependency coverage to v7.8.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1024](https://github.com/frenck/python-open-meteo/issues/1024)) - ⬆️ Update dependency node to v22.16.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1025](https://github.com/frenck/python-open-meteo/issues/1025)) - ⬆️ Update dependency ruff to v0.11.11 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1026](https://github.com/frenck/python-open-meteo/issues/1026)) - ⬆️ Update dependency coverage to v7.8.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1027](https://github.com/frenck/python-open-meteo/issues/1027)) - ⬆️ Update dependency aiohttp to v3.12.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1028](https://github.com/frenck/python-open-meteo/issues/1028)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1029](https://github.com/frenck/python-open-meteo/issues/1029)) - ⬆️ Update dependency pytest-asyncio to v1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1030](https://github.com/frenck/python-open-meteo/issues/1030)) - ⬆️ Update dependency aiohttp to v3.12.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1031](https://github.com/frenck/python-open-meteo/issues/1031)) - ⬆️ Update dependency aiohttp to v3.12.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1032](https://github.com/frenck/python-open-meteo/issues/1032)) - ⬆️ Update dependency aiohttp to v3.12.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1033](https://github.com/frenck/python-open-meteo/issues/1033)) - ⬆️ Update dependency ruff to v0.11.12 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1034](https://github.com/frenck/python-open-meteo/issues/1034)) - ⬆️ Update dependency mypy to v1.16.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1035](https://github.com/frenck/python-open-meteo/issues/1035)) - ⬆️ Update dependency aiohttp to v3.12.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1036](https://github.com/frenck/python-open-meteo/issues/1036)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1037](https://github.com/frenck/python-open-meteo/issues/1037)) - ⬆️ Update dependency aiohttp to v3.12.7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1038](https://github.com/frenck/python-open-meteo/issues/1038)) - ⬆️ Update dependency pytest to v8.4.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1039](https://github.com/frenck/python-open-meteo/issues/1039)) - ⬆️ Update github/codeql-action action to v3.28.19 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1040](https://github.com/frenck/python-open-meteo/issues/1040)) - ⬆️ Update dependency aiohttp to v3.12.8 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1041](https://github.com/frenck/python-open-meteo/issues/1041)) - ⬆️ Update dependency aiohttp to v3.12.9 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1043](https://github.com/frenck/python-open-meteo/issues/1043)) - ⬆️ Update dependency safety to v3.5.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1044](https://github.com/frenck/python-open-meteo/issues/1044)) - ⬆️ Update dependency ruff to v0.11.13 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1045](https://github.com/frenck/python-open-meteo/issues/1045)) - ⬆️ Update dependency aiohttp to v3.12.11 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1046](https://github.com/frenck/python-open-meteo/issues/1046)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1047](https://github.com/frenck/python-open-meteo/issues/1047)) - ⬆️ Update dependency aiohttp to v3.12.12 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1048](https://github.com/frenck/python-open-meteo/issues/1048)) - ⬆️ Update dependency pytest-cov to v6.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1049](https://github.com/frenck/python-open-meteo/issues/1049)) - ⬆️ Update github/codeql-action action to v3.29.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1050](https://github.com/frenck/python-open-meteo/issues/1050)) - ⬆️ Update dependency coverage to v7.9.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1051](https://github.com/frenck/python-open-meteo/issues/1051)) - ⬆️ Update dependency pytest-cov to v6.2.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1052](https://github.com/frenck/python-open-meteo/issues/1052)) - ⬆️ Update dependency coverage to v7.9.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1053](https://github.com/frenck/python-open-meteo/issues/1053)) - ⬆️ Update dependency aiohttp to v3.12.13 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1054](https://github.com/frenck/python-open-meteo/issues/1054)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1055](https://github.com/frenck/python-open-meteo/issues/1055)) - ⬆️ Update dependency mypy to v1.16.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1056](https://github.com/frenck/python-open-meteo/issues/1056)) - ⬆️ Update dependency ruff to v0.12.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1057](https://github.com/frenck/python-open-meteo/issues/1057)) - ⬆️ Update dependency pytest to v8.4.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1058](https://github.com/frenck/python-open-meteo/issues/1058)) - ⬆️ Update sigstore/gh-action-sigstore-python action to v3.0.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1059](https://github.com/frenck/python-open-meteo/issues/1059)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1060](https://github.com/frenck/python-open-meteo/issues/1060)) - ⬆️ Update dependency prettier to v3.6.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1061](https://github.com/frenck/python-open-meteo/issues/1061)) - ⬆️ Update dependency node to v22.17.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1062](https://github.com/frenck/python-open-meteo/issues/1062)) - ⬆️ Update dependency prettier to v3.6.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1063](https://github.com/frenck/python-open-meteo/issues/1063)) - ⬆️ Update dependency ruff to v0.12.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1064](https://github.com/frenck/python-open-meteo/issues/1064)) - ⬆️ Update dependency prettier to v3.6.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1065](https://github.com/frenck/python-open-meteo/issues/1065)) - ⬆️ Update github/codeql-action action to v3.29.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1066](https://github.com/frenck/python-open-meteo/issues/1066)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1067](https://github.com/frenck/python-open-meteo/issues/1067)) - ⬆️ Update github/codeql-action action to v3.29.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1068](https://github.com/frenck/python-open-meteo/issues/1068)) - ⬆️ Update dependency coverage to v7.9.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1069](https://github.com/frenck/python-open-meteo/issues/1069)) - ⬆️ Update dependency ruff to v0.12.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1070](https://github.com/frenck/python-open-meteo/issues/1070)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1071](https://github.com/frenck/python-open-meteo/issues/1071)) - ⬆️ Update dependency safety to v3.6.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1072](https://github.com/frenck/python-open-meteo/issues/1072)) - ⬆️ Update dependency aiohttp to v3.12.14 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1073](https://github.com/frenck/python-open-meteo/issues/1073)) - ⬆️ Update dependency ruff to v0.12.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1074](https://github.com/frenck/python-open-meteo/issues/1074)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1075](https://github.com/frenck/python-open-meteo/issues/1075)) - ⬆️ Update dependency mypy to v1.17.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1076](https://github.com/frenck/python-open-meteo/issues/1076)) - ⬆️ Update dependency orjson to v3.11.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1077](https://github.com/frenck/python-open-meteo/issues/1077)) - ⬆️ Update dependency node to v22.17.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1078](https://github.com/frenck/python-open-meteo/issues/1078)) - ⬆️ Update dependency pytest-asyncio to v1.1.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1079](https://github.com/frenck/python-open-meteo/issues/1079)) - ⬆️ Update dependency ruff to v0.12.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1080](https://github.com/frenck/python-open-meteo/issues/1080)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1081](https://github.com/frenck/python-open-meteo/issues/1081)) - ⬆️ Update github/codeql-action action to v3.29.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1082](https://github.com/frenck/python-open-meteo/issues/1082)) - ⬆️ Update SonarSource/sonarqube-scan-action action to v5.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1083](https://github.com/frenck/python-open-meteo/issues/1083)) - ⬆️ Update github/codeql-action action to v3.29.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1084](https://github.com/frenck/python-open-meteo/issues/1084)) - ⬆️ Update dependency ruff to v0.12.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1085](https://github.com/frenck/python-open-meteo/issues/1085)) - ⬆️ Update dependency orjson to v3.11.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1087](https://github.com/frenck/python-open-meteo/issues/1087)) - ⬆️ Update dependency coverage to v7.10.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1086](https://github.com/frenck/python-open-meteo/issues/1086)) - ⬆️ Update dependency coverage to v7.10.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1088](https://github.com/frenck/python-open-meteo/issues/1088)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1089](https://github.com/frenck/python-open-meteo/issues/1089)) - ⬆️ Update dependency aiohttp to v3.12.15 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1090](https://github.com/frenck/python-open-meteo/issues/1090)) - ⬆️ Update dependency ruff to v0.12.7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1091](https://github.com/frenck/python-open-meteo/issues/1091)) - ⬆️ Update github/codeql-action action to v3.29.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1092](https://github.com/frenck/python-open-meteo/issues/1092)) - ⬆️ Update dependency mypy to v1.17.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1094](https://github.com/frenck/python-open-meteo/issues/1094)) - ⬆️ Update dependency node to v22.18.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1095](https://github.com/frenck/python-open-meteo/issues/1095)) - ⬆️ Update dependency coverage to v7.10.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1096](https://github.com/frenck/python-open-meteo/issues/1096)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1097](https://github.com/frenck/python-open-meteo/issues/1097)) - ⬆️ Update dependency pip to v25.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1093](https://github.com/frenck/python-open-meteo/issues/1093)) - ⬆️ Update dependency poetry to v2.1.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1098](https://github.com/frenck/python-open-meteo/issues/1098)) - ⬆️ Update actions/download-artifact action to v5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1099](https://github.com/frenck/python-open-meteo/issues/1099)) - ⬆️ Update github/codeql-action action to v3.29.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1100](https://github.com/frenck/python-open-meteo/issues/1100)) - ⬆️ Update dependency ruff to v0.12.8 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1101](https://github.com/frenck/python-open-meteo/issues/1101)) - ⬆️ Update github/codeql-action action to v3.29.7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1102](https://github.com/frenck/python-open-meteo/issues/1102)) - ⬆️ Update github/codeql-action action to v3.29.8 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1103](https://github.com/frenck/python-open-meteo/issues/1103)) - ⬆️ Update dependency pylint to v3.3.8 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1104](https://github.com/frenck/python-open-meteo/issues/1104)) - ⬆️ Update dependency pre-commit to v4.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1105](https://github.com/frenck/python-open-meteo/issues/1105)) - ⬆️ Update dependency coverage to v7.10.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1107](https://github.com/frenck/python-open-meteo/issues/1107)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1108](https://github.com/frenck/python-open-meteo/issues/1108)) - ⬆️ Update dependency pre-commit-hooks to v6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1106](https://github.com/frenck/python-open-meteo/issues/1106)) - ⬆️ Update actions/checkout action to v4.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1109](https://github.com/frenck/python-open-meteo/issues/1109)) - ⬆️ Update actions/checkout action to v5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1110](https://github.com/frenck/python-open-meteo/issues/1110)) - ⬆️ Update github/codeql-action action to v3.29.9 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1111](https://github.com/frenck/python-open-meteo/issues/1111)) - ⬆️ Update dependency orjson to v3.11.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1112](https://github.com/frenck/python-open-meteo/issues/1112)) - ⬆️ Update dependency ruff to v0.12.9 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1113](https://github.com/frenck/python-open-meteo/issues/1113)) - ⬆️ Update dependency coverage to v7.10.4 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1114](https://github.com/frenck/python-open-meteo/issues/1114)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1115](https://github.com/frenck/python-open-meteo/issues/1115)) - ⬆️ Update github/codeql-action action to v3.29.10 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1116](https://github.com/frenck/python-open-meteo/issues/1116)) - ⬆️ Update codecov/codecov-action action to v5.5.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1117](https://github.com/frenck/python-open-meteo/issues/1117)) - ⬆️ Update github/codeql-action action to v3.29.11 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1118](https://github.com/frenck/python-open-meteo/issues/1118)) - ⬆️ Update dependency ruff to v0.12.10 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1119](https://github.com/frenck/python-open-meteo/issues/1119)) - ⬆️ Update dependency coverage to v7.10.5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1120](https://github.com/frenck/python-open-meteo/issues/1120)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1121](https://github.com/frenck/python-open-meteo/issues/1121)) - ⬆️ Update dependency orjson to v3.11.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1122](https://github.com/frenck/python-open-meteo/issues/1122)) - ⬆️ Update dependency ruff to v0.12.11 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1123](https://github.com/frenck/python-open-meteo/issues/1123)) - ⬆️ Update dependency node to v22.19.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1124](https://github.com/frenck/python-open-meteo/issues/1124)) - ⬆️ Update dependency coverage to v7.10.6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1125](https://github.com/frenck/python-open-meteo/issues/1125)) - ⬆️ Update SonarSource/sonarqube-scan-action action to v5.3.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1126](https://github.com/frenck/python-open-meteo/issues/1126)) - ⬆️ Update dependency safety to v3.6.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1127](https://github.com/frenck/python-open-meteo/issues/1127)) - ⬆️ Update github/codeql-action action to v3.30.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1128](https://github.com/frenck/python-open-meteo/issues/1128)) - ⬆️ Update actions/setup-node action to v5 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1130](https://github.com/frenck/python-open-meteo/issues/1130)) - ⬆️ Update pypa/gh-action-pypi-publish action to v1.13.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1129](https://github.com/frenck/python-open-meteo/issues/1129)) - ⬆️ Update actions/setup-python action to v6 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1131](https://github.com/frenck/python-open-meteo/issues/1131)) - ⬆️ Update actions/stale action to v10 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1132](https://github.com/frenck/python-open-meteo/issues/1132)) - ⬆️ Update codecov/codecov-action action to v5.5.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1133](https://github.com/frenck/python-open-meteo/issues/1133)) - ⬆️ Update dependency pytest to v8.4.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1134](https://github.com/frenck/python-open-meteo/issues/1134)) - ⬆️ Update dependency ruff to v0.12.12 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1135](https://github.com/frenck/python-open-meteo/issues/1135)) - ⬆️ Update github/codeql-action action to v3.30.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1136](https://github.com/frenck/python-open-meteo/issues/1136)) - ⬆️ Update dependency pytest-cov to v6.3.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1137](https://github.com/frenck/python-open-meteo/issues/1137)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1138](https://github.com/frenck/python-open-meteo/issues/1138)) - ⬆️ Update dependency pytest-cov to v7 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1140](https://github.com/frenck/python-open-meteo/issues/1140)) - ⬆️ Update github/codeql-action action to v3.30.2 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1139](https://github.com/frenck/python-open-meteo/issues/1139)) - ⬆️ Update github/codeql-action action to v3.30.3 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1141](https://github.com/frenck/python-open-meteo/issues/1141)) - ⬆️ Update dependency ruff to v0.13.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1142](https://github.com/frenck/python-open-meteo/issues/1142)) - ⬆️ Update dependency pytest-asyncio to v1.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1144](https://github.com/frenck/python-open-meteo/issues/1144)) - ⬆️ Update dependency mypy to v1.18.1 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1143](https://github.com/frenck/python-open-meteo/issues/1143)) - ⬆️ Update dependency poetry to v2.2.0 @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1145](https://github.com/frenck/python-open-meteo/issues/1145)) - ⬆️ Lock file maintenance @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) ([#&#8203;1146](https://github.com/frenck/python-open-meteo/issues/1146)) </details> </details> <details> <summary>ijl/orjson (orjson)</summary> ### [`v3.11.8`](https://github.com/ijl/orjson/blob/HEAD/CHANGELOG.md#3118---2026-03-31) [Compare Source](https://github.com/ijl/orjson/compare/3.11.7...3.11.8) ##### Changed - Build and compatibility improvements. ### [`v3.11.7`](https://github.com/ijl/orjson/blob/HEAD/CHANGELOG.md#3117---2026-02-02) [Compare Source](https://github.com/ijl/orjson/compare/3.11.6...3.11.7) ##### Changed - Use a faster library to serialize `float`. Users with byte-exact regression tests should note positive exponents are now written using a `+`, e.g., `1.2e+30` instead of `1.2e30`. Both formats are spec-compliant. - ABI compatibility with CPython 3.15 alpha 5 free-threading. ### [`v3.11.6`](https://github.com/ijl/orjson/blob/HEAD/CHANGELOG.md#3116---2026-01-29) [Compare Source](https://github.com/ijl/orjson/compare/3.11.5...3.11.6) ##### Changed - orjson now includes code licensed under the Mozilla Public License 2.0 (MPL-2.0). - Drop support for Python 3.9. - ABI compatibility with CPython 3.15 alpha 5. - Build now depends on Rust 1.89 or later instead of 1.85. ##### Fixed - Fix sporadic crash serializing deeply nested `list` of `dict`. </details> <details> <summary>kyan001/ping3 (ping3)</summary> ### [`v5.1.3`](https://github.com/kyan001/ping3/releases/tag/v5.1.3): Version 5.1.3 - 5.1.0: - Feature: Support TTL (Hop Limit) for IPv6 on Linux. - 5.0.0: - Feature: Support IPv6 ping. ( [#&#8203;85](https://github.com/kyan001/ping3/issues/85) ) </details> <details> <summary>tox-dev/platformdirs (platformdirs)</summary> ### [`v4.9.6`](https://github.com/tox-dev/platformdirs/releases/tag/4.9.6) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.9.4...4.9.6) <!-- Release notes generated using configuration in .github/release.yaml at 4.9.6 --> ##### What's Changed - 🐛 fix(release): use double quotes for tag variable expansion by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;477](https://github.com/tox-dev/platformdirs/pull/477) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.9.5...4.9.6> ### [`v4.9.4`](https://github.com/tox-dev/platformdirs/releases/tag/4.9.4) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.9.2...4.9.4) <!-- Release notes generated using configuration in .github/release.yaml at 4.9.4 --> ##### What's Changed - Add permissions to workflows by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;455](https://github.com/tox-dev/platformdirs/pull/455) - Move SECURITY.md to .github/SECURITY.md by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;456](https://github.com/tox-dev/platformdirs/pull/456) - Standardize .github files to .yaml suffix by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;458](https://github.com/tox-dev/platformdirs/pull/458) - 📝 docs: add project logo to documentation by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;459](https://github.com/tox-dev/platformdirs/pull/459) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.9.3...4.9.4> ### [`v4.9.2`](https://github.com/tox-dev/platformdirs/releases/tag/4.9.2) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.9.1...4.9.2) <!-- Release notes generated using configuration in .github/release.yml at 4.9.2 --> ##### What's Changed - 📝 docs(platforms): fix RST formatting and TOC hierarchy by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;447](https://github.com/tox-dev/platformdirs/pull/447) - 📝 docs: restructure following Diataxis framework by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;448](https://github.com/tox-dev/platformdirs/pull/448) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.9.1...4.9.2> ### [`v4.9.1`](https://github.com/tox-dev/platformdirs/releases/tag/4.9.1) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.9.0...4.9.1) <!-- Release notes generated using configuration in .github/release.yml at 4.9.1 --> ##### What's Changed - 📝 docs: enhance README, fix issues, and reorganize platforms.rst by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;445](https://github.com/tox-dev/platformdirs/pull/445) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.9.0...4.9.1> ### [`v4.9.0`](https://github.com/tox-dev/platformdirs/releases/tag/4.9.0) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.8.0...4.9.0) <!-- Release notes generated using configuration in .github/release.yml at 4.9.0 --> ##### What's Changed - 📝 docs(usage): add use\_site\_for\_root and comprehensive guidance by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;439](https://github.com/tox-dev/platformdirs/pull/439) - 🐛 fix(unix): use correct runtime dir path for OpenBSD by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;440](https://github.com/tox-dev/platformdirs/pull/440) - ✨ feat(api): add site\_applications\_dir property by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;442](https://github.com/tox-dev/platformdirs/pull/442) - ✨ feat(api): add site\_bin\_dir property by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;443](https://github.com/tox-dev/platformdirs/pull/443) - 📚 docs: split usage guide into tutorial, how-to, and reference by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;441](https://github.com/tox-dev/platformdirs/pull/441) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.8.0...4.9.0> ### [`v4.8.0`](https://github.com/tox-dev/platformdirs/releases/tag/4.8.0) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.7.1...4.8.0) <!-- Release notes generated using configuration in .github/release.yml at 4.8.0 --> ##### What's Changed - 📝 docs(windows): document Store Python sandbox path behavior by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;423](https://github.com/tox-dev/platformdirs/pull/423) - ✨ feat(api): add site\_log\_dir and document Store Python sandbox by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;424](https://github.com/tox-dev/platformdirs/pull/424) - ✨ feat(api): add site\_state\_dir for system-wide state by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;425](https://github.com/tox-dev/platformdirs/pull/425) - ✨ feat(api): add use\_site\_for\_root parameter by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;426](https://github.com/tox-dev/platformdirs/pull/426) - ✨ feat(windows): add PLATFORMDIRS\_\* env var overrides by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;427](https://github.com/tox-dev/platformdirs/pull/427) - ✨ feat(windows): add WIN\_PD\_OVERRIDE\_\* env var overrides by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;428](https://github.com/tox-dev/platformdirs/pull/428) - 🐛 fix(macos): yield individual site dirs in iter\_\*\_dirs by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;429](https://github.com/tox-dev/platformdirs/pull/429) - ✨ feat(api): add user\_bin\_dir property by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;430](https://github.com/tox-dev/platformdirs/pull/430) - ✨ feat(api): add user\_applications\_dir property by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;432](https://github.com/tox-dev/platformdirs/pull/432) - 📝 docs(usage): note that home dir is in stdlib by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;431](https://github.com/tox-dev/platformdirs/pull/431) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.7.1...4.8.0> ### [`v4.7.1`](https://github.com/tox-dev/platformdirs/releases/tag/4.7.1) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.7.0...4.7.1) <!-- Release notes generated using configuration in .github/release.yml at 4.7.1 --> ##### What's Changed - 🐛 fix(windows): avoid FileNotFoundError in sandboxed environments by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;422](https://github.com/tox-dev/platformdirs/pull/422) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.7.0...4.7.1> ### [`v4.7.0`](https://github.com/tox-dev/platformdirs/releases/tag/4.7.0) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.6.0...4.7.0) <!-- Release notes generated using configuration in .github/release.yml at 4.7.0 --> ##### What's Changed - 📝 docs: restructure and fix cross-references by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;419](https://github.com/tox-dev/platformdirs/pull/419) - ✨ feat(windows): use SHGetKnownFolderPath API by [@&#8203;moi15moi](https://github.com/moi15moi) in [#&#8203;380](https://github.com/tox-dev/platformdirs/pull/380) - 🐛 fix(unix): fall back to tempdir when runtime dir is not writable by [@&#8203;lengau](https://github.com/lengau) in [#&#8203;369](https://github.com/tox-dev/platformdirs/pull/369) - 🔧 build(release): adopt filelock-style automated workflow by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;420](https://github.com/tox-dev/platformdirs/pull/420) ##### New Contributors - [@&#8203;moi15moi](https://github.com/moi15moi) made their first contribution in [#&#8203;380](https://github.com/tox-dev/platformdirs/pull/380) - [@&#8203;lengau](https://github.com/lengau) made their first contribution in [#&#8203;369](https://github.com/tox-dev/platformdirs/pull/369) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.6.0...4.7.0> ### [`v4.6.0`](https://github.com/tox-dev/platformdirs/releases/tag/4.6.0) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.5.1...4.6.0) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - Update outdated link and correct function doc by [@&#8203;joclement](https://github.com/joclement) in [#&#8203;398](https://github.com/tox-dev/platformdirs/pull/398) - Fix docs for `site_cache_dir` by [@&#8203;brianhelba](https://github.com/brianhelba) in [#&#8203;402](https://github.com/tox-dev/platformdirs/pull/402) - 🔧 build: migrate from hatch to tox with ty by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;415](https://github.com/tox-dev/platformdirs/pull/415) - Add support for `XDG_*` environment variables by [@&#8203;Czaki](https://github.com/Czaki) in [#&#8203;375](https://github.com/tox-dev/platformdirs/pull/375) ##### New Contributors - [@&#8203;joclement](https://github.com/joclement) made their first contribution in [#&#8203;398](https://github.com/tox-dev/platformdirs/pull/398) - [@&#8203;brianhelba](https://github.com/brianhelba) made their first contribution in [#&#8203;402](https://github.com/tox-dev/platformdirs/pull/402) - [@&#8203;Czaki](https://github.com/Czaki) made their first contribution in [#&#8203;375](https://github.com/tox-dev/platformdirs/pull/375) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.5.1...4.6.0> ### [`v4.5.1`](https://github.com/tox-dev/platformdirs/releases/tag/4.5.1) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.5.0...4.5.1) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - Fix no-ctypes fallback on windows by [@&#8203;youknowone](https://github.com/youknowone) in [#&#8203;403](https://github.com/tox-dev/platformdirs/pull/403) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.5.0...4.5.1> ### [`v4.5.0`](https://github.com/tox-dev/platformdirs/releases/tag/4.5.0) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.4.0...4.5.0) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;376](https://github.com/tox-dev/platformdirs/pull/376) - Bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 in the all group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;378](https://github.com/tox-dev/platformdirs/pull/378) - Bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0 in /.github/workflows by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;379](https://github.com/tox-dev/platformdirs/pull/379) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;381](https://github.com/tox-dev/platformdirs/pull/381) - Add support for Python 3.14 by [@&#8203;hugovk](https://github.com/hugovk) in [#&#8203;382](https://github.com/tox-dev/platformdirs/pull/382) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;383](https://github.com/tox-dev/platformdirs/pull/383) - Update Windows file paths in README by [@&#8203;ParadaCarleton](https://github.com/ParadaCarleton) in [#&#8203;385](https://github.com/tox-dev/platformdirs/pull/385) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;384](https://github.com/tox-dev/platformdirs/pull/384) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;387](https://github.com/tox-dev/platformdirs/pull/387) - Bump astral-sh/setup-uv from 6 to 7 in the all group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;388](https://github.com/tox-dev/platformdirs/pull/388) - Drop 3.9 support by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;389](https://github.com/tox-dev/platformdirs/pull/389) ##### New Contributors - [@&#8203;ParadaCarleton](https://github.com/ParadaCarleton) made their first contribution in [#&#8203;385](https://github.com/tox-dev/platformdirs/pull/385) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.4.0...4.5.0> ### [`v4.4.0`](https://github.com/tox-dev/platformdirs/releases/tag/4.4.0) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.3.8...4.4.0) ##### What's Changed - feat: improve homebrew path detection by [@&#8203;daeho-ro](https://github.com/daeho-ro) in [#&#8203;370](https://github.com/tox-dev/platformdirs/pull/370) ##### New Contributors - [@&#8203;daeho-ro](https://github.com/daeho-ro) made their first contribution in [#&#8203;370](https://github.com/tox-dev/platformdirs/pull/370) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.3.8...4.4.0> ### [`v4.3.8`](https://github.com/tox-dev/platformdirs/releases/tag/4.3.8) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.3.7...4.3.8) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - Add missing examples and fix order of examples in README by [@&#8203;gene1wood](https://github.com/gene1wood) in [#&#8203;355](https://github.com/tox-dev/platformdirs/pull/355) ##### New Contributors - [@&#8203;gene1wood](https://github.com/gene1wood) made their first contribution in [#&#8203;355](https://github.com/tox-dev/platformdirs/pull/355) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.3.7...4.3.8> ### [`v4.3.7`](https://github.com/tox-dev/platformdirs/releases/tag/4.3.7) [Compare Source](https://github.com/tox-dev/platformdirs/compare/4.3.6...4.3.7) <!-- Release notes generated using configuration in .github/release.yml at main --> ##### What's Changed - Chunk dependabot updates into a single PR by [@&#8203;ofek](https://github.com/ofek) in [#&#8203;311](https://github.com/tox-dev/platformdirs/pull/311) - Drop support for EOL Python 3.8 by [@&#8203;hugovk](https://github.com/hugovk) in [#&#8203;330](https://github.com/tox-dev/platformdirs/pull/330) **Full Changelog**: <https://github.com/tox-dev/platformdirs/compare/4.3.6...4.3.7> </details> <details> <summary>pygithub/pygithub (pygithub)</summary> ### [`v2.9.1`](https://github.com/PyGithub/PyGithub/releases/tag/v2.9.1) [Compare Source](https://github.com/pygithub/pygithub/compare/v2.9.0...v2.9.1) ##### Bug Fixes - Fix getting release by tag in lazy mode by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3469](https://github.com/PyGithub/PyGithub/pull/3469) **Full Changelog**: <https://github.com/PyGithub/PyGithub/compare/v2.9.0...v2.9.1> ### [`v2.9.0`](https://github.com/PyGithub/PyGithub/releases/tag/v2.9.0) [Compare Source](https://github.com/pygithub/pygithub/compare/v2.8.1...v2.9.0) ##### Notable changes ##### Lazy PyGithub objects The notion of lazy objects has been added to some PyGithub classes in version 2.6.0. This release now makes all `CompletableGithubObject`s optionally lazy (if useful). See [PyGithub/PyGithub#3403](https://github.com/PyGithub/PyGithub/pull/3403) for a complete list. In lazy mode, getting a PyGithub object does not send a request to the GitHub API. Only accessing methods and properties sends the necessary requests to the GitHub API: ```python # Use lazy mode g = Github(auth=auth, lazy=True) # these method calls do not send requests to the GitHub API user = g.get_user("PyGithub") # get the user repo = user.get_repo("PyGithub") # get the user's repo pull = repo.get_pull(3403) # get a known pull request issue = pull.as_issue() # turn the pull request into an issue # these method and property calls send requests to Github API issue.create_reaction("rocket") # create a reaction created = repo.created_at # get property of lazy object repo # once a lazy object has been fetched, all properties are available (no more requests) licence = repo.license ``` All PyGithub classes that implement `CompletableGithubObject` support lazy mode (if useful). This is only useful for classes that have methods creating, changing, or getting objects. By default, PyGithub objects are not lazy. ##### PyGithub objects with a paginated property The GitHub API has the "feature" of paginated properties. Some objects returned by the API have a property that allows for pagination. Fetching subsequent pages of that property means fetching the entire object (with all other properties) and the specified page of the paginated property. Iterating over the paginated property means fetching all other properties multiple times. Fortunately, the allowed size of each page (`per_page` is usually 300, in contrast to the "usual" `per_page` maximum of 100). Objects with paginated properties: - Commit.files - Comparison.commits - EnterpriseConsumedLicenses.users This PR makes iterating those paginated properties use the configured `per_page` setting. It further allows to specify an individual `per_page` when either retrieving such objects, or fetching paginated properties. See [Classes with paginated properties](https://pygithub.readthedocs.io/en/stable/utilities.html#utilities-classes-with-paginated-properties) for details. ##### Drop Python 3.8 support due to End-of-Life Python 3.8 reached its end-of-life September 6, 2024. Support has been removed with this release. ##### Deprecations - Method `delete` of `Reaction` is deprecated, use `IssueComment.delete_reaction`, `PullRequestComment.delete_reaction`, `CommitComment.delete_reaction` or `Issue.delete_reaction` instead. - Method `Issue.assignee` and parameter `Issue.edit(assignee=…)` are deprecated, use `Issue.assignees` and `Issue.edit(assignees=…)` instead. - Method `Organization.edit_hook` is deprecated, use `Organization.get_hook(id).edit(…)` instead. If you need to avoid `Organization.get_hook(id)` to fetch the `Hook` object from Github API, use a lazy Github instance: ```python Github(…, lazy=True).get_organization(…).get_hook(id).edit(…) ``` - Methods `Team.add_to_members` and `Team.remove_from_members` are deprecated, use `Team.add_membership` or `Team.remove_membership` instead. ##### New Features - Consider per-page settings when iterating paginated properties by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3377](https://github.com/PyGithub/PyGithub/pull/3377) - Add Secret Scanning Alerts and Improve Code Scan Alerts by [@&#8203;matt-davis27](https://github.com/matt-davis27) in [PyGithub/PyGithub#3307](https://github.com/PyGithub/PyGithub/pull/3307) ##### Improvements - More lazy objects by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3403](https://github.com/PyGithub/PyGithub/pull/3403) - Allow for enterprise base url prefixed with `api.` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3419](https://github.com/PyGithub/PyGithub/pull/3419) - Add `throw` option to `Workflow.create_dispatch` to raise exceptions by [@&#8203;dblanchette](https://github.com/dblanchette) in [PyGithub/PyGithub#2966](https://github.com/PyGithub/PyGithub/pull/2966) - Use `GET` url or `_links.self` as object url by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3421](https://github.com/PyGithub/PyGithub/pull/3421) - Add support for `type` parameter to get\_issues by [@&#8203;nrysk](https://github.com/nrysk) in [PyGithub/PyGithub#3381](https://github.com/PyGithub/PyGithub/pull/3381) - Align implemented paths with OpenAPI spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3413](https://github.com/PyGithub/PyGithub/pull/3413) - Add suggested OpenAPI schemas by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3411](https://github.com/PyGithub/PyGithub/pull/3411) - Apply OpenAPI schemas by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3412](https://github.com/PyGithub/PyGithub/pull/3412) ##### Bug Fixes - Fix `PaginatedList.totalCount` returning 0 with GitHub deprecation notices by [@&#8203;odedperezcodes](https://github.com/odedperezcodes) in [PyGithub/PyGithub#3382](https://github.com/PyGithub/PyGithub/pull/3382) - Use default type if known type is not supported by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3365](https://github.com/PyGithub/PyGithub/pull/3365) ##### Maintenance - Deprecate `Reaction.delete` by [@&#8203;iarspider](https://github.com/iarspider) in [PyGithub/PyGithub#3435](https://github.com/PyGithub/PyGithub/pull/3435) - Deprecate `Issue.assignee` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3366](https://github.com/PyGithub/PyGithub/pull/3366) - Deprecate `Orginization.edit_hook` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3404](https://github.com/PyGithub/PyGithub/pull/3404) - Deprecate `Team.add_to_members` and `Team.remove_from_members` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3368](https://github.com/PyGithub/PyGithub/pull/3368) - Various minor OpenAPI fixes by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3375](https://github.com/PyGithub/PyGithub/pull/3375) - Update test key pair by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3453](https://github.com/PyGithub/PyGithub/pull/3453) - Pin CI lint Python version to 3.13 by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3406](https://github.com/PyGithub/PyGithub/pull/3406) - Improve error message on replay data mismatch by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3385](https://github.com/PyGithub/PyGithub/pull/3385) and [PyGithub/PyGithub#3386](https://github.com/PyGithub/PyGithub/pull/3386) - Disable sleeps in tests by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3383](https://github.com/PyGithub/PyGithub/pull/3383) - Update autodoc defaults by [@&#8203;Aidan-McNay](https://github.com/Aidan-McNay) in [PyGithub/PyGithub#3369](https://github.com/PyGithub/PyGithub/pull/3369) - Add Python 3.14 to CI and tox by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3429](https://github.com/PyGithub/PyGithub/pull/3429) - Restrict PyPi release workflow permissions by [@&#8203;JLLeitschuh](https://github.com/JLLeitschuh) in [PyGithub/PyGithub#3418](https://github.com/PyGithub/PyGithub/pull/3418) - Fix OpenApi workflow by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3389](https://github.com/PyGithub/PyGithub/pull/3389) - Bump codecov/codecov-action from 3 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3284](https://github.com/PyGithub/PyGithub/pull/3284) - Bump actions/setup-python from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3370](https://github.com/PyGithub/PyGithub/pull/3370) - Bump dawidd6/action-download-artifact from 3.0.0 to 3.1.4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3282](https://github.com/PyGithub/PyGithub/pull/3282) - Bump github/codeql-action from 3 to 4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3391](https://github.com/PyGithub/PyGithub/pull/3391) - Bump actions/upload-artifact from 4 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3394](https://github.com/PyGithub/PyGithub/pull/3394) - Bump actions/download-artifact from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3393](https://github.com/PyGithub/PyGithub/pull/3393) - Drop Python 3.8 support due to EOL by [@&#8203;hugovk](https://github.com/hugovk) in [PyGithub/PyGithub#3191](https://github.com/PyGithub/PyGithub/pull/3191) - Merge changelog updates from v2.8 release branch by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3367](https://github.com/PyGithub/PyGithub/pull/3367) #### New Contributors - [@&#8203;odedperezcodes](https://github.com/odedperezcodes) made their first contribution in [PyGithub/PyGithub#3382](https://github.com/PyGithub/PyGithub/pull/3382) - [@&#8203;Aidan-McNay](https://github.com/Aidan-McNay) made their first contribution in [PyGithub/PyGithub#3369](https://github.com/PyGithub/PyGithub/pull/3369) - [@&#8203;nrysk](https://github.com/nrysk) made their first contribution in [PyGithub/PyGithub#3381](https://github.com/PyGithub/PyGithub/pull/3381) - [@&#8203;matt-davis27](https://github.com/matt-davis27) made their first contribution in [PyGithub/PyGithub#3307](https://github.com/PyGithub/PyGithub/pull/3307) **Full Changelog**: <https://github.com/PyGithub/PyGithub/compare/v2.8.0...v2.9.0> ### [`v2.8.1`](https://github.com/PyGithub/PyGithub/releases/tag/v2.8.1) [Compare Source](https://github.com/pygithub/pygithub/compare/v2.8.0...v2.8.1) #### What's Changed ##### Bug Fixes - Use default type if known type is not supported by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3365](https://github.com/PyGithub/PyGithub/pull/3365) **Full Changelog**: <https://github.com/PyGithub/PyGithub/compare/v2.8.0...v2.8.1> ### [`v2.8.0`](https://github.com/PyGithub/PyGithub/releases/tag/v2.8.0) [Compare Source](https://github.com/pygithub/pygithub/compare/v2.7.0...v2.8.0) #### What's Changed ##### New Features - Add self hosted runner management to Organization by [@&#8203;billnapier](https://github.com/billnapier) in [PyGithub/PyGithub#3203](https://github.com/PyGithub/PyGithub/pull/3203) - Add support to generate release notes by [@&#8203;mball-agathos](https://github.com/mball-agathos) in [PyGithub/PyGithub#3022](https://github.com/PyGithub/PyGithub/pull/3022) ##### Improvements - Fix connection pooling to improve connection performance by [@&#8203;chriskuehl](https://github.com/chriskuehl) in [PyGithub/PyGithub#3289](https://github.com/PyGithub/PyGithub/pull/3289) - Add `Repository.get_automated_security_fixes` method by [@&#8203;zstyblik](https://github.com/zstyblik) in [PyGithub/PyGithub#3303](https://github.com/PyGithub/PyGithub/pull/3303) - Sync `Issue` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3338](https://github.com/PyGithub/PyGithub/pull/3338) - Return more union classes like `NamedUser | Organization | Enterprise` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3224](https://github.com/PyGithub/PyGithub/pull/3224) - Sync `Enterprise` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3342](https://github.com/PyGithub/PyGithub/pull/3342) - Sync `GitReleaseAsset` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3343](https://github.com/PyGithub/PyGithub/pull/3343) - Sync many class with OpenAPI spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3344](https://github.com/PyGithub/PyGithub/pull/3344) - Point deprecation warnings to the caller code rather than inner class by [@&#8203;xmo-odoo](https://github.com/xmo-odoo) in [PyGithub/PyGithub#3275](https://github.com/PyGithub/PyGithub/pull/3275) - Allow for repo strings in all `Team` repo methods by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3356](https://github.com/PyGithub/PyGithub/pull/3356) ##### Bug Fixes - Fix API path of `Repository.get_git_ref` by [@&#8203;csalerno-asml](https://github.com/csalerno-asml) in [PyGithub/PyGithub#2992](https://github.com/PyGithub/PyGithub/pull/2992) - Rework redirection URL allowance check by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3329](https://github.com/PyGithub/PyGithub/pull/3329) - Fix `GitRelease.name`, deprecate `GitRelease.title` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3346](https://github.com/PyGithub/PyGithub/pull/3346) - Remove `"COMMENT"` as the default event for `create_review` by [@&#8203;eddie-santos](https://github.com/eddie-santos) in [PyGithub/PyGithub#3078](https://github.com/PyGithub/PyGithub/pull/3078) - Add support for public release assets by [@&#8203;aolieman](https://github.com/aolieman) in [PyGithub/PyGithub#3339](https://github.com/PyGithub/PyGithub/pull/3339) - Fix GitHub breaking API change of `maintainers` in `Organization.create_team` by [@&#8203;interifter](https://github.com/interifter) in [PyGithub/PyGithub#3291](https://github.com/PyGithub/PyGithub/pull/3291) ##### Maintenance - Minor fix to release.yml by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3201](https://github.com/PyGithub/PyGithub/pull/3201) - Reduce test replay data by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3243](https://github.com/PyGithub/PyGithub/pull/3243) - Add check to OpenAPI script to check doc-string verbs by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3332](https://github.com/PyGithub/PyGithub/pull/3332) - Improve apply OpenAPI schemas by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3333](https://github.com/PyGithub/PyGithub/pull/3333) - Add config to OpenAPI script to ignore schemas by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3334](https://github.com/PyGithub/PyGithub/pull/3334) - Add suggest and create method feature to OpenAPI script by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3318](https://github.com/PyGithub/PyGithub/pull/3318) - Fix CI OpenApi apply command by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3341](https://github.com/PyGithub/PyGithub/pull/3341) - Improve OpenAPI scripts by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3340](https://github.com/PyGithub/PyGithub/pull/3340) - Improve OpenAPI CI by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3347](https://github.com/PyGithub/PyGithub/pull/3347) - Rework test framework by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3271](https://github.com/PyGithub/PyGithub/pull/3271) - Some minor fixes to OpenAPI scripts by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3350](https://github.com/PyGithub/PyGithub/pull/3350) - Add manual workflow to fix auto-fixable issues by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3351](https://github.com/PyGithub/PyGithub/pull/3351) - Bump actions/download-artifact from 4 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3330](https://github.com/PyGithub/PyGithub/pull/3330) - Use default per-page const in `PaginatedList` by [@&#8203;sam93210](https://github.com/sam93210) in [PyGithub/PyGithub#3039](https://github.com/PyGithub/PyGithub/pull/3039) - Bump actions/setup-python from 4 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3283](https://github.com/PyGithub/PyGithub/pull/3283) - Bump actions/checkout from 3 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#3348](https://github.com/PyGithub/PyGithub/pull/3348) - Various minor OpenAPI scripts fixes by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3353](https://github.com/PyGithub/PyGithub/pull/3353) - Add union class support to OpenAPI script by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3354](https://github.com/PyGithub/PyGithub/pull/3354) - Add `github_actions` label to Maintenance section by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3357](https://github.com/PyGithub/PyGithub/pull/3357) - Upgrade docformatter pre-commit hook by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3359](https://github.com/PyGithub/PyGithub/pull/3359) - Add warning about Checks API in doc-strings by [@&#8203;atodorov](https://github.com/atodorov) in [PyGithub/PyGithub#3229](https://github.com/PyGithub/PyGithub/pull/3229) - Update docs on development by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3352](https://github.com/PyGithub/PyGithub/pull/3352) #### New Contributors - [@&#8203;chriskuehl](https://github.com/chriskuehl) made their first contribution in [PyGithub/PyGithub#3289](https://github.com/PyGithub/PyGithub/pull/3289) - [@&#8203;zstyblik](https://github.com/zstyblik) made their first contribution in [PyGithub/PyGithub#3303](https://github.com/PyGithub/PyGithub/pull/3303) - [@&#8203;csalerno-asml](https://github.com/csalerno-asml) made their first contribution in [PyGithub/PyGithub#2992](https://github.com/PyGithub/PyGithub/pull/2992) - [@&#8203;eddie-santos](https://github.com/eddie-santos) made their first contribution in [PyGithub/PyGithub#3078](https://github.com/PyGithub/PyGithub/pull/3078) - [@&#8203;aolieman](https://github.com/aolieman) made their first contribution in [PyGithub/PyGithub#3339](https://github.com/PyGithub/PyGithub/pull/3339) - [@&#8203;sam93210](https://github.com/sam93210) made their first contribution in [PyGithub/PyGithub#3039](https://github.com/PyGithub/PyGithub/pull/3039) - [@&#8203;mball-agathos](https://github.com/mball-agathos) made their first contribution in [PyGithub/PyGithub#3022](https://github.com/PyGithub/PyGithub/pull/3022) - [@&#8203;atodorov](https://github.com/atodorov) made their first contribution in [PyGithub/PyGithub#3229](https://github.com/PyGithub/PyGithub/pull/3229) - [@&#8203;interifter](https://github.com/interifter) made their first contribution in [PyGithub/PyGithub#3291](https://github.com/PyGithub/PyGithub/pull/3291) **Full Changelog**: <https://github.com/PyGithub/PyGithub/compare/v2.7.0...v2.8.0> ### [`v2.7.0`](https://github.com/PyGithub/PyGithub/releases/tag/v2.7.0) [Compare Source](https://github.com/pygithub/pygithub/compare/v2.6.1...v2.7.0) #### What's Changed ##### Breaking Changes - Method `Github.get_rate_limit()` now returns `RateLimitOverview` rather than `RateLimit` ([PyGithub/PyGithub#3205](https://github.com/PyGithub/PyGithub/pull/3205)). Code like ```python gh.get_rate_limit().core.remaining ``` should be replaced with ```python gh.get_rate_limit().resources.core.remaining ``` - Method `GitTag.verification` now returns `GitCommitVerification` rather than `dict[str, Any]` ([PyGithub/PyGithub#3226](https://github.com/PyGithub/PyGithub/pull/3226)). Code like ```python tag.verification["reason"] tag.verification.get("reason") ``` should be replaced with ```python tag.verification.reason ``` ##### New Features - Add getting list of self-hosted runners of organization by [@&#8203;climbfuji](https://github.com/climbfuji) in [PyGithub/PyGithub#3190](https://github.com/PyGithub/PyGithub/pull/3190) - Apply OpenAPI spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3317](https://github.com/PyGithub/PyGithub/pull/3317) - Add support for Sub-Issues by [@&#8203;e7217](https://github.com/e7217) in [PyGithub/PyGithub#3258](https://github.com/PyGithub/PyGithub/pull/3258) ##### Improvements - Refactor search results into separate classes by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3204](https://github.com/PyGithub/PyGithub/pull/3204) - Add `OrganizationInvitation` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3207](https://github.com/PyGithub/PyGithub/pull/3207) - Add and apply missing schemas by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3209](https://github.com/PyGithub/PyGithub/pull/3209) - Sync `RepositoryAdvisory` tests with OpenAPI spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3215](https://github.com/PyGithub/PyGithub/pull/3215) - Sync `ProjectColumn` and `ProjectCard` tests with OpenAPI spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3216](https://github.com/PyGithub/PyGithub/pull/3216) - Sync `CopilotSeat` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3232](https://github.com/PyGithub/PyGithub/pull/3232) - Sync `HookDeliverySummary` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3233](https://github.com/PyGithub/PyGithub/pull/3233) - Sync `RequiredPullRequestReviews` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3234](https://github.com/PyGithub/PyGithub/pull/3234) - Sync `RequiredStatusChecks` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3236](https://github.com/PyGithub/PyGithub/pull/3236) - Sync `Team` class with API spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3237](https://github.com/PyGithub/PyGithub/pull/3237) - Replace `deprecated.deprecated()` with `typing_extensions.deprecated()` by [@&#8203;lazka](https://github.com/lazka) in [PyGithub/PyGithub#3255](https://github.com/PyGithub/PyGithub/pull/3255) - fix(CodeScanAlert): add missing attributes by [@&#8203;ReenigneArcher](https://github.com/ReenigneArcher) in [PyGithub/PyGithub#3274](https://github.com/PyGithub/PyGithub/pull/3274) - Allow SHAs when creating PR comments by [@&#8203;tuchfarber](https://github.com/tuchfarber) in [PyGithub/PyGithub#3248](https://github.com/PyGithub/PyGithub/pull/3248) - Get collaborator role name by [@&#8203;jmgate](https://github.com/jmgate) in [PyGithub/PyGithub#3295](https://github.com/PyGithub/PyGithub/pull/3295) - Adding `prevent_self_review` property to `Repository.createEnvironment` by [@&#8203;gopidesupavan](https://github.com/gopidesupavan) in [PyGithub/PyGithub#3246](https://github.com/PyGithub/PyGithub/pull/3246) - Add `PullRequest.get_issue_timeline` method by [@&#8203;kukarkinmm](https://github.com/kukarkinmm) in [PyGithub/PyGithub#3259](https://github.com/PyGithub/PyGithub/pull/3259) - Support built-in `reversed()` on `PaginatedList` by [@&#8203;mfocko](https://github.com/mfocko) in [PyGithub/PyGithub#3260](https://github.com/PyGithub/PyGithub/pull/3260) - Relax 404 condition in `Requester` exception handling by [@&#8203;jsmolar](https://github.com/jsmolar) in [PyGithub/PyGithub#3299](https://github.com/PyGithub/PyGithub/pull/3299) - Add `delete_self_hosted_runner` to `Organization` by [@&#8203;uncleDecart](https://github.com/uncleDecart) in [PyGithub/PyGithub#3306](https://github.com/PyGithub/PyGithub/pull/3306) ##### Bug Fixes - Fix broken pickle support for `Auth` classes by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3211](https://github.com/PyGithub/PyGithub/pull/3211) - Remove schema from `Deployment`, remove `message` attribute by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3223](https://github.com/PyGithub/PyGithub/pull/3223) - Fix incorrect deprecated import by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3225](https://github.com/PyGithub/PyGithub/pull/3225) - Add `CodeSecurityConfigRepository` returned by `get_repos_for_code_security_config` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3219](https://github.com/PyGithub/PyGithub/pull/3219) - Fix `Branch.get_required_status_checks` return type by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3235](https://github.com/PyGithub/PyGithub/pull/3235) - Adds `multi_select` and `true_false` options to `CustomProperty.value_type` by [@&#8203;gfog-floqast](https://github.com/gfog-floqast) in [PyGithub/PyGithub#3173](https://github.com/PyGithub/PyGithub/pull/3173) - Fix url encoding of strings with slashes in URLs by [@&#8203;OscarVanL](https://github.com/OscarVanL) in [PyGithub/PyGithub#3263](https://github.com/PyGithub/PyGithub/pull/3263) - Fix side-effect when removing Authorization key from headers by [@&#8203;alecglen](https://github.com/alecglen) in [PyGithub/PyGithub#3313](https://github.com/PyGithub/PyGithub/pull/3313) - Make `TimingData.run_duration_ms` optional by [@&#8203;LifeLex](https://github.com/LifeLex) in [PyGithub/PyGithub#3268](https://github.com/PyGithub/PyGithub/pull/3268) - Normalize App ID to String & Enhance JWT Issuer Verification by [@&#8203;x612skm](https://github.com/x612skm) in [PyGithub/PyGithub#3272](https://github.com/PyGithub/PyGithub/pull/3272) ##### Dependencies - Bump actions/checkout from 3 to 4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [PyGithub/PyGithub#2754](https://github.com/PyGithub/PyGithub/pull/2754) ##### Maintenance - Mention removal of `AppAuth.private_key` in changelog by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3212](https://github.com/PyGithub/PyGithub/pull/3212) - Remove wrong schema from Repository by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3220](https://github.com/PyGithub/PyGithub/pull/3220) - Rename `HookDeliveryRequest` and `…Response` private headers fields by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3221](https://github.com/PyGithub/PyGithub/pull/3221) - Sort classes' functions by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3231](https://github.com/PyGithub/PyGithub/pull/3231) - Move all Python files to future annotations by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3241](https://github.com/PyGithub/PyGithub/pull/3241) - Fix return type of `PaginatedList[int]` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3240](https://github.com/PyGithub/PyGithub/pull/3240) - Sync with OpenAPI spec by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3244](https://github.com/PyGithub/PyGithub/pull/3244) - Make token auth default in tests by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3242](https://github.com/PyGithub/PyGithub/pull/3242) - Add `Organization.get_repos_for_code_security_config` test by [@&#8203;billnapier](https://github.com/billnapier) in [PyGithub/PyGithub#3239](https://github.com/PyGithub/PyGithub/pull/3239) - Add Python 3.13 to CI by [@&#8203;lazka](https://github.com/lazka) in [PyGithub/PyGithub#3253](https://github.com/PyGithub/PyGithub/pull/3253) - Enhance PyGithub webhook documentation by [@&#8203;ssganesh035](https://github.com/ssganesh035) in [PyGithub/PyGithub#3267](https://github.com/PyGithub/PyGithub/pull/3267) - Create codeql.yml by [@&#8203;JLLeitschuh](https://github.com/JLLeitschuh) in [PyGithub/PyGithub#3277](https://github.com/PyGithub/PyGithub/pull/3277) - Add schema to `TimingData` by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3206](https://github.com/PyGithub/PyGithub/pull/3206) - Remove error schemas from classes by [@&#8203;EnricoMi](https://github.com/EnricoMi) in [PyGithub/PyGithub#3202](https://github.com/PyGithub/PyGithub/pull/3202) #### New Contributors - [@&#8203;ssganesh035](https://github.com/ssganesh035) made their first contribution in [PyGithub/PyGithub#3267](https://github.com/PyGithub/PyGithub/pull/3267) - [@&#8203;ReenigneArcher](https://github.com/ReenigneArcher) made their first contribution in [PyGithub/PyGithub#3274](https://github.com/PyGithub/PyGithub/pull/3274) - [@&#8203;climbfuji](https://github.com/climbfuji) made their first contribution in [PyGithub/PyGithub#3190](https://github.com/PyGithub/PyGithub/pull/3190) - [@&#8203;tuchfarber](https://github.com/tuchfarber) made their first contribution in [PyGithub/PyGithub#3248](https://github.com/PyGithub/PyGithub/pull/3248) - [@&#8203;jmgate](https://github.com/jmgate) made their first contribution in [PyGithub/PyGithub#3295](https://github.com/PyGithub/PyGithub/pull/3295) - [@&#8203;gopidesupavan](https://github.com/gopidesupavan) made their first contribution in [PyGithub/PyGithub#3246](https://github.com/PyGithub/PyGithub/pull/3246) - [@&#8203;kukarkinmm](https://github.com/kukarkinmm) made their first contribution in [PyGithub/PyGithub#3259](https://github.com/PyGithub/PyGithub/pull/3259) - [@&#8203;mfocko](https://github.com/mfocko) made their first contribution in [PyGithub/PyGithub#3260](https://github.com/PyGithub/PyGithub/pull/3260) - [@&#8203;gfog-floqast](https://github.com/gfog-floqast) made their first contribution in [PyGithub/PyGithub#3173](https://github.com/PyGithub/PyGithub/pull/3173) - [@&#8203;jsmolar](https://github.com/jsmolar) made their first contribution in [PyGithub/PyGithub#3299](https://github.com/PyGithub/PyGithub/pull/3299) - [@&#8203;OscarVanL](https://github.com/OscarVanL) made their first contribution in [PyGithub/PyGithub#3263](https://github.com/PyGithub/PyGithub/pull/3263) - [@&#8203;alecglen](https://github.com/alecglen) made their first contribution in [PyGithub/PyGithub#3313](https://github.com/PyGithub/PyGithub/pull/3313) - [@&#8203;LifeLex](https://github.com/LifeLex) made their first contribution in [PyGithub/PyGithub#3268](https://github.com/PyGithub/PyGithub/pull/3268) - [@&#8203;e7217](https://github.com/e7217) made their first contribution in [PyGithub/PyGithub#3258](https://github.com/PyGithub/PyGithub/pull/3258) - [@&#8203;x612skm](https://github.com/x612skm) made their first contribution in [PyGithub/PyGithub#3272](https://github.com/PyGithub/PyGithub/pull/3272) - [@&#8203;uncleDecart](https://github.com/uncleDecart) made their first contribution in [PyGithub/PyGithub#3306](https://github.com/PyGithub/PyGithub/pull/3306) **Full Changelog**: <https://github.com/PyGithub/PyGithub/compare/v2.6.0...v2.7.0> </details> <details> <summary>theskumar/python-dotenv (python-dotenv)</summary> ### [`v1.2.2`](https://github.com/theskumar/python-dotenv/blob/HEAD/CHANGELOG.md#122---2026-03-01) [Compare Source](https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2) ##### Added - Support for Python 3.14, including the free-threaded (3.14t) build. ([#&#8203;588](https://github.com/theskumar/python-dotenv/issues/588)) ##### Changed - The `dotenv run` command now forwards flags directly to the specified command by \[[@&#8203;bbc2](https://github.com/bbc2)] in \[[#&#8203;607](https://github.com/theskumar/python-dotenv/issues/607)] - Improved documentation clarity regarding override behavior and the reference page. - Updated PyPy support to version 3.11. - Documentation for FIFO file support. - Dropped Support for Python 3.9. ##### Fixed - Improved `set_key` and `unset_key` behavior when interacting with symlinks by \[[@&#8203;bbc2](https://github.com/bbc2)] in \[[`790c5c0`](https://github.com/theskumar/python-dotenv/commit/790c5c0)] - Corrected the license specifier and added missing Python 3.14 classifiers in package metadata by \[[@&#8203;JYOuyang](https://github.com/JYOuyang)] in \[[#&#8203;590](https://github.com/theskumar/python-dotenv/issues/590)] ##### Breaking Changes - `dotenv.set_key` and `dotenv.unset_key` used to follow symlinks in some situations. This is no longer the case. For that behavior to be restored in all cases, `follow_symlinks=True` should be used. - In the CLI, `set` and `unset` used to follow symlinks in some situations. This is no longer the case. - `dotenv.set_key`, `dotenv.unset_key` and the CLI commands `set` and `unset` used to reset the file mode of the modified .env file to `0o600` in some situations. This is no longer the case: The original mode of the file is now preserved. Is the file needed to be created or wasn't a regular file, mode `0o600` is used. </details> <details> <summary>pypa/setuptools (setuptools)</summary> ### [`v82.0.1`](https://github.com/pypa/setuptools/compare/v82.0.0...v82.0.1) [Compare Source](https://github.com/pypa/setuptools/compare/v82.0.0...v82.0.1) ### [`v82.0.0`](https://github.com/pypa/setuptools/compare/v81.0.0...v82.0.0) [Compare Source](https://github.com/pypa/setuptools/compare/v81.0.0...v82.0.0) ### [`v81.0.0`](https://github.com/pypa/setuptools/compare/v80.10.2...v81.0.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.10.2...v81.0.0) ### [`v80.10.2`](https://github.com/pypa/setuptools/compare/v80.10.1...v80.10.2) [Compare Source](https://github.com/pypa/setuptools/compare/v80.10.1...v80.10.2) ### [`v80.10.1`](https://github.com/pypa/setuptools/compare/v80.9.0...v80.10.1) [Compare Source](https://github.com/pypa/setuptools/compare/v80.9.0...v80.10.1) ### [`v80.9.0`](https://github.com/pypa/setuptools/compare/v80.8.0...v80.9.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.8.0...v80.9.0) ### [`v80.8.0`](https://github.com/pypa/setuptools/compare/v80.7.1...v80.8.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.7.1...v80.8.0) ### [`v80.7.1`](https://github.com/pypa/setuptools/compare/v80.7.0...v80.7.1) [Compare Source](https://github.com/pypa/setuptools/compare/v80.7.0...v80.7.1) ### [`v80.7.0`](https://github.com/pypa/setuptools/compare/v80.6.0...v80.7.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.6.0...v80.7.0) ### [`v80.6.0`](https://github.com/pypa/setuptools/compare/v80.4.0...v80.6.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.4.0...v80.6.0) ### [`v80.4.0`](https://github.com/pypa/setuptools/compare/v80.3.1...v80.4.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.3.1...v80.4.0) ### [`v80.3.1`](https://github.com/pypa/setuptools/compare/v80.3.0...v80.3.1) [Compare Source](https://github.com/pypa/setuptools/compare/v80.3.0...v80.3.1) ### [`v80.3.0`](https://github.com/pypa/setuptools/compare/v80.2.0...v80.3.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.2.0...v80.3.0) ### [`v80.2.0`](https://github.com/pypa/setuptools/compare/v80.1.0...v80.2.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.1.0...v80.2.0) ### [`v80.1.0`](https://github.com/pypa/setuptools/compare/v80.0.1...v80.1.0) [Compare Source](https://github.com/pypa/setuptools/compare/v80.0.1...v80.1.0) ### [`v80.0.1`](https://github.com/pypa/setuptools/compare/v80.0.0...v80.0.1) [Compare Source](https://github.com/pypa/setuptools/compare/v80.0.0...v80.0.1) ### [`v80.0.0`](https://github.com/pypa/setuptools/compare/v79.0.1...v80.0.0) [Compare Source](https://github.com/pypa/setuptools/compare/v79.0.1...v80.0.0) ### [`v79.0.1`](https://github.com/pypa/setuptools/compare/v79.0.0...v79.0.1) [Compare Source](https://github.com/pypa/setuptools/compare/v79.0.0...v79.0.1) ### [`v79.0.0`](https://github.com/pypa/setuptools/compare/v78.1.1...v79.0.0) [Compare Source](https://github.com/pypa/setuptools/compare/v78.1.1...v79.0.0) ### [`v78.1.1`](https://github.com/pypa/setuptools/compare/v78.1.0...v78.1.1) [Compare Source](https://github.com/pypa/setuptools/compare/v78.1.0...v78.1.1) ### [`v78.1.0`](https://github.com/pypa/setuptools/compare/v78.0.2...v78.1.0) [Compare Source](https://github.com/pypa/setuptools/compare/v78.0.2...v78.1.0) ### [`v78.0.2`](https://github.com/pypa/setuptools/compare/v78.0.1...v78.0.2) [Compare Source](https://github.com/pypa/setuptools/compare/v78.0.1...v78.0.2) ### [`v78.0.1`](https://github.com/pypa/setuptools/compare/v77.0.3...v78.0.1) [Compare Source](https://github.com/pypa/setuptools/compare/v77.0.3...v78.0.1) ### [`v77.0.3`](https://github.com/pypa/setuptools/compare/v77.0.1...v77.0.3) [Compare Source](https://github.com/pypa/setuptools/compare/v77.0.1...v77.0.3) ### [`v77.0.1`](https://github.com/pypa/setuptools/compare/v76.1.0...v77.0.1) [Compare Source](https://github.com/pypa/setuptools/compare/v76.1.0...v77.0.1) ### [`v76.1.0`](https://github.com/pypa/setuptools/compare/v76.0.0...v76.1.0) [Compare Source](https://github.com/pypa/setuptools/compare/v76.0.0...v76.1.0) ### [`v76.0.0`](https://github.com/pypa/setuptools/compare/v75.9.1...v76.0.0) [Compare Source](https://github.com/pypa/setuptools/compare/v75.9.1...v76.0.0) ### [`v75.9.1`](https://github.com/pypa/setuptools/compare/v75.9.0...v75.9.1) [Compare Source](https://github.com/pypa/setuptools/compare/v75.9.0...v75.9.1) ### [`v75.9.0`](https://github.com/pypa/setuptools/compare/v75.8.2...v75.9.0) [Compare Source](https://github.com/pypa/setuptools/compare/v75.8.2...v75.9.0) ### [`v75.8.2`](https://github.com/pypa/setuptools/compare/v75.8.1...v75.8.2) [Compare Source](https://github.com/pypa/setuptools/compare/v75.8.1...v75.8.2) ### [`v75.8.1`](https://github.com/pypa/setuptools/compare/v75.8.0...v75.8.1) [Compare Source](https://github.com/pypa/setuptools/compare/v75.8.0...v75.8.1) ### [`v75.8.0`](https://github.com/pypa/setuptools/compare/v75.7.0...v75.8.0) [Compare Source](https://github.com/pypa/setuptools/compare/v75.7.0...v75.8.0) ### [`v75.7.0`](https://github.com/pypa/setuptools/compare/v75.6.0...v75.7.0) [Compare Source](https://github.com/pypa/setuptools/compare/v75.6.0...v75.7.0) </details> <details> <summary>pypa/virtualenv (virtualenv)</summary> ### [`v21.3.0`](https://github.com/pypa/virtualenv/releases/tag/21.3.0) [Compare Source](https://github.com/pypa/virtualenv/compare/21.2.4...21.3.0) <!-- Release notes generated using configuration in .github/release.yaml at 21.3.0 --> ##### What's Changed - 🐛 fix(type): stop ty flagging default\_source on Action by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3124](https://github.com/pypa/virtualenv/pull/3124) - feat: Reintroduce xonsh shell support by [@&#8203;anki-code](https://github.com/anki-code) in [#&#8203;3125](https://github.com/pypa/virtualenv/pull/3125) - 🐛 fix(test): prevent PowerShell activation test from crashing xdist workers on Windows by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3128](https://github.com/pypa/virtualenv/pull/3128) - docs: Add usage instruction for Xonsh activation by [@&#8203;anki-code](https://github.com/anki-code) in [#&#8203;3130](https://github.com/pypa/virtualenv/pull/3130) - Upgrade embedded pip/setuptools/wheel by [@&#8203;github-actions](https://github.com/github-actions)\[bot] in [#&#8203;3132](https://github.com/pypa/virtualenv/pull/3132) ##### New Contributors - [@&#8203;anki-code](https://github.com/anki-code) made their first contribution in [#&#8203;3125](https://github.com/pypa/virtualenv/pull/3125) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/21.2.4...21.3.0> ### [`v21.2.4`](https://github.com/pypa/virtualenv/releases/tag/21.2.4) [Compare Source](https://github.com/pypa/virtualenv/compare/21.2.3...21.2.4) <!-- Release notes generated using configuration in .github/release.yaml at 21.2.4 --> ##### What's Changed - 🐛 fix(periodic-update): refuse unverified HTTPS to PyPI by default by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3122](https://github.com/pypa/virtualenv/pull/3122) - 🐛 fix(zipapp): enforce ROOT containment with Path.relative\_to by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3121](https://github.com/pypa/virtualenv/pull/3121) - 🐛 fix(seed): validate distribution and version before pip download by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3120](https://github.com/pypa/virtualenv/pull/3120) - 🐛 fix(seed): verify sha256 of bundled wheels on load by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3119](https://github.com/pypa/virtualenv/pull/3119) - 🐛 fix(seed): validate wheel zip entries before extraction by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3118](https://github.com/pypa/virtualenv/pull/3118) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/21.2.3...21.2.4> ### [`v21.2.3`](https://github.com/pypa/virtualenv/releases/tag/21.2.3) [Compare Source](https://github.com/pypa/virtualenv/compare/21.2.2...21.2.3) <!-- Release notes generated using configuration in .github/release.yaml at 21.2.3 --> **Full Changelog**: <https://github.com/pypa/virtualenv/compare/21.2.2...21.2.3> ### [`v21.2.2`](https://github.com/pypa/virtualenv/releases/tag/21.2.2) [Compare Source](https://github.com/pypa/virtualenv/compare/21.2.1...21.2.2) <!-- Release notes generated using configuration in .github/release.yaml at 21.2.2 --> ##### What's Changed - bump python-discovery minimum to 1.2.2 by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3117](https://github.com/pypa/virtualenv/pull/3117) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/21.2.1...21.2.2> ### [`v21.2.1`](https://github.com/pypa/virtualenv/releases/tag/21.2.1) [Compare Source](https://github.com/pypa/virtualenv/compare/21.2.0...21.2.1) <!-- Release notes generated using configuration in .github/release.yaml at 21.2.1 --> ##### What's Changed - Upgrade embedded pip/setuptools/wheel by [@&#8203;github-actions](https://github.com/github-actions)\[bot] in [#&#8203;3093](https://github.com/pypa/virtualenv/pull/3093) - Enhance upgrade workflow: age check, dedup, issue tracking by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3094](https://github.com/pypa/virtualenv/pull/3094) - 🐛 fix(create): use commonpath for correct path validation by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3097](https://github.com/pypa/virtualenv/pull/3097) - 🔒 ci(workflows): add zizmor security auditing by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3099](https://github.com/pypa/virtualenv/pull/3099) - Add current and previous maintainers by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3101](https://github.com/pypa/virtualenv/pull/3101) - 🔧 fix(ci): restore git credentials for release and upgrade jobs by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3102](https://github.com/pypa/virtualenv/pull/3102) - Fix broken Installation link in README by [@&#8203;Bahtya](https://github.com/Bahtya) in [#&#8203;3106](https://github.com/pypa/virtualenv/pull/3106) - fix: use terminal width for help formatting instead of hardcoded 240 by [@&#8203;Bahtya](https://github.com/Bahtya) in [#&#8203;3110](https://github.com/pypa/virtualenv/pull/3110) - 🐛 fix(nushell): surface actionable hint in deactivate error output by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3112](https://github.com/pypa/virtualenv/pull/3112) - 👷 ci: fix setup-uv warnings and drop brew\@&#8203;3.9 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3113](https://github.com/pypa/virtualenv/pull/3113) - fix(ci): fix pre-release push and release note generation by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3114](https://github.com/pypa/virtualenv/pull/3114) - fix(ci): check out repo in publish job for gh release notes by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3115](https://github.com/pypa/virtualenv/pull/3115) ##### New Contributors - [@&#8203;github-actions](https://github.com/github-actions)\[bot] made their first contribution in [#&#8203;3093](https://github.com/pypa/virtualenv/pull/3093) - [@&#8203;Bahtya](https://github.com/Bahtya) made their first contribution in [#&#8203;3106](https://github.com/pypa/virtualenv/pull/3106) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/21.2.0...21.2.1> ### [`v21.2.0`](https://github.com/pypa/virtualenv/releases/tag/21.2.0) [Compare Source](https://github.com/pypa/virtualenv/compare/21.1.0...21.2.0) <!-- Release notes generated using configuration in .github/release.yaml at 21.2.0 --> ##### What's Changed - Move SECURITY.md to .github/SECURITY.md by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3077](https://github.com/pypa/virtualenv/pull/3077) - Standardize .github files to .yaml suffix by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3079](https://github.com/pypa/virtualenv/pull/3079) - Add type annotations to embed wheel generator output by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3085](https://github.com/pypa/virtualenv/pull/3085) - fix broken README heading introduced in docs restructure by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3088](https://github.com/pypa/virtualenv/pull/3088) - 🐛 fix(bash): use BASH\_SOURCE in activate relocation by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3091](https://github.com/pypa/virtualenv/pull/3091) - 🐛 fix(create): prevent venv from racing virtualenv on gitignore creation by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3092](https://github.com/pypa/virtualenv/pull/3092) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/21.1.0...21.2.0> ### [`v21.1.0`](https://github.com/pypa/virtualenv/releases/tag/21.1.0) [Compare Source](https://github.com/pypa/virtualenv/compare/21.0.0...21.1.0) <!-- Release notes generated using configuration in .github/release.yml at 21.1.0 --> ##### What's Changed - add comprehensive type annotations across the entire codebase by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3076](https://github.com/pypa/virtualenv/pull/3076) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/21.0.0...21.1.0> ### [`v21.0.0`](https://github.com/pypa/virtualenv/releases/tag/21.0.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.39.1...21.0.0) <!-- Release notes generated using configuration in .github/release.yml at 21.0.0 --> ##### What's Changed - ♻️ refactor(discovery): extract py\_discovery as self-contained package by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3070](https://github.com/pypa/virtualenv/pull/3070) - 📝 docs(changelog): add removal entry for python-discovery extraction by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3074](https://github.com/pypa/virtualenv/pull/3074) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.39.1...21.0.0> ### [`v20.39.1`](https://github.com/pypa/virtualenv/releases/tag/20.39.1) [Compare Source](https://github.com/pypa/virtualenv/compare/20.39.0...20.39.1) <!-- Release notes generated using configuration in .github/release.yml at 20.39.1 --> ##### What's Changed - Align dependency versions across projects by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3069](https://github.com/pypa/virtualenv/pull/3069) - ✨ feat(create): add RustPython support by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3071](https://github.com/pypa/virtualenv/pull/3071) - 🐛 fix(create): add pythonw3.exe to Windows venvs by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3073](https://github.com/pypa/virtualenv/pull/3073) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.39.0...20.39.1> ### [`v20.39.0`](https://github.com/pypa/virtualenv/releases/tag/20.39.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.38.0...20.39.0) <!-- Release notes generated using configuration in .github/release.yml at 20.39.0 --> ##### What's Changed - Move from extras to dependency-groups by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3056](https://github.com/pypa/virtualenv/pull/3056) - 🐛 fix(sdist): include tox.toml in sdist by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3063](https://github.com/pypa/virtualenv/pull/3063) - 🐛 fix(seed): add --ignore-installed to pip invoke seeder by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3064](https://github.com/pypa/virtualenv/pull/3064) - 👷 ci(brew): add missing Homebrew Python versions and fix discovery by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3066](https://github.com/pypa/virtualenv/pull/3066) - 🧪 test(discovery): fix test\_py\_info\_cache\_clear outside venv by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3065](https://github.com/pypa/virtualenv/pull/3065) - Add architecture (ISA) awareness to Python discovery by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3058](https://github.com/pypa/virtualenv/pull/3058) - 🐛 fix(discovery): resolve version-manager shims to real binaries by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3067](https://github.com/pypa/virtualenv/pull/3067) - Add auto-upgrade workflow for embedded dependencies by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3057](https://github.com/pypa/virtualenv/pull/3057) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.38.0...20.39.0> ### [`v20.38.0`](https://github.com/pypa/virtualenv/releases/tag/20.38.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.36.1...20.38.0) <!-- Release notes generated using configuration in .github/release.yml at 20.38.0 --> ##### What's Changed - Fix Windows activation scripts to handle Python paths with spaces by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3015](https://github.com/pypa/virtualenv/pull/3015) - Exclude pywintypes\*.dll and pythoncom\*.dll from being copied to Scripts directory by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3012](https://github.com/pypa/virtualenv/pull/3012) - update `Automated testing` documentation section by [@&#8203;elmjag](https://github.com/elmjag) in [#&#8203;3016](https://github.com/pypa/virtualenv/pull/3016) - Preserver Symlinks in pyvenv.cfg paths by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3022](https://github.com/pypa/virtualenv/pull/3022) - Add `PKG_CONFIG_PATH` environment variable support to all activation scripts by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3023](https://github.com/pypa/virtualenv/pull/3023) - Add ty type checker to CI via tox by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3025](https://github.com/pypa/virtualenv/pull/3025) - Upgrade embedded dependencies by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3026](https://github.com/pypa/virtualenv/pull/3026) - Fix ty Type Narrowing by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3030](https://github.com/pypa/virtualenv/pull/3030) - Replace ty: ignore with proper type declarations for inheritance patterns by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3034](https://github.com/pypa/virtualenv/pull/3034) - Use user\_cache\_dir for app data with auto-migration from old location by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3033](https://github.com/pypa/virtualenv/pull/3033) - Fix unhelpful KeyError when using invalid VIRTUALENV\_DISCOVERY value by [@&#8203;veeceey](https://github.com/veeceey) in [#&#8203;3031](https://github.com/pypa/virtualenv/pull/3031) - ⚡ perf(test): parallelize test suite with pytest-xdist by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3035](https://github.com/pypa/virtualenv/pull/3035) - ✨ feat(create): sync with upstream CPython/PyPy venv by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3036](https://github.com/pypa/virtualenv/pull/3036) - Python3.9 dependency range correction by [@&#8203;reactive-firewall](https://github.com/reactive-firewall) in [#&#8203;3038](https://github.com/pypa/virtualenv/pull/3038) - Version bump filelock to latest by [@&#8203;reactive-firewall](https://github.com/reactive-firewall) in [#&#8203;3039](https://github.com/pypa/virtualenv/pull/3039) - Improve error message when discovery plugin is not available by [@&#8203;veeceey](https://github.com/veeceey) in [#&#8203;3032](https://github.com/pypa/virtualenv/pull/3032) - 👷 ci(release): add workflow\_dispatch release with zipapp and get-virtualenv by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3040](https://github.com/pypa/virtualenv/pull/3040) - 📝 docs: restructure to follow Diataxis framework by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3041](https://github.com/pypa/virtualenv/pull/3041) - 👷 ci(release): split into release and tag-triggered publish by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3042](https://github.com/pypa/virtualenv/pull/3042) - Fix bash activate PKG\_CONFIG\_PATH unbound variable under bash -u by [@&#8203;Fridayai700](https://github.com/Fridayai700) in [#&#8203;3047](https://github.com/pypa/virtualenv/pull/3047) - 🐛 fix(discovery): harden subprocess interrogation and test reliability by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3054](https://github.com/pypa/virtualenv/pull/3054) - 🔧 chore(tox): migrate tox.ini to tox.toml by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3050](https://github.com/pypa/virtualenv/pull/3050) ##### New Contributors - [@&#8203;elmjag](https://github.com/elmjag) made their first contribution in [#&#8203;3016](https://github.com/pypa/virtualenv/pull/3016) - [@&#8203;veeceey](https://github.com/veeceey) made their first contribution in [#&#8203;3031](https://github.com/pypa/virtualenv/pull/3031) - [@&#8203;reactive-firewall](https://github.com/reactive-firewall) made their first contribution in [#&#8203;3038](https://github.com/pypa/virtualenv/pull/3038) - [@&#8203;Fridayai700](https://github.com/Fridayai700) made their first contribution in [#&#8203;3047](https://github.com/pypa/virtualenv/pull/3047) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.37.0...20.38.0> ### [`v20.36.1`](https://github.com/pypa/virtualenv/compare/20.36.0...20.36.1) [Compare Source](https://github.com/pypa/virtualenv/compare/20.36.0...20.36.1) ### [`v20.36.0`](https://github.com/pypa/virtualenv/releases/tag/20.36.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.35.4...20.36.0) <!-- Release notes generated using configuration in .github/release.yml at 20.36.0 --> ##### What's Changed - release 20.35.3 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2981](https://github.com/pypa/virtualenv/pull/2981) - fix: Prevent NameError when accessing \_DISTUTILS\_PATCH during file ov… by [@&#8203;gracetyy](https://github.com/gracetyy) in [#&#8203;2982](https://github.com/pypa/virtualenv/pull/2982) - Upgrade pip and fix 3.15 picking old wheel by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2989](https://github.com/pypa/virtualenv/pull/2989) - release 20.35.4 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2990](https://github.com/pypa/virtualenv/pull/2990) - fix: wrong path on migrated venv by [@&#8203;sk1234567891](https://github.com/sk1234567891) in [#&#8203;2996](https://github.com/pypa/virtualenv/pull/2996) - test\_too\_many\_open\_files: assert on `errno.EMFILE` instead of `strerror` by [@&#8203;pltrz](https://github.com/pltrz) in [#&#8203;3001](https://github.com/pypa/virtualenv/pull/3001) - fix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 by [@&#8203;pythonhubdev](https://github.com/pythonhubdev) in [#&#8203;3002](https://github.com/pypa/virtualenv/pull/3002) - fix: resolve EncodingWarning in tox upgrade environment by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;3007](https://github.com/pypa/virtualenv/pull/3007) - Fix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3006](https://github.com/pypa/virtualenv/pull/3006) - Add support for PEP 440 version specifiers in the `--python` flag. by [@&#8203;rahuldevikar](https://github.com/rahuldevikar) in [#&#8203;3008](https://github.com/pypa/virtualenv/pull/3008) ##### New Contributors - [@&#8203;gracetyy](https://github.com/gracetyy) made their first contribution in [#&#8203;2982](https://github.com/pypa/virtualenv/pull/2982) - [@&#8203;sk1234567891](https://github.com/sk1234567891) made their first contribution in [#&#8203;2996](https://github.com/pypa/virtualenv/pull/2996) - [@&#8203;pltrz](https://github.com/pltrz) made their first contribution in [#&#8203;3001](https://github.com/pypa/virtualenv/pull/3001) - [@&#8203;pythonhubdev](https://github.com/pythonhubdev) made their first contribution in [#&#8203;3002](https://github.com/pypa/virtualenv/pull/3002) - [@&#8203;rahuldevikar](https://github.com/rahuldevikar) made their first contribution in [#&#8203;3006](https://github.com/pypa/virtualenv/pull/3006) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.35.3...20.36.0> ### [`v20.35.4`](https://github.com/pypa/virtualenv/releases/tag/20.35.4) [Compare Source](https://github.com/pypa/virtualenv/compare/20.35.3...20.35.4) <!-- Release notes generated using configuration in .github/release.yml at 20.35.4 --> ##### What's Changed - release 20.35.3 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2981](https://github.com/pypa/virtualenv/pull/2981) - fix: Prevent NameError when accessing \_DISTUTILS\_PATCH during file ov… by [@&#8203;gracetyy](https://github.com/gracetyy) in [#&#8203;2982](https://github.com/pypa/virtualenv/pull/2982) - Upgrade pip and fix 3.15 picking old wheel by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2989](https://github.com/pypa/virtualenv/pull/2989) ##### New Contributors - [@&#8203;gracetyy](https://github.com/gracetyy) made their first contribution in [#&#8203;2982](https://github.com/pypa/virtualenv/pull/2982) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.35.3...20.35.4> ### [`v20.35.3`](https://github.com/pypa/virtualenv/releases/tag/20.35.3) [Compare Source](https://github.com/pypa/virtualenv/compare/20.35.2...20.35.3) <!-- Release notes generated using configuration in .github/release.yml at 20.35.3 --> #### What's Changed - release 20.35.1 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2976](https://github.com/pypa/virtualenv/pull/2976) - Revert out effort to extract discovery by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2978](https://github.com/pypa/virtualenv/pull/2978) - release 20.35.2 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2980](https://github.com/pypa/virtualenv/pull/2980) - test\_too\_many\_open\_files fails by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2979](https://github.com/pypa/virtualenv/pull/2979) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.35.1...20.35.3> ### [`v20.35.2`](https://github.com/pypa/virtualenv/releases/tag/20.35.2) [Compare Source](https://github.com/pypa/virtualenv/compare/20.35.1...20.35.2) <!-- Release notes generated using configuration in .github/release.yml at 20.35.2 --> ##### What's Changed - release 20.35.1 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2976](https://github.com/pypa/virtualenv/pull/2976) - Revert out effort to extract discovery by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2978](https://github.com/pypa/virtualenv/pull/2978) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.35.1...20.35.2> ### [`v20.35.1`](https://github.com/pypa/virtualenv/releases/tag/20.35.1) [Compare Source](https://github.com/pypa/virtualenv/compare/20.35.0...20.35.1) <!-- Release notes generated using configuration in .github/release.yml at 20.35.1 --> ##### What's Changed - release 20.34.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2954](https://github.com/pypa/virtualenv/pull/2954) - refactor: Decouple discovery module by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2956](https://github.com/pypa/virtualenv/pull/2956) - feat: ensure creation of python3.exe and python3 on Windows by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2957](https://github.com/pypa/virtualenv/pull/2957) - fix: Use getattr for tcl/tk library paths by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2945](https://github.com/pypa/virtualenv/pull/2945) - fix: Import fs\_is\_case\_sensitive absolutely in py\_info.py by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2960](https://github.com/pypa/virtualenv/pull/2960) - Declare 3.14 support by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2970](https://github.com/pypa/virtualenv/pull/2970) - release 20.35.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2971](https://github.com/pypa/virtualenv/pull/2971) - fix: Patch get\_interpreter to handle missing cache and app\_data by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2974](https://github.com/pypa/virtualenv/pull/2974) - Fix backwards incompatible changes on PythonInfo by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2975](https://github.com/pypa/virtualenv/pull/2975) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.34.0...20.35.1> ### [`v20.35.0`](https://github.com/pypa/virtualenv/releases/tag/20.35.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.34.0...20.35.0) <!-- Release notes generated using configuration in .github/release.yml at 20.35.0 --> ##### What's Changed - release 20.34.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2954](https://github.com/pypa/virtualenv/pull/2954) - refactor: Decouple discovery module by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2956](https://github.com/pypa/virtualenv/pull/2956) - feat: ensure creation of python3.exe and python3 on Windows by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2957](https://github.com/pypa/virtualenv/pull/2957) - fix: Use getattr for tcl/tk library paths by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2945](https://github.com/pypa/virtualenv/pull/2945) - fix: Import fs\_is\_case\_sensitive absolutely in py\_info.py by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2960](https://github.com/pypa/virtualenv/pull/2960) - chore(deps): bump pypa/gh-action-pypi-publish from 1.12.3 to 1.13.0 in /.github/workflows by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2964](https://github.com/pypa/virtualenv/pull/2964) - Declare 3.14 support by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2970](https://github.com/pypa/virtualenv/pull/2970) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.34.0...20.35.0> ### [`v20.34.0`](https://github.com/pypa/virtualenv/releases/tag/20.34.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.33.1...20.34.0) <!-- Release notes generated using configuration in .github/release.yml at 20.34.0 --> ##### What's Changed - release 20.33.1 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2943](https://github.com/pypa/virtualenv/pull/2943) - fix: Improve file limit test to catch SystemExit or RuntimeError by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2936](https://github.com/pypa/virtualenv/pull/2936) - feat: Abstract out caching in discovery by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2946](https://github.com/pypa/virtualenv/pull/2946) - CI: Add PyPy 3.11 to CI checks by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2934](https://github.com/pypa/virtualenv/pull/2934) - feat: Decouple `FileCache` from `py_info` by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2947](https://github.com/pypa/virtualenv/pull/2947) - feat: Remove references to py\_info from FileCache by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2948](https://github.com/pypa/virtualenv/pull/2948) - refactor: Decouple discovery from creator plugins by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2949](https://github.com/pypa/virtualenv/pull/2949) - refactor: Decouple discovery by duplicating info utils by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2951](https://github.com/pypa/virtualenv/pull/2951) - fix: Python in `PATH` takes precedence over uv-managed Pythons by [@&#8203;edgarrmondragon](https://github.com/edgarrmondragon) in [#&#8203;2952](https://github.com/pypa/virtualenv/pull/2952) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;2950](https://github.com/pypa/virtualenv/pull/2950) - Bump pip to 25.2 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2953](https://github.com/pypa/virtualenv/pull/2953) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.33.1...20.34.0> ### [`v20.33.1`](https://github.com/pypa/virtualenv/releases/tag/20.33.1) [Compare Source](https://github.com/pypa/virtualenv/compare/20.33.0...20.33.1) <!-- Release notes generated using configuration in .github/release.yml at 20.33.1 --> ##### What's Changed - release 20.33.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2929](https://github.com/pypa/virtualenv/pull/2929) - fix(test): Restore mtime of py\_info.py in test by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2938](https://github.com/pypa/virtualenv/pull/2938) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;2937](https://github.com/pypa/virtualenv/pull/2937) - fix: Correctly unpack \_get\_tcl\_tk\_libs() response in PythonInfo by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2940](https://github.com/pypa/virtualenv/pull/2940) - chore: Request shell and python details in bug reports by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2942](https://github.com/pypa/virtualenv/pull/2942) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.33.0...20.33.1> ### [`v20.33.0`](https://github.com/pypa/virtualenv/releases/tag/20.33.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.32.0...20.33.0) <!-- Release notes generated using configuration in .github/release.yml at 20.33.0 --> ##### What's Changed - release 20.32.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2908](https://github.com/pypa/virtualenv/pull/2908) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;2909](https://github.com/pypa/virtualenv/pull/2909) - Fix nushell deprecation warnings by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2910](https://github.com/pypa/virtualenv/pull/2910) - test: Use `@pytest.mark.flaky` instead of `@flaky.flaky` by [@&#8203;mgorny](https://github.com/mgorny) in [#&#8203;2911](https://github.com/pypa/virtualenv/pull/2911) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;2912](https://github.com/pypa/virtualenv/pull/2912) - fix: handle StopIteration in discovery by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2913](https://github.com/pypa/virtualenv/pull/2913) - fix: Improve symlink check and sysconfig path handling by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2914](https://github.com/pypa/virtualenv/pull/2914) - docs: Recommend specific python version for virtualenv by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2916](https://github.com/pypa/virtualenv/pull/2916) - fix: Force UTF-8 encoding for pip subprocess by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2918](https://github.com/pypa/virtualenv/pull/2918) - fix: Prevent crash on file in PATH during discovery by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2917](https://github.com/pypa/virtualenv/pull/2917) - fix: `--try-first-with` was overriding an absolute `--python` path by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2921](https://github.com/pypa/virtualenv/pull/2921) - fix 'Too many open files' error and improve error message by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2922](https://github.com/pypa/virtualenv/pull/2922) - fix(testing): Prevent logging setup when --help is passed by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2923](https://github.com/pypa/virtualenv/pull/2923) - fix cache invalidation for PythonInfo by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2925](https://github.com/pypa/virtualenv/pull/2925) - fix: Update venv redirector detection for Python 3.13 on Windows by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2920](https://github.com/pypa/virtualenv/pull/2920) - feat: Add Tcl/Tkinter support by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2928](https://github.com/pypa/virtualenv/pull/2928) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.32.0...20.33.0> ### [`v20.32.0`](https://github.com/pypa/virtualenv/releases/tag/20.32.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.31.2...20.32.0) <!-- Release notes generated using configuration in .github/release.yml at 20.32.0 --> ##### What's Changed - release 20.31.2 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2886](https://github.com/pypa/virtualenv/pull/2886) - Fix the CI by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2904](https://github.com/pypa/virtualenv/pull/2904) - activate.fish: update fish major version check by [@&#8203;r5d](https://github.com/r5d) in [#&#8203;2891](https://github.com/pypa/virtualenv/pull/2891) - Fix: Ignore missing absolute paths for python discovery by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2907](https://github.com/pypa/virtualenv/pull/2907) - Discover uv-managed Python installations by [@&#8203;edgarrmondragon](https://github.com/edgarrmondragon) in [#&#8203;2902](https://github.com/pypa/virtualenv/pull/2902) - Add warning for incorrect usage of Nushell activation script by [@&#8203;esafak](https://github.com/esafak) in [#&#8203;2906](https://github.com/pypa/virtualenv/pull/2906) - Update index.rst, compatibility section added, other subheadings created by [@&#8203;velle](https://github.com/velle) in [#&#8203;2897](https://github.com/pypa/virtualenv/pull/2897) - Bump setuptools version by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2900](https://github.com/pypa/virtualenv/pull/2900) ##### New Contributors - [@&#8203;r5d](https://github.com/r5d) made their first contribution in [#&#8203;2891](https://github.com/pypa/virtualenv/pull/2891) - [@&#8203;esafak](https://github.com/esafak) made their first contribution in [#&#8203;2907](https://github.com/pypa/virtualenv/pull/2907) - [@&#8203;edgarrmondragon](https://github.com/edgarrmondragon) made their first contribution in [#&#8203;2902](https://github.com/pypa/virtualenv/pull/2902) - [@&#8203;velle](https://github.com/velle) made their first contribution in [#&#8203;2897](https://github.com/pypa/virtualenv/pull/2897) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.31.2...20.32.0> ### [`v20.31.2`](https://github.com/pypa/virtualenv/releases/tag/20.31.2) [Compare Source](https://github.com/pypa/virtualenv/compare/20.31.1...20.31.2) <!-- Release notes generated using configuration in .github/release.yml at 20.31.2 --> ##### What's Changed - release 20.31.1 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2882](https://github.com/pypa/virtualenv/pull/2882) - Reintroduce the --wheel CLI option, even though it has no effect on Python > 3.8 by [@&#8203;hroncok](https://github.com/hroncok) in [#&#8203;2884](https://github.com/pypa/virtualenv/pull/2884) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.31.1...20.31.2> ### [`v20.31.1`](https://github.com/pypa/virtualenv/releases/tag/20.31.1) [Compare Source](https://github.com/pypa/virtualenv/compare/20.31.0...20.31.1) <!-- Release notes generated using configuration in .github/release.yml at 20.31.1 --> ##### What's Changed - release 20.31.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2879](https://github.com/pypa/virtualenv/pull/2879) - Bump setuptools and pip by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2880](https://github.com/pypa/virtualenv/pull/2880) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.31.0...20.31.1> ### [`v20.31.0`](https://github.com/pypa/virtualenv/releases/tag/20.31.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.30.0...20.31.0) <!-- Release notes generated using configuration in .github/release.yml at 20.31.0 --> ##### What's Changed - release 20.30.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2864](https://github.com/pypa/virtualenv/pull/2864) - Stop including 'wheel', setuptools 70.1 has native bdist\_wheel support by [@&#8203;stefanor](https://github.com/stefanor) in [#&#8203;2868](https://github.com/pypa/virtualenv/pull/2868) - Revert a large part of the wheel removal, to support Python 3.8 by [@&#8203;stefanor](https://github.com/stefanor) in [#&#8203;2876](https://github.com/pypa/virtualenv/pull/2876) - Fix HelpFormatter for Python 3.14 by [@&#8203;cdce8p](https://github.com/cdce8p) in [#&#8203;2878](https://github.com/pypa/virtualenv/pull/2878) - Fix get\_embed\_wheel for unknown wheels by [@&#8203;tiran](https://github.com/tiran) in [#&#8203;2877](https://github.com/pypa/virtualenv/pull/2877) ##### New Contributors - [@&#8203;cdce8p](https://github.com/cdce8p) made their first contribution in [#&#8203;2878](https://github.com/pypa/virtualenv/pull/2878) - [@&#8203;tiran](https://github.com/tiran) made their first contribution in [#&#8203;2877](https://github.com/pypa/virtualenv/pull/2877) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.30.0...20.31.0> ### [`v20.30.0`](https://github.com/pypa/virtualenv/releases/tag/20.30.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.29.3...20.30.0) <!-- Release notes generated using configuration in .github/release.yml at 20.30.0 --> ##### What's Changed - release 20.29.3 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2855](https://github.com/pypa/virtualenv/pull/2855) - Add GraalPy support by [@&#8203;timfel](https://github.com/timfel) in [#&#8203;2859](https://github.com/pypa/virtualenv/pull/2859) - Upgrade setuptools by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2863](https://github.com/pypa/virtualenv/pull/2863) ##### New Contributors - [@&#8203;timfel](https://github.com/timfel) made their first contribution in [#&#8203;2859](https://github.com/pypa/virtualenv/pull/2859) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.29.3...20.30.0> ### [`v20.29.3`](https://github.com/pypa/virtualenv/releases/tag/20.29.3) [Compare Source](https://github.com/pypa/virtualenv/compare/20.29.2...20.29.3) <!-- Release notes generated using configuration in .github/release.yml at 20.29.3 --> #### What's Changed - release 20.29.2 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2844](https://github.com/pypa/virtualenv/pull/2844) - Remove duplicate bug report template by [@&#8203;shenxianpeng](https://github.com/shenxianpeng) in [#&#8203;2850](https://github.com/pypa/virtualenv/pull/2850) - Fix debug logging interpolation by [@&#8203;tipabu](https://github.com/tipabu) in [#&#8203;2849](https://github.com/pypa/virtualenv/pull/2849) - Ignore directories in PATH that can't be opened by [@&#8203;barneygale](https://github.com/barneygale) in [#&#8203;2852](https://github.com/pypa/virtualenv/pull/2852) #### New Contributors - [@&#8203;shenxianpeng](https://github.com/shenxianpeng) made their first contribution in [#&#8203;2850](https://github.com/pypa/virtualenv/pull/2850) - [@&#8203;tipabu](https://github.com/tipabu) made their first contribution in [#&#8203;2849](https://github.com/pypa/virtualenv/pull/2849) - [@&#8203;barneygale](https://github.com/barneygale) made their first contribution in [#&#8203;2852](https://github.com/pypa/virtualenv/pull/2852) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.29.2...20.29.3> ### [`v20.29.2`](https://github.com/pypa/virtualenv/releases/tag/20.29.2) [Compare Source](https://github.com/pypa/virtualenv/compare/20.29.1...20.29.2) <!-- Release notes generated using configuration in .github/release.yml at 20.29.2 --> ##### What's Changed - release 20.29.1 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2828](https://github.com/pypa/virtualenv/pull/2828) - Remove old virtualenv wheel by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2842](https://github.com/pypa/virtualenv/pull/2842) - Bump pip to 25.0.1 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2843](https://github.com/pypa/virtualenv/pull/2843) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.29.1...20.29.2> ### [`v20.29.1`](https://github.com/pypa/virtualenv/releases/tag/20.29.1) [Compare Source](https://github.com/pypa/virtualenv/compare/20.29.0...20.29.1) <!-- Release notes generated using configuration in .github/release.yml at 20.29.1 --> ##### What's Changed - release 20.29.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2824](https://github.com/pypa/virtualenv/pull/2824) - Simplify Solution to --python command-line flag precedence by [@&#8203;DK96-OS](https://github.com/DK96-OS) in [#&#8203;2826](https://github.com/pypa/virtualenv/pull/2826) - Change PyInfo cache versioning mechanism by [@&#8203;robsdedude](https://github.com/robsdedude) in [#&#8203;2827](https://github.com/pypa/virtualenv/pull/2827) ##### New Contributors - [@&#8203;DK96-OS](https://github.com/DK96-OS) made their first contribution in [#&#8203;2826](https://github.com/pypa/virtualenv/pull/2826) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.29.0...20.29.1> ### [`v20.29.0`](https://github.com/pypa/virtualenv/releases/tag/20.29.0) [Compare Source](https://github.com/pypa/virtualenv/compare/20.28.1...20.29.0) <!-- Release notes generated using configuration in .github/release.yml at 20.29.0 --> ##### What's Changed - release 20.28.1 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2818](https://github.com/pypa/virtualenv/pull/2818) - Makes --python command-line flag take precedence over env var by [@&#8203;filiplajszczak](https://github.com/filiplajszczak) in [#&#8203;2821](https://github.com/pypa/virtualenv/pull/2821) - Add free-threaded Python support by [@&#8203;robsdedude](https://github.com/robsdedude) in [#&#8203;2809](https://github.com/pypa/virtualenv/pull/2809) - Upgrade embeded setuptools by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2823](https://github.com/pypa/virtualenv/pull/2823) ##### New Contributors - [@&#8203;filiplajszczak](https://github.com/filiplajszczak) made their first contribution in [#&#8203;2821](https://github.com/pypa/virtualenv/pull/2821) - [@&#8203;robsdedude](https://github.com/robsdedude) made their first contribution in [#&#8203;2809](https://github.com/pypa/virtualenv/pull/2809) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.28.1...20.29.0> ### [`v20.28.1`](https://github.com/pypa/virtualenv/releases/tag/20.28.1) [Compare Source](https://github.com/pypa/virtualenv/compare/20.28.0...20.28.1) <!-- Release notes generated using configuration in .github/release.yml at 20.28.1 --> ##### What's Changed - release 20.28.0 by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2807](https://github.com/pypa/virtualenv/pull/2807) - Skip tcsh tests on broken tcsh versions by [@&#8203;gaborbernat](https://github.com/gaborbernat) in [#&#8203;2817](https://github.com/pypa/virtualenv/pull/2817) **Full Changelog**: <https://github.com/pypa/virtualenv/compare/20.28.0...20.28.1> </details> <details> <summary>pogzyb/whodap (whodap)</summary> ### [`v0.1.16`](https://github.com/pogzyb/whodap/releases/tag/v0.1.16) [Compare Source](https://github.com/pogzyb/whodap/compare/v0.1.15...v0.1.16) ##### What's Changed - add py.typed by [@&#8203;maarten-boot](https://github.com/maarten-boot) in [#&#8203;47](https://github.com/pogzyb/whodap/pull/47) - Release 0.1.16 by [@&#8203;pogzyb](https://github.com/pogzyb) in [#&#8203;48](https://github.com/pogzyb/whodap/pull/48) **Full Changelog**: <https://github.com/pogzyb/whodap/compare/v0.1.15...v0.1.16> ### [`v0.1.15`](https://github.com/pogzyb/whodap/releases/tag/v0.1.15) [Compare Source](https://github.com/pogzyb/whodap/compare/v0.1.14...v0.1.15) ##### What's Changed - proposal: modernize to >=py3.10, ruff format + check and mypy. by [@&#8203;maarten-boot](https://github.com/maarten-boot) in [#&#8203;45](https://github.com/pogzyb/whodap/pull/45) - Release 0.1.15 by [@&#8203;pogzyb](https://github.com/pogzyb) in [#&#8203;46](https://github.com/pogzyb/whodap/pull/46) ##### New Contributors - [@&#8203;maarten-boot](https://github.com/maarten-boot) made their first contribution in [#&#8203;45](https://github.com/pogzyb/whodap/pull/45) **Full Changelog**: <https://github.com/pogzyb/whodap/compare/v0.1.14...v0.1.15> ### [`v0.1.14`](https://github.com/pogzyb/whodap/releases/tag/v0.1.14) [Compare Source](https://github.com/pogzyb/whodap/compare/0.1.13...v0.1.14) ##### What's Changed - Fix registrant organization not being populated from RDAP by [@&#8203;MashoodAli-1](https://github.com/MashoodAli-1) in [#&#8203;42](https://github.com/pogzyb/whodap/pull/42) - release 0.1.14 by [@&#8203;pogzyb](https://github.com/pogzyb) in [#&#8203;43](https://github.com/pogzyb/whodap/pull/43) ##### New Contributors - [@&#8203;MashoodAli-1](https://github.com/MashoodAli-1) made their first contribution in [#&#8203;42](https://github.com/pogzyb/whodap/pull/42) **Full Changelog**: <https://github.com/pogzyb/whodap/compare/0.1.13...v0.1.14> ### [`v0.1.13`](https://github.com/pogzyb/whodap/releases/tag/0.1.13) [Compare Source](https://github.com/pogzyb/whodap/compare/v0.1.12...0.1.13) ##### What's Changed - Prevent crashing on `_convert_date` by [@&#8203;TirathPatel](https://github.com/TirathPatel) in [#&#8203;40](https://github.com/pogzyb/whodap/pull/40) ##### New Contributors - [@&#8203;TirathPatel](https://github.com/TirathPatel) made their first contribution in [#&#8203;40](https://github.com/pogzyb/whodap/pull/40) **Full Changelog**: <https://github.com/pogzyb/whodap/compare/v0.1.12...0.1.13> </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Riyadh) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEzMi4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->
chore(deps): update all dependencies
Some checks failed
renovate/artifacts Artifact file update failure
d3aef229f8
renovate requested reviews from iostpa, c 2026-04-29 19:00:18 +03:00
renovate force-pushed renovate/all from d3aef229f8
Some checks failed
renovate/artifacts Artifact file update failure
to fca1cd007e
Some checks failed
renovate/artifacts Artifact file update failure
2026-04-29 19:13:28 +03:00
Compare
renovate force-pushed renovate/all from fca1cd007e
Some checks failed
renovate/artifacts Artifact file update failure
to 1fa0121afd
Some checks failed
renovate/artifacts Artifact file update failure
2026-04-29 19:35:57 +03:00
Compare
renovate force-pushed renovate/all from 1fa0121afd
Some checks failed
renovate/artifacts Artifact file update failure
to 199eec02da
Some checks failed
renovate/artifacts Artifact file update failure
2026-04-29 19:50:23 +03:00
Compare
renovate force-pushed renovate/all from 199eec02da
Some checks failed
renovate/artifacts Artifact file update failure
to ec1a658ceb
Some checks failed
renovate/artifacts Artifact file update failure
2026-04-29 20:59:48 +03:00
Compare
renovate force-pushed renovate/all from ec1a658ceb
Some checks failed
renovate/artifacts Artifact file update failure
to 0fe936b6d7
Some checks failed
renovate/artifacts Artifact file update failure
2026-04-29 21:04:16 +03:00
Compare
renovate force-pushed renovate/all from 0fe936b6d7
Some checks failed
renovate/artifacts Artifact file update failure
to 8a410b6111
Some checks failed
renovate/artifacts Artifact file update failure
2026-04-29 21:19:28 +03:00
Compare
renovate force-pushed renovate/all from 8a410b6111
Some checks failed
renovate/artifacts Artifact file update failure
to 6a8524a738
Some checks failed
renovate/artifacts Artifact file update failure
2026-04-29 21:28:01 +03:00
Compare
renovate force-pushed renovate/all from 6a8524a738
Some checks failed
renovate/artifacts Artifact file update failure
to 3b4d136ae7 2026-04-29 21:51:03 +03:00
Compare
c closed this pull request 2026-04-29 21:51:18 +03:00
c deleted branch renovate/all 2026-04-29 21:51:27 +03:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
c/takina!57
No description provided.