$ the-wire · showcase
asgiref drops Python 3.10 and its custom timeout, Django patches oracledb 26
By RepoJournal · Filed · About Django · Composed from the cited sources · methodology
asgiref's timeout handling moves to asyncio.timeout with Python 3.11 as the new floor, while two long-standing ASGI and Django edge-case crashes get fixed.
Deprecate custom timeout in favour of asyncio.timeout. django/asgiref
Python 3.11 is now the minimum supported version, and the hand-rolled timeout machinery is deprecated in favor of asyncio.timeout. Anything calling asgiref.timeout today should migrate before the custom implementation is removed.
Handle scope["server"] = None in build_environ. (#553) django/asgiref
build_environ no longer crashes when a server puts "server": None in the scope, which Uvicorn does with --uds over Unix sockets. The fix sets SERVER_PORT to "0" for that case, so WSGI deployments behind Unix sockets stop raising TypeError: 'NoneType' object is not subscriptable.
Fixed #37411 -- Added compatibility for oracledb 26.0.0+. django/django
oracledb 26.0.0 requires large parameter values to go through a temporary LOB when calling PL/SQL functions, which broke GIS fixture loading on strings past the 4000-character boundary; the PR adds an explicit test for large bytes payloads. Same patch as the direct commit; pick up either.
upstreaming a fix for a small bug - compare contextvars by identity in _restore_context django/asgiref
_restore_context now compares contextvars with `is not` instead of `!=`. The author reports that dict-style comparison mishandles pydantic values backed by a WeakValueDictionary, a break he hit in production and says is already running well there.
Replaced RST links named in English with explicit URLs. django/django
Long tail: documentation RST links named in English were replaced with explicit URLs, after Claude Paroz noted that the pattern is not i18n-friendly and that sphinx's i18n tooling mismatches repeated link names, producing broken links in translated docs.
Action items
- → Move off the deprecated asgiref custom timeout API to asyncio.timeout django/asgiref [plan]
- → Confirm your deployment runs Python 3.11 or newer before upgrading asgiref django/asgiref [plan]