chore(deps): update dependency asgiref to v3.12.1 - #5549
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
Pull request dashboard statusWaiting on reviewers · refreshed 2026-08-21 19:45 UTC Review the latest changes. Also blocked by: 1 required status check is failing. Status above doesn't look right?
|
renovate
Bot
force-pushed
the
renovate/asgiref-3.x
branch
10 times, most recently
from
August 21, 2026 14:55
e8c74fc to
8bed5ed
Compare
renovate
Bot
force-pushed
the
renovate/asgiref-3.x
branch
from
August 21, 2026 19:35
8bed5ed to
bafa626
Compare
renovate
Bot
force-pushed
the
renovate/asgiref-3.x
branch
from
August 21, 2026 19:40
bafa626 to
f0aa3c8
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==3.7.2→==3.12.1Release Notes
django/asgiref (asgiref)
v3.12.1Compare Source
Restored the previous SyncToAsync.call internal code shape, which was
relied on by some APM services. (#572)
Note, this change was available whilst maintaining the underlying fix (from
#564). It does not constitute an API stability promise. Ideally APMs are
not monkey patching internal APIs, and future changes will be made here if
needed.
v3.12.0Compare Source
AsyncToSyncno longer captures the running event loop oninstantiation. (#562)
This resolves a series of deadlocks that users experienced after asgiref 3.9.0,
particularly with pytest-asyncio. pytest-asyncio stops the event loop between
tests, and long-running unawaited futures could find themselves trying to
schedule work onto a stopped loop, and so would never complete. Ideally, code
should be structured to await long-running futures before returning, but this
change should help users experiencing issues here.
The loop is now resolved when the callable is invoked rather than when it is
created. If
async_to_syncis called from withinsync_to_async, theparent event loop is still used, as before.
The possibility of deadlock therefore remains in some nested patterns. For
example, an async function may call a long-running
sync_to_asyncfunctionthat itself uses
async_to_sync; if the outer function returns before thesync future completes, the parent event loop may already be stopped, and the
nested calls cannot be driven to completion.
This is not a bug in asgiref — the same patterns deadlock in plain asyncio. As
above, restructure your code to await the
sync_to_asyncfuture beforeexiting the driving coroutine.
Fixed an event loop deadlock when exiting
ThreadSensitiveContextwhile its executor thread was still blocked waiting on the event loop.
(#535)
Dropped support for EOL Python 3.9.
Fixed
StatelessServer.run()failing on Python 3.14, whereasyncio.get_event_loop()no longer creates an event loop if noneexists. It now uses
asyncio.run(). (#559)Fixed
Localleaking data between unrelated sync threads whensys.flags.thread_inherit_contextis enabled (Python 3.14+), so a newlystarted thread inherits a copy of the spawning thread's context. This flag is
on by default on free-threaded builds and opt-in on the regular GIL build.
Localstorage is now tagged with its owning thread and re-homed only whenasgiref intentionally moves work across threads (in
async_to_sync/sync_to_async), restoring the documented thread-local behaviour in syncthreads.
asgiref is now tested against the free-threaded builds of Python 3.13 and
3.14 in CI.
The
testsextra no longer installsmypy; a newmypyextra isavailable for type-checking the codebase.
v3.11.1Compare Source
SECURITY FIX CVE-2025-14550: There was a potential DoS vector for users of
the
asgiref.wsgi.WsgiToAsgiadapter. Malicious requests, including an unreasonablylarge number of values for the same header, could lead to resource exhaustion
when building the WSGI environment.
To mitigate this, the algorithm is changed to be more efficient, and
WsgiToAsgigains a new optionalduplicate_header_limitparameter,which defaults to 100. This specifies the number of times a single header may
be repeated before the request is rejected as malformed.
You may override
duplicate_header_limitwhen configuring your application::Set
duplicate_header_limit=Noneif you wish to disable this check.Fixed a regression in 3.11.0 in
sync_to_asyncwhen wrapping a callablewith an attribute named
context. (#537)v3.11.0Compare Source
sync_to_asyncgains acontextparameter, similar to those forasyncio.create_task,TaskGroup&co, that can be used on Python 3.11+ tocontrol the context used by the underlying task.
The parent context is already propagated by default but the additional
control is useful if multiple
sync_to_asynccalls need to share the samecontext, e.g. when used with
asyncio.gather().v3.10.0Compare Source
invocations use the same thread. (#511)
v3.9.2Compare Source
Adds support for Python 3.14.
Fixes wsgi.errors file descriptor in WsgiToAsgi adapter.
v3.9.1Compare Source
Fixed deletion of Local values affecting other contexts. (#523)
Skip CPython specific garbage collection test on pypy. (#521)
v3.9.0Compare Source
Adds support for Python 3.13.
Drops support for (end-of-life) Python 3.8.
Fixes an error with conflicting kwargs between AsyncToSync and the wrapped
function. (#471)
Fixes Local isolation between asyncio Tasks. (#478)
Fixes a reference cycle in Local (#508)
Fixes a deadlock in CurrentThreadExecutor with nested async_to_sync →
sync_to_async → async_to_sync → create_task calls. (#494)
The ApplicationCommunicator testing utility will now return the task result
if it's already completed on send_input and receive_nothing. You may need to
catch (e.g.) the asyncio.exceptions.CancelledError if sending messages to
already finished consumers in your tests. (#505)
v3.8.1Compare Source
sync_to_async.
v3.8.0Compare Source
Adds support for Python 3.12.
Drops support for (end-of-life) Python 3.7.
Fixes task cancellation propagation to subtasks when using synchronous Django
middleware.
Allows nesting
sync_to_asyncviaasyncio.wait_for.Corrects WSGI adapter handling of root path.
Handles case where
"client"isNonein WsgiToAsgi adapter.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.