Skip to content

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Jan 8, 2026

Bumps virtualenv from 20.35.4 to 20.36.0.

Release notes

Sourced from virtualenv's releases.

20.36.0

What's Changed

New Contributors

Full Changelog: pypa/virtualenv@20.35.3...20.36.0

Changelog

Sourced from virtualenv's changelog.

v20.36.0 (2026-01-07)

Features - 20.36.0

- Add support for PEP 440 version specifiers in the ``--python`` flag. Users can now specify Python versions using operators like ``>=``, ``<=``, ``~=``, etc. For example: ``virtualenv --python=">=3.12" myenv`` `. (:issue:`2994`)
Commits
  • 9719376 release 20.36.0
  • 0276db6 Add support for PEP 440 version specifiers in the --python flag. (#3008)
  • 4f900c2 Fix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 (#3...
  • 13afcc6 fix: resolve EncodingWarning in tox upgrade environment (#3007)
  • 31b5d31 [pre-commit.ci] pre-commit autoupdate (#2997)
  • 7c28422 fix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 (...
  • 365628c test_too_many_open_files: assert on errno.EMFILE instead of strerror (#3001)
  • 5d09a90 fix: wrong path on migrated venv (#2996)
  • 23032cb [pre-commit.ci] pre-commit autoupdate (#2995)
  • 70afcd7 [pre-commit.ci] pre-commit autoupdate (#2993)
  • 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 merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @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)

@dependabot dependabot bot added the dependencies Pull requests that update a dependency file label Jan 8, 2026
@dependabot dependabot bot requested review from asvetlov and webknjaz as code owners January 8, 2026 10:43
@dependabot dependabot bot added the dependencies Pull requests that update a dependency file label Jan 8, 2026
@github-actions github-actions bot enabled auto-merge (squash) January 8, 2026 10:45
@codspeed-hq
Copy link

codspeed-hq bot commented Jan 8, 2026

Merging this PR will not alter performance

Summary

✅ 59 untouched benchmarks


Comparing dependabot/pip/3.14/virtualenv-20.36.0 (6c549e8) with 3.14 (026eced)1

Open in CodSpeed

Footnotes

  1. No successful run was found on 3.14 (02fcae8) during the generation of this report, so 026eced was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@codecov
Copy link

codecov bot commented Jan 8, 2026

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
4301 1 4300 73
View the full list of 1 ❄️ flaky test(s)
tests.test_client_middleware::test_middleware_uses_session_avoids_recursion_with_path_check[pyloop]

Flake rate in main: 100.00% (Passed 0 times, Failed 1 times)

Stack Traces | 2.43s run time
self = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
addr_infos = []
req = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
args = (functools.partial(<class 'aiohttp.client_proto.ResponseHandler'>, loop=<ProactorEventLoop running=False closed=False debug=False>),)
kwargs = {'server_hostname': None, 'ssl': None}

    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m_wrap_create_connection#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        *args: Any,#x1B[90m#x1B[39;49;00m
        addr_infos: #x1B[96mlist#x1B[39;49;00m[AddrInfoType],#x1B[90m#x1B[39;49;00m
        req: ClientRequest,#x1B[90m#x1B[39;49;00m
        timeout: #x1B[33m"#x1B[39;49;00m#x1B[33mClientTimeout#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        client_error: #x1B[96mtype#x1B[39;49;00m[#x1B[96mException#x1B[39;49;00m] = ClientConnectorError,#x1B[90m#x1B[39;49;00m
        **kwargs: Any,#x1B[90m#x1B[39;49;00m
    ) -> #x1B[96mtuple#x1B[39;49;00m[asyncio.Transport, ResponseHandler]:#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m ceil_timeout(#x1B[90m#x1B[39;49;00m
                timeout.sock_connect, ceil_threshold=timeout.ceil_threshold#x1B[90m#x1B[39;49;00m
            ):#x1B[90m#x1B[39;49;00m
>               sock = #x1B[94mawait#x1B[39;49;00m aiohappyeyeballs.start_connection(#x1B[90m#x1B[39;49;00m
                    addr_infos=addr_infos,#x1B[90m#x1B[39;49;00m
                    local_addr_infos=#x1B[96mself#x1B[39;49;00m._local_addr_infos,#x1B[90m#x1B[39;49;00m
                    happy_eyeballs_delay=#x1B[96mself#x1B[39;49;00m._happy_eyeballs_delay,#x1B[90m#x1B[39;49;00m
                    interleave=#x1B[96mself#x1B[39;49;00m._interleave,#x1B[90m#x1B[39;49;00m
                    loop=#x1B[96mself#x1B[39;49;00m._loop,#x1B[90m#x1B[39;49;00m
                    socket_factory=#x1B[96mself#x1B[39;49;00m._socket_factory,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m

addr_infos = []
args       = (functools.partial(<class 'aiohttp.client_proto.ResponseHandler'>, loop=<ProactorEventLoop running=False closed=False debug=False>),)
client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
kwargs     = {'server_hostname': None, 'ssl': None}
req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
self       = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)

#x1B[1m#x1B[31maiohttp\connector.py#x1B[0m:1279: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.13.11\x64\Lib\site-packages\aiohappyeyeballs\impl.py#x1B[0m:127: in start_connection
    #x1B[0m#x1B[94mraise#x1B[39;49;00m first_exception#x1B[90m#x1B[39;49;00m
        _          = [ConnectionRefusedError(22, 'The remote computer refused the network connection', None, 1225, None), ConnectionRefusedError(22, 'The remote computer refused the network connection', None, 1225, None)]
        addr_infos = [(<AddressFamily.AF_INET6: 23>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('::1', 992, 0, 0)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('127.0.0.1', 992))]
        all_exceptions = None
        current_loop = <ProactorEventLoop running=False closed=False debug=False>
        exceptions = None
        first_exception = ConnectionRefusedError(22, 'The remote computer refused the network connection', None, 1225, None)
        happy_eyeballs_delay = 0.25
        interleave = 1
        local_addr_infos = None
        loop       = <ProactorEventLoop running=False closed=False debug=False>
        model      = '[WinError 1225] The remote computer refused the network connection'
        open_sockets = None
        single_addr_info = False
        sock       = None
        socket_factory = None
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.13.11\x64\Lib\site-packages\aiohappyeyeballs\_staggered.py#x1B[0m:132: in run_one_coro
    #x1B[0mresult = #x1B[94mawait#x1B[39;49;00m coro_fn()#x1B[90m#x1B[39;49;00m
             ^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        coro_fn    = functools.partial(<function _connect_sock at 0x00000265A89F65C0>, <ProactorEventLoop running=False closed=False debug=...25, None)]], (<AddressFamily.AF_INET6: 23>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('::1', 992, 0, 0)), None, set(), None)
        exceptions = [ConnectionRefusedError(22, 'The remote computer refused the network connection', None, 1225, None), ConnectionRefusedError(22, 'The remote computer refused the network connection', None, 1225, None)]
        start_next = <Future finished result=None>
        this_index = 0
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.13.11\x64\Lib\site-packages\aiohappyeyeballs\impl.py#x1B[0m:208: in _connect_sock
    #x1B[0m#x1B[94mawait#x1B[39;49;00m loop.sock_connect(sock, address)#x1B[90m#x1B[39;49;00m
        _          = ''
        addr_info  = (<AddressFamily.AF_INET6: 23>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('::1', 992, 0, 0))
        address    = ('::1', 992, 0, 0)
        exceptions = None
        family     = <AddressFamily.AF_INET6: 23>
        local_addr_infos = None
        loop       = <ProactorEventLoop running=False closed=False debug=False>
        my_exceptions = None
        open_sockets = set()
        proto      = 6
        sock       = <socket.socket [closed] fd=-1, family=23, type=1, proto=6>
        socket_factory = None
        type_      = <SocketKind.SOCK_STREAM: 1>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.13.11\x64\Lib\asyncio\proactor_events.py#x1B[0m:728: in sock_connect
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._proactor.connect(sock, address)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        address    = ('::1', 992, 0, 0)
        self       = <ProactorEventLoop running=False closed=False debug=False>
        sock       = <socket.socket [closed] fd=-1, family=23, type=1, proto=6>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.13.11\x64\Lib\asyncio\windows_events.py#x1B[0m:804: in _poll
    #x1B[0mvalue = callback(transferred, key, ov)#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        address    = 2635703346240
        callback   = <function IocpProactor.connect.<locals>.finish_connect at 0x00000265ADAE9EE0>
        err        = 1225
        f          = None
        key        = 0
        ms         = 0
        obj        = <socket.socket [closed] fd=-1, family=23, type=1, proto=6>
        ov         = <_overlapped.Overlapped object at 0x00000265AC296430>
        self       = <IocpProactor overlapped#=3 result#=0>
        status     = None
        timeout    = 30.36004319999995
        transferred = 0
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

trans = 0, key = 0, ov = <_overlapped.Overlapped object at 0x00000265AC296430>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfinish_connect#x1B[39;49;00m(trans, key, ov):#x1B[90m#x1B[39;49;00m
>       ov.getresult()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       ConnectionRefusedError: [WinError 1225] The remote computer refused the network connection#x1B[0m

conn       = <socket.socket [closed] fd=-1, family=23, type=1, proto=6>
key        = 0
ov         = <_overlapped.Overlapped object at 0x00000265AC296430>
trans      = 0

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.13.11\x64\Lib\asyncio\windows_events.py#x1B[0m:600: ConnectionRefusedError

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

aiohttp_server = <function aiohttp_server.<locals>.go at 0x00000265ADAE9940>

    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_middleware_uses_session_avoids_recursion_with_path_check#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        aiohttp_server: AiohttpServer,#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Test that middleware can avoid infinite recursion using a path check."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        log_collector: #x1B[96mlist#x1B[39;49;00m[#x1B[96mdict#x1B[39;49;00m[#x1B[96mstr#x1B[39;49;00m, #x1B[96mstr#x1B[39;49;00m]] = []#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mlog_api_handler#x1B[39;49;00m(request: web.Request) -> web.Response:#x1B[90m#x1B[39;49;00m
    #x1B[90m        #x1B[39;49;00m#x1B[33m"""Handle log API requests."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            data: #x1B[96mdict#x1B[39;49;00m[#x1B[96mstr#x1B[39;49;00m, #x1B[96mstr#x1B[39;49;00m] = #x1B[94mawait#x1B[39;49;00m request.json()#x1B[90m#x1B[39;49;00m
            log_collector.append(data)#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m web.Response(text=#x1B[33m"#x1B[39;49;00m#x1B[33mOK#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mmain_handler#x1B[39;49;00m(request: web.Request) -> web.Response:#x1B[90m#x1B[39;49;00m
    #x1B[90m        #x1B[39;49;00m#x1B[33m"""Handle main server requests."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m web.Response(text=#x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mHello from #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mrequest.path#x1B[33m}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# Create log API server#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        log_app = web.Application()#x1B[90m#x1B[39;49;00m
        log_app.router.add_post(#x1B[33m"#x1B[39;49;00m#x1B[33m/log#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, log_api_handler)#x1B[90m#x1B[39;49;00m
        log_server = #x1B[94mawait#x1B[39;49;00m aiohttp_server(log_app)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# Create main server#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        main_app = web.Application()#x1B[90m#x1B[39;49;00m
        main_app.router.add_get(#x1B[33m"#x1B[39;49;00m#x1B[33m/#x1B[39;49;00m#x1B[33m{#x1B[39;49;00m#x1B[33mpath:.*}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, main_handler)#x1B[90m#x1B[39;49;00m
        main_server = #x1B[94mawait#x1B[39;49;00m aiohttp_server(main_app)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mlog_middleware#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
            request: ClientRequest, handler: ClientHandlerType#x1B[90m#x1B[39;49;00m
        ) -> ClientResponse:#x1B[90m#x1B[39;49;00m
    #x1B[90m        #x1B[39;49;00m#x1B[33m"""Log requests to external API, avoiding recursion with path check."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# Avoid infinite recursion by not logging requests to the /log endpoint#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m request.url.path != #x1B[33m"#x1B[39;49;00m#x1B[33m/log#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[90m# Use the session from the request to make the logging call#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m request.session.post(#x1B[90m#x1B[39;49;00m
                    #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mhttp://localhost:#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mlog_server.port#x1B[33m}#x1B[39;49;00m#x1B[33m/log#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                    json={#x1B[33m"#x1B[39;49;00m#x1B[33mmethod#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: #x1B[96mstr#x1B[39;49;00m(request.method), #x1B[33m"#x1B[39;49;00m#x1B[33murl#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: #x1B[96mstr#x1B[39;49;00m(request.url)},#x1B[90m#x1B[39;49;00m
                ) #x1B[94mas#x1B[39;49;00m resp:#x1B[90m#x1B[39;49;00m
                    #x1B[94massert#x1B[39;49;00m resp.status == #x1B[94m200#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m #x1B[94mawait#x1B[39;49;00m handler(request)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# Create session with the middleware#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m ClientSession(middlewares=(log_middleware,)) #x1B[94mas#x1B[39;49;00m session:#x1B[90m#x1B[39;49;00m
            #x1B[90m# Make request to main server - should be logged#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>           #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m session.get(main_server.make_url(#x1B[33m"#x1B[39;49;00m#x1B[33m/test#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)) #x1B[94mas#x1B[39;49;00m resp:#x1B[90m#x1B[39;49;00m
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m

aiohttp_server = <function aiohttp_server.<locals>.go at 0x00000265ADAE9940>
log_api_handler = <function test_middleware_uses_session_avoids_recursion_with_path_check.<locals>.log_api_handler at 0x00000265ADAE9440>
log_app    = <Application 0x265af332e40>
log_collector = []
log_middleware = <function test_middleware_uses_session_avoids_recursion_with_path_check.<locals>.log_middleware at 0x00000265ADAE96C0>
log_server = <aiohttp.test_utils.TestServer object at 0x00000265AC6EA2B0>
main_app   = <Application 0x265af333a70>
main_handler = <function test_middleware_uses_session_avoids_recursion_with_path_check.<locals>.main_handler at 0x00000265ADAE8860>
main_server = <aiohttp.test_utils.TestServer object at 0x00000265AC6EA6D0>
session    = <aiohttp.client.ClientSession object at 0x00000265AC45DA90>

#x1B[1m#x1B[31mtests\test_client_middleware.py#x1B[0m:970: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31maiohttp\client.py#x1B[0m:1596: in __aenter__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._resp: _RetType_co = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._coro#x1B[90m#x1B[39;49;00m
                              ^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <aiohttp.client._BaseRequestContextManager object at 0x00000265AC2F4D00>
#x1B[1m#x1B[31maiohttp\client.py#x1B[0m:800: in _request
    #x1B[0mresp = #x1B[94mawait#x1B[39;49;00m handler(req)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        _connect_and_send_request = <function ClientSession._request.<locals>._connect_and_send_request at 0x00000265ADAE84A0>
        all_cookies = <BaseCookie: >
        allow_redirects = True
        auth       = None
        auth_from_url = None
        auto_decompress = True
        chunked    = None
        compress   = None
        cookies    = None
        data       = None
        effective_middlewares = (<function test_middleware_uses_session_avoids_recursion_with_path_check.<locals>.log_middleware at 0x00000265ADAE96C0>,)
        expect100  = False
        fingerprint = None
        handle     = None
        handler    = <function build_client_middlewares.<locals>.single_middleware_handler at 0x00000265ADAE8180>
        headers    = <CIMultiDict()>
        history    = []
        json       = None
        max_field_size = 8190
        max_line_size = 8190
        max_redirects = 10
        method     = 'GET'
        middlewares = None
        params     = {}
        proxy      = None
        proxy_     = None
        proxy_auth = None
        proxy_headers = None
        raise_for_status = None
        read_bufsize = 65536
        read_until_eof = True
        real_timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        redirects  = 0
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843A50>
        retry_persistent_connection = True
        self       = <aiohttp.client.ClientSession object at 0x00000265AC45DA90>
        server_hostname = None
        skip_auto_headers = None
        skip_headers = None
        ssl        = True
        ssl_context = None
        str_or_url = URL('http://127.0.0.1:57348/test')
        timeout    = <_SENTINEL.sentinel: 1>
        timer      = <aiohttp.helpers.TimerContext object at 0x00000265ADC67FC0>
        tm         = <aiohttp.helpers.TimeoutHandle object at 0x00000265ACB7CEC0>
        trace_request_ctx = None
        traces     = []
        url        = URL('http://127.0.0.1:57348/test')
        verify_ssl = None
        version    = HttpVersion(major=1, minor=1)
#x1B[1m#x1B[31maiohttp\client_middlewares.py#x1B[0m:36: in single_middleware_handler
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[94mawait#x1B[39;49;00m middleware(req, handler)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        handler    = <function ClientSession._request.<locals>._connect_and_send_request at 0x00000265ADAE84A0>
        middleware = <function test_middleware_uses_session_avoids_recursion_with_path_check.<locals>.log_middleware at 0x00000265ADAE96C0>
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843A50>
#x1B[1m#x1B[31mtests\test_client_middleware.py#x1B[0m:959: in log_middleware
    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m request.session.post(#x1B[90m#x1B[39;49;00m
        handler    = <function ClientSession._request.<locals>._connect_and_send_request at 0x00000265ADAE84A0>
        log_server = <aiohttp.test_utils.TestServer object at 0x00000265AC6EA2B0>
        request    = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843A50>
#x1B[1m#x1B[31maiohttp\client.py#x1B[0m:1596: in __aenter__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._resp: _RetType_co = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._coro#x1B[90m#x1B[39;49;00m
                              ^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <aiohttp.client._BaseRequestContextManager object at 0x00000265AC2F5270>
#x1B[1m#x1B[31maiohttp\client.py#x1B[0m:800: in _request
    #x1B[0mresp = #x1B[94mawait#x1B[39;49;00m handler(req)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        _connect_and_send_request = <function ClientSession._request.<locals>._connect_and_send_request at 0x00000265ADAE99E0>
        all_cookies = <BaseCookie: >
        allow_redirects = True
        auth       = None
        auth_from_url = None
        auto_decompress = True
        chunked    = None
        compress   = None
        cookies    = None
        data       = <aiohttp.payload.JsonPayload object at 0x00000265AF27F490>
        effective_middlewares = (<function test_middleware_uses_session_avoids_recursion_with_path_check.<locals>.log_middleware at 0x00000265ADAE96C0>,)
        expect100  = False
        fingerprint = None
        handle     = None
        handler    = <function build_client_middlewares.<locals>.single_middleware_handler at 0x00000265ADAE9D00>
        headers    = <CIMultiDict()>
        history    = []
        json       = {'method': 'GET', 'url': 'http://127.0.0.1:57348/test'}
        max_field_size = 8190
        max_line_size = 8190
        max_redirects = 10
        method     = 'POST'
        middlewares = None
        params     = {}
        proxy      = None
        proxy_     = None
        proxy_auth = None
        proxy_headers = None
        raise_for_status = None
        read_bufsize = 65536
        read_until_eof = True
        real_timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        redirects  = 0
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
        retry_persistent_connection = False
        self       = <aiohttp.client.ClientSession object at 0x00000265AC45DA90>
        server_hostname = None
        skip_auto_headers = None
        skip_headers = None
        ssl        = True
        ssl_context = None
        str_or_url = 'http://localhost:57347/log'
        timeout    = <_SENTINEL.sentinel: 1>
        timer      = <aiohttp.helpers.TimerContext object at 0x00000265AC893DC0>
        tm         = <aiohttp.helpers.TimeoutHandle object at 0x00000265ACF2AFC0>
        trace_request_ctx = None
        traces     = []
        url        = URL('http://localhost:57347/log')
        verify_ssl = None
        version    = HttpVersion(major=1, minor=1)
#x1B[1m#x1B[31maiohttp\client_middlewares.py#x1B[0m:36: in single_middleware_handler
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[94mawait#x1B[39;49;00m middleware(req, handler)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        handler    = <function ClientSession._request.<locals>._connect_and_send_request at 0x00000265ADAE99E0>
        middleware = <function test_middleware_uses_session_avoids_recursion_with_path_check.<locals>.log_middleware at 0x00000265ADAE96C0>
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
#x1B[1m#x1B[31mtests\test_client_middleware.py#x1B[0m:965: in log_middleware
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[94mawait#x1B[39;49;00m handler(request)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        handler    = <function ClientSession._request.<locals>._connect_and_send_request at 0x00000265ADAE99E0>
        log_server = <aiohttp.test_utils.TestServer object at 0x00000265AC6EA2B0>
        request    = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
#x1B[1m#x1B[31maiohttp\client.py#x1B[0m:755: in _connect_and_send_request
    #x1B[0mconn = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._connector.connect(#x1B[90m#x1B[39;49;00m
        auto_decompress = True
        max_field_size = 8190
        max_line_size = 8190
        read_bufsize = 65536
        read_until_eof = True
        real_timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
        self       = <aiohttp.client.ClientSession object at 0x00000265AC45DA90>
        timer      = <aiohttp.helpers.TimerContext object at 0x00000265AC893DC0>
        traces     = []
#x1B[1m#x1B[31maiohttp\connector.py#x1B[0m:655: in connect
    #x1B[0mproto = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_connection(req, traces, timeout)#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        conn       = None
        key        = ConnectionKey(host='localhost', port=57347, is_ssl=False, ssl=True, proxy=None, proxy_auth=None, proxy_headers_hash=None)
        placeholder = <aiohttp.connector._TransportPlaceholder object at 0x00000265AC2F4700>
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
        self       = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        traces     = []
#x1B[1m#x1B[31maiohttp\connector.py#x1B[0m:1220: in _create_connection
    #x1B[0m_, proto = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_direct_connection(req, traces, timeout)#x1B[90m#x1B[39;49;00m
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
        self       = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        traces     = []
#x1B[1m#x1B[31maiohttp\connector.py#x1B[0m:1592: in _create_direct_connection
    #x1B[0m#x1B[94mraise#x1B[39;49;00m last_exc#x1B[90m#x1B[39;49;00m
        addr_infos = []
        client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
        fingerprint = None
        host       = 'localhost'
        hosts      = [{'family': <AddressFamily.AF_INET6: 23>, 'flags': <AddressInfo.AI_NUMERICHOST|AI_NUMERICSERV: 12>, 'host': '::1', 'ho...INET: 2>, 'flags': <AddressInfo.AI_NUMERICHOST|AI_NUMERICSERV: 12>, 'host': '127.0.0.1', 'hostname': 'localhost', ...}]
        last_exc   = ClientConnectorError(ConnectionKey(host='localhost', port=57347, is_ssl=False, ssl=True, proxy=None, proxy_auth=None, ...headers_hash=None), ConnectionRefusedError(22, 'The remote computer refused the network connection', None, 1225, None))
        port       = 57347
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
        self       = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
        server_hostname = None
        sslcontext = None
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        traces     = []
#x1B[1m#x1B[31maiohttp\connector.py#x1B[0m:1561: in _create_direct_connection
    #x1B[0mtransp, proto = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._wrap_create_connection(#x1B[90m#x1B[39;49;00m
        addr_infos = []
        client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
        fingerprint = None
        host       = 'localhost'
        hosts      = [{'family': <AddressFamily.AF_INET6: 23>, 'flags': <AddressInfo.AI_NUMERICHOST|AI_NUMERICSERV: 12>, 'host': '::1', 'ho...INET: 2>, 'flags': <AddressInfo.AI_NUMERICHOST|AI_NUMERICSERV: 12>, 'host': '127.0.0.1', 'hostname': 'localhost', ...}]
        last_exc   = ClientConnectorError(ConnectionKey(host='localhost', port=57347, is_ssl=False, ssl=True, proxy=None, proxy_auth=None, ...headers_hash=None), ConnectionRefusedError(22, 'The remote computer refused the network connection', None, 1225, None))
        port       = 57347
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
        self       = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
        server_hostname = None
        sslcontext = None
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        traces     = []
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
addr_infos = []
req = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
args = (functools.partial(<class 'aiohttp.client_proto.ResponseHandler'>, loop=<ProactorEventLoop running=False closed=False debug=False>),)
kwargs = {'server_hostname': None, 'ssl': None}

    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m_wrap_create_connection#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        *args: Any,#x1B[90m#x1B[39;49;00m
        addr_infos: #x1B[96mlist#x1B[39;49;00m[AddrInfoType],#x1B[90m#x1B[39;49;00m
        req: ClientRequest,#x1B[90m#x1B[39;49;00m
        timeout: #x1B[33m"#x1B[39;49;00m#x1B[33mClientTimeout#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        client_error: #x1B[96mtype#x1B[39;49;00m[#x1B[96mException#x1B[39;49;00m] = ClientConnectorError,#x1B[90m#x1B[39;49;00m
        **kwargs: Any,#x1B[90m#x1B[39;49;00m
    ) -> #x1B[96mtuple#x1B[39;49;00m[asyncio.Transport, ResponseHandler]:#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m ceil_timeout(#x1B[90m#x1B[39;49;00m
                timeout.sock_connect, ceil_threshold=timeout.ceil_threshold#x1B[90m#x1B[39;49;00m
            ):#x1B[90m#x1B[39;49;00m
                sock = #x1B[94mawait#x1B[39;49;00m aiohappyeyeballs.start_connection(#x1B[90m#x1B[39;49;00m
                    addr_infos=addr_infos,#x1B[90m#x1B[39;49;00m
                    local_addr_infos=#x1B[96mself#x1B[39;49;00m._local_addr_infos,#x1B[90m#x1B[39;49;00m
                    happy_eyeballs_delay=#x1B[96mself#x1B[39;49;00m._happy_eyeballs_delay,#x1B[90m#x1B[39;49;00m
                    interleave=#x1B[96mself#x1B[39;49;00m._interleave,#x1B[90m#x1B[39;49;00m
                    loop=#x1B[96mself#x1B[39;49;00m._loop,#x1B[90m#x1B[39;49;00m
                    socket_factory=#x1B[96mself#x1B[39;49;00m._socket_factory,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
                #x1B[90m# Add ssl_shutdown_timeout for Python 3.11+ when SSL is used#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
                    kwargs.get(#x1B[33m"#x1B[39;49;00m#x1B[33mssl#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    #x1B[95mand#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._ssl_shutdown_timeout#x1B[90m#x1B[39;49;00m
                    #x1B[95mand#x1B[39;49;00m sys.version_info >= (#x1B[94m3#x1B[39;49;00m, #x1B[94m11#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                ):#x1B[90m#x1B[39;49;00m
                    kwargs[#x1B[33m"#x1B[39;49;00m#x1B[33mssl_shutdown_timeout#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = #x1B[96mself#x1B[39;49;00m._ssl_shutdown_timeout#x1B[90m#x1B[39;49;00m
                #x1B[94mreturn#x1B[39;49;00m #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._loop.create_connection(*args, **kwargs, sock=sock)#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m cert_errors #x1B[94mas#x1B[39;49;00m exc:#x1B[90m#x1B[39;49;00m
            #x1B[94mraise#x1B[39;49;00m ClientConnectorCertificateError(req.connection_key, exc) #x1B[94mfrom#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[04m#x1B[96mexc#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m ssl_errors #x1B[94mas#x1B[39;49;00m exc:#x1B[90m#x1B[39;49;00m
            #x1B[94mraise#x1B[39;49;00m ClientConnectorSSLError(req.connection_key, exc) #x1B[94mfrom#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[04m#x1B[96mexc#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mOSError#x1B[39;49;00m #x1B[94mas#x1B[39;49;00m exc:#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m exc.errno #x1B[95mis#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m #x1B[95mand#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(exc, asyncio.TimeoutError):#x1B[90m#x1B[39;49;00m
                #x1B[94mraise#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>           #x1B[94mraise#x1B[39;49;00m client_error(req.connection_key, exc) #x1B[94mfrom#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[04m#x1B[96mexc#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host localhost:57347 ssl:default [The remote computer refused the network connection]#x1B[0m

addr_infos = []
args       = (functools.partial(<class 'aiohttp.client_proto.ResponseHandler'>, loop=<ProactorEventLoop running=False closed=False debug=False>),)
client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
kwargs     = {'server_hostname': None, 'ssl': None}
req        = <aiohttp.client_reqrep.ClientRequest object at 0x00000265AC843450>
self       = <aiohttp.connector.TCPConnector object at 0x00000265AC45DBD0>
timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)

#x1B[1m#x1B[31maiohttp\connector.py#x1B[0m:1302: ClientConnectorError

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

@dependabot dependabot bot force-pushed the dependabot/pip/3.14/virtualenv-20.36.0 branch from d205e21 to 86cd96f Compare January 8, 2026 11:02
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.35.4 to 20.36.0.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.35.4...20.36.0)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-version: 20.36.0
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
@dependabot dependabot bot force-pushed the dependabot/pip/3.14/virtualenv-20.36.0 branch from 86cd96f to 6c549e8 Compare January 8, 2026 11:13
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.

1 participant