Skip to content

Bump gunicorn from 25.3.0 to 26.0.0#12457

Open
dependabot[bot] wants to merge 1 commit intomasterfrom
dependabot/pip/gunicorn-26.0.0
Open

Bump gunicorn from 25.3.0 to 26.0.0#12457
dependabot[bot] wants to merge 1 commit intomasterfrom
dependabot/pip/gunicorn-26.0.0

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 5, 2026

Bumps gunicorn from 25.3.0 to 26.0.0.

Release notes

Sourced from gunicorn's releases.

26.0.0

Breaking Changes

  • Eventlet worker removed: The eventlet worker class has been dropped. Migrate to gevent, gthread, or tornado.

New Features

  • ASGI Framework Compatibility Suite: New end-to-end compatibility test harness covering Starlette, FastAPI, Litestar, Quart, Sanic, and BlackSheep. Current grid passes 438/444 tests (98%).
  • ASGI Test Suite Expansion: 134 additional ASGI unit tests covering protocol semantics, lifespan, websockets, and chunked framing.

Security

  • HTTP/1.1 Request-Target Validation (RFC 9112 sections 3.2.3, 3.2.4):
    • Reject authority-form request-target outside CONNECT
    • Reject asterisk-form request-target outside OPTIONS
    • Reject relative-reference request-targets
  • Header Field Hardening (RFC 9110):
    • Reject control characters in header field-value (section 5.5)
    • Reject forbidden trailer field-names (section 6.5.1)
    • Reject Content-Length list form (RFC 9112 section 6.3)
  • Request Smuggling Hardening:
    • Tighten keepalive gate and scope finish_body byte cap
    • Keep _body_receiver alive across the keepalive smuggling gate so pipelined requests cannot re-enter a closed body
    • Address parser/protocol findings from a six-point WSGI/ASGI audit
  • PROXY Protocol (ASGI): Enforce proxy_allow_ips and tighten v1/v2 parsing in the ASGI callback parser.
  • Connection Draining: Drain the connection on close per RFC 9112 section 9.6 to prevent reset-on-close truncation.

Bug Fixes

  • Body Framing on HEAD/204/304:
    • Keep Content-Length on HEAD and 304 responses (#3621)
    • Drop body framing on HEAD/204/304 even when the framework set it
    • Warn once when an ASGI app emits a body for a no-body response
  • HTTP/2 ASGI:
    • Fix _handle_stream_ended to set _body_complete in the async HTTP/2 handler so request bodies finalize correctly on stream end
    • Add InvalidChunkExtension mapping and fast-parser support in ASGI tests (#3565)
  • HTTP/1.1 100-Continue: Stop adding Transfer-Encoding: chunked to 100-Continue interim responses.
  • WebSocket Close Handshake (RFC 6455):
    • Comply with the close handshake state machine
    • Close the transport after the close handshake completes
    • Fix binary send when the text key is None
  • Early Hints: Validate headers in the early_hints callback to match process_headers; pass only the header name to InvalidHeader (#3588).
  • ASGI Framework Fixes:
    • Fix ASGI disconnect handling for Django-style apps
    • Fix Litestar request handling (use raw ASGI receive for body/headers)
    • Fix Litestar HTTP endpoints for compatibility tests
    • Fix Quart headers endpoint to normalize keys to lowercase
    • Fix Quart WebSocket close test app (missing accept())
    • Fix duplicate Transfer-Encoding header for BlackSheep streaming

... (truncated)

Commits
  • 5d819cf release: 26.0.0
  • b45c70d Merge pull request #3611 from zc-mattcen/docs-typo
  • 99c8d48 Merge pull request #3623 from benoitc/chore/drop-eventlet-add-h2-uvloop-test-...
  • 5a655af Merge pull request #3622 from benoitc/test/docker-port-and-ipv4-fixes
  • 201df19 chore: remove eventlet worker; add h2 and uvloop to test deps
  • f4ac8e1 test: pass action name to dirty client and stabilize after TTOU spam
  • 54d38af test: unblock docker fixtures on macOS hosts
  • 68843c8 Merge pull request #3621 from benoitc/fix/asgi-preserve-content-length-on-hea...
  • 31f2618 Merge pull request #3620 from benoitc/fix/asgi-proxy-protocol-trust-and-parsing
  • 41ec752 fix: keep Content-Length on HEAD and 304 responses
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.3.0 to 26.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](benoitc/gunicorn@25.3.0...26.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 26.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label May 5, 2026
@dependabot dependabot Bot requested review from asvetlov and webknjaz as code owners May 5, 2026 10:44
@github-actions github-actions Bot enabled auto-merge (squash) May 5, 2026 10:52
@codecov
Copy link
Copy Markdown

codecov Bot commented May 5, 2026

❌ 2 Tests Failed:

Tests completed Failed Passed Skipped
4490 2 4488 73
View the top 2 failed test(s) by shortest run time
tests.test_client_functional::test_encoding_gzip_write_by_chunks[isal.isal_zlib-pyloop]
Stack Traces | 0.009s run time
args = (<socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>, ('127.0.0.1', 65533))
kwargs = {}

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrapper#x1B[39;49;00m(*args: Any, **kwargs: Any) -> _T:#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m blockbuster_skip.get(#x1B[94mFalse#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m func(*args, **kwargs)#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           asyncio.get_running_loop()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           RuntimeError: no running event loop#x1B[0m

args       = (<socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>, ('127.0.0.1', 65533))
can_block_functions = []
can_block_predicate = <function _socket_exclude at 0x0000014DF2AE2A70>
excluded_modules = ['D:\\a\\aiohttp\\aiohttp\\aiohttp\\pytest_plugin.py', 'D:\\a\\aiohttp\\aiohttp\\aiohttp\\test_utils.py']
func       = <method 'connect' of '_socket.socket' objects>
func_name  = 'socket.socket.connect'
kwargs     = {}
modules    = ['D:\\a\\aiohttp\\aiohttp\\aiohttp']

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\blockbuster\blockbuster.py#x1B[0m:78: RuntimeError

#x1B[33mDuring handling of the above exception, another exception occurred:#x1B[0m

loop_factory = <function new_event_loop at 0x0000014DF1B1E680>, fast = False
loop_debug = False

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.fixture#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mloop#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        loop_factory: Callable[[], asyncio.AbstractEventLoop],#x1B[90m#x1B[39;49;00m
        fast: #x1B[96mbool#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        loop_debug: #x1B[96mbool#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> Iterator[asyncio.AbstractEventLoop]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Return an instance of the event loop."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[94mwith#x1B[39;49;00m loop_context(loop_factory, fast=fast) #x1B[94mas#x1B[39;49;00m _loop:#x1B[90m#x1B[39;49;00m

fast       = False
loop_debug = False
loop_factory = <function new_event_loop at 0x0000014DF1B1E680>

#x1B[1m#x1B[31maiohttp\pytest_plugin.py#x1B[0m:275: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\contextlib.py#x1B[0m:135: in __enter__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mnext#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m.gen)#x1B[90m#x1B[39;49;00m
        self       = <contextlib._GeneratorContextManager object at 0x0000014DF56588E0>
#x1B[1m#x1B[31maiohttp\test_utils.py#x1B[0m:569: in loop_context
    #x1B[0mloop = setup_test_loop(loop_factory)#x1B[90m#x1B[39;49;00m
        fast       = False
        loop_factory = <function new_event_loop at 0x0000014DF1B1E680>
#x1B[1m#x1B[31maiohttp\test_utils.py#x1B[0m:582: in setup_test_loop
    #x1B[0mloop = loop_factory()#x1B[90m#x1B[39;49;00m
        loop_factory = <function new_event_loop at 0x0000014DF1B1E680>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\asyncio\events.py#x1B[0m:783: in new_event_loop
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m get_event_loop_policy().new_event_loop()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\asyncio\events.py#x1B[0m:673: in new_event_loop
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._loop_factory()#x1B[90m#x1B[39;49;00m
        self       = <asyncio.windows_events.WindowsProactorEventLoopPolicy object at 0x0000014DF5659FF0>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\asyncio\windows_events.py#x1B[0m:315: in __init__
    #x1B[0m#x1B[96msuper#x1B[39;49;00m().#x1B[92m__init__#x1B[39;49;00m(proactor)#x1B[90m#x1B[39;49;00m
        __class__  = <class 'asyncio.windows_events.ProactorEventLoop'>
        proactor   = <IocpProactor overlapped#=0 result#=0>
        self       = <ProactorEventLoop running=False closed=False debug=False>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\asyncio\proactor_events.py#x1B[0m:636: in __init__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._make_self_pipe()#x1B[90m#x1B[39;49;00m
        __class__  = <class 'asyncio.proactor_events.BaseProactorEventLoop'>
        proactor   = <IocpProactor overlapped#=0 result#=0>
        self       = <ProactorEventLoop running=False closed=False debug=False>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\asyncio\proactor_events.py#x1B[0m:767: in _make_self_pipe
    #x1B[0m#x1B[96mself#x1B[39;49;00m._ssock, #x1B[96mself#x1B[39;49;00m._csock = socket.socketpair()#x1B[90m#x1B[39;49;00m
        self       = <ProactorEventLoop running=False closed=False debug=False>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\socket.py#x1B[0m:640: in socketpair
    #x1B[0mcsock.connect((addr, port))#x1B[90m#x1B[39;49;00m
        addr       = '127.0.0.1'
        csock      = <socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
        family     = <AddressFamily.AF_INET: 2>
        host       = '127.0.0.1'
        lsock      = <socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
        port       = 65533
        proto      = 0
        type       = <SocketKind.SOCK_STREAM: 1>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (<socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>, ('127.0.0.1', 65533))
kwargs = {}

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrapper#x1B[39;49;00m(*args: Any, **kwargs: Any) -> _T:#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m blockbuster_skip.get(#x1B[94mFalse#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m func(*args, **kwargs)#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            asyncio.get_running_loop()#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mRuntimeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           #x1B[94mreturn#x1B[39;49;00m func(*args, **kwargs)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           OSError: [WinError 10055] An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full#x1B[0m

args       = (<socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>, ('127.0.0.1', 65533))
can_block_functions = []
can_block_predicate = <function _socket_exclude at 0x0000014DF2AE2A70>
excluded_modules = ['D:\\a\\aiohttp\\aiohttp\\aiohttp\\pytest_plugin.py', 'D:\\a\\aiohttp\\aiohttp\\aiohttp\\test_utils.py']
func       = <method 'connect' of '_socket.socket' objects>
func_name  = 'socket.socket.connect'
kwargs     = {}
modules    = ['D:\\a\\aiohttp\\aiohttp\\aiohttp']

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\blockbuster\blockbuster.py#x1B[0m:80: OSError
tests.test_client_functional::test_encoding_gzip_nochunk[zlib-pyloop]
Stack Traces | 0.184s run time
self = <ProactorEventLoop running=False closed=False debug=False>
_warn = <built-in function warn>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__del__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, _warn=warnings.warn):#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.is_closed():#x1B[90m#x1B[39;49;00m
>           _warn(#x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33munclosed event loop #x1B[39;49;00m#x1B[33m{#x1B[39;49;00m#x1B[96mself#x1B[39;49;00m#x1B[33m!r}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[96mResourceWarning#x1B[39;49;00m, source=#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           ResourceWarning: unclosed event loop <ProactorEventLoop running=False closed=False debug=False>#x1B[0m

_warn      = <built-in function warn>
self       = <ProactorEventLoop running=False closed=False debug=False>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\asyncio\base_events.py#x1B[0m:688: ResourceWarning

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x0000014DF65DF520>
when = 'teardown'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    #x1B[0m#x1B[37m@classmethod#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfrom_call#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mcls#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        func: Callable[[], TResult],#x1B[90m#x1B[39;49;00m
        when: Literal[#x1B[33m"#x1B[39;49;00m#x1B[33mcollect#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33msetup#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mcall#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mteardown#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        reraise: #x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m] | #x1B[96mtuple#x1B[39;49;00m[#x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m], ...] | #x1B[94mNone#x1B[39;49;00m = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> CallInfo[TResult]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Call func, wrapping the result in a CallInfo.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    :param func:#x1B[39;49;00m
    #x1B[33m        The function to call. Called without arguments.#x1B[39;49;00m
    #x1B[33m    :type func: Callable[[], _pytest.runner.TResult]#x1B[39;49;00m
    #x1B[33m    :param when:#x1B[39;49;00m
    #x1B[33m        The phase in which the function is called.#x1B[39;49;00m
    #x1B[33m    :param reraise:#x1B[39;49;00m
    #x1B[33m        Exception or exceptions that shall propagate if raised by the#x1B[39;49;00m
    #x1B[33m        function, instead of being wrapped in the CallInfo.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        excinfo = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        instant = timing.Instant()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: TResult | #x1B[94mNone#x1B[39;49;00m = func()#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = Duration(start=Instant(time=1777979854.4439564, perf_count=341.2854818), stop=Instant(time=1777979854.6101568, perf_count=341.4523877))
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored in: <function BaseEventLoop.__del__ at 0x0000014DF1...cated.\nSee https://docs.pytest..../stable/how-to/capture-warnings.html#resource-warnings for more info.') tblen=13>
func       = <function call_and_report.<locals>.<lambda> at 0x0000014DF65DF520>
instant    = Instant(time=1777979854.4439564, perf_count=341.2854818)
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
when       = 'teardown'

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\_pytest\runner.py#x1B[0m:353: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\_pytest\runner.py#x1B[0m:245: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds),#x1B[90m#x1B[39;49;00m
        item       = <Function test_encoding_gzip_nochunk[zlib-pyloop]>
        kwds       = {'nextitem': <Function test_encoding_gzip_nochunk[zlib_ng.zlib_ng-pyloop]>}
        runtest_hook = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\pluggy\_hooks.py#x1B[0m:512: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._hookexec(#x1B[96mself#x1B[39;49;00m.name, #x1B[96mself#x1B[39;49;00m._hookimpls.copy(), kwargs, firstresult)#x1B[90m#x1B[39;49;00m
        firstresult = False
        kwargs     = {'item': <Function test_encoding_gzip_nochunk[zlib-pyloop]>, 'nextitem': <Function test_encoding_gzip_nochunk[zlib_ng.zlib_ng-pyloop]>}
        self       = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\pluggy\_manager.py#x1B[0m:120: in _hookexec
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._inner_hookexec(hook_name, methods, kwargs, firstresult)#x1B[90m#x1B[39;49;00m
        firstresult = False
        hook_name  = 'pytest_runtest_teardown'
        kwargs     = {'item': <Function test_encoding_gzip_nochunk[zlib-pyloop]>, 'nextitem': <Function test_encoding_gzip_nochunk[zlib_ng.zlib_ng-pyloop]>}
        methods    = [<HookImpl plugin_name='threadexception', plugin=<module '_pytest.threadexception' from 'C:\\hostedtoolcache\\windows\...e=None>>, <HookImpl plugin_name='logging-plugin', plugin=<_pytest.logging.LoggingPlugin object at 0x0000014DF31DB4C0>>]
        self       = <_pytest.config.PytestPluginManager object at 0x0000014DF1893D00>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\_pytest\logging.py#x1B[0m:858: in pytest_runtest_teardown
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        item       = <Function test_encoding_gzip_nochunk[zlib-pyloop]>
        self       = <_pytest.logging.LoggingPlugin object at 0x0000014DF31DB4C0>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\_pytest\capture.py#x1B[0m:905: in pytest_runtest_teardown
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        item       = <Function test_encoding_gzip_nochunk[zlib-pyloop]>
        self       = <CaptureManager _method='fd' _global_capturing=<MultiCapture out=<FDCapture 1 oldfd=9 _state='suspended' tmpfile=<_io...._io.TextIOWrapper name='nul' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\_pytest\unraisableexception.py#x1B[0m:163: in pytest_runtest_teardown
    #x1B[0mcollect_unraisable(item.config)#x1B[90m#x1B[39;49;00m
        item       = <Function test_encoding_gzip_nochunk[zlib-pyloop]>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\_pytest\unraisableexception.py#x1B[0m:79: in collect_unraisable
    #x1B[0m#x1B[94mraise#x1B[39;49;00m errors[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        config     = <_pytest.config.Config object at 0x0000014DF18E11B0>
        msg        = 'Exception ignored in: <function BaseEventLoop.__del__ at 0x0000014DF1B6ED40>\n\nTraceback (most recent call last):\n ...ct was allocated.\nSee https://docs.pytest..../stable/how-to/capture-warnings.html#resource-warnings for more info.'
        pop_unraisable = <built-in method pop of collections.deque object at 0x0000014DF31D09A0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

config = <_pytest.config.Config object at 0x0000014DF18E11B0>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcollect_unraisable#x1B[39;49;00m(config: Config) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        pop_unraisable = config.stash[unraisable_exceptions].pop#x1B[90m#x1B[39;49;00m
        errors: #x1B[96mlist#x1B[39;49;00m[pytest.PytestUnraisableExceptionWarning | #x1B[96mRuntimeError#x1B[39;49;00m] = []#x1B[90m#x1B[39;49;00m
        meta = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        hook_error = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94mwhile#x1B[39;49;00m #x1B[94mTrue#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    meta = pop_unraisable()#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mIndexError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(meta, #x1B[96mBaseException#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                    hook_error = #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m"#x1B[39;49;00m#x1B[33mFailed to process unraisable exception#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    hook_error.__cause__ = meta#x1B[90m#x1B[39;49;00m
                    errors.append(hook_error)#x1B[90m#x1B[39;49;00m
                    #x1B[94mcontinue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                msg = meta.msg#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                   pytest.PytestUnraisableExceptionWarning: Exception ignored in: <function BaseEventLoop.__del__ at 0x0000014DF1B6ED40>#x1B[0m
#x1B[1m#x1B[31mE                   Enable tracemalloc to get traceback where the object was allocated.#x1B[0m
#x1B[1m#x1B[31mE                   See https://docs.pytest..../stable/how-to/capture-warnings.html#resource-warnings for more info.#x1B[0m

config     = <_pytest.config.Config object at 0x0000014DF18E11B0>
msg        = 'Exception ignored in: <function BaseEventLoop.__del__ at 0x0000014DF1B6ED40>\n\nTraceback (most recent call last):\n ...ct was allocated.\nSee https://docs.pytest..../stable/how-to/capture-warnings.html#resource-warnings for more info.'
pop_unraisable = <built-in method pop of collections.deque object at 0x0000014DF31D09A0>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.10.11\x64\lib\site-packages\_pytest\unraisableexception.py#x1B[0m:67: PytestUnraisableExceptionWarning

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 5, 2026

Merging this PR will not alter performance

✅ 67 untouched benchmarks
⏩ 4 skipped benchmarks1


Comparing dependabot/pip/gunicorn-26.0.0 (1b65684) with master (0471d65)

Open in CodSpeed

Footnotes

  1. 4 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants