Skip to content

Bump platformdirs from 4.11.1 to 4.11.2 - #13419

Closed
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/pip/platformdirs-4.11.2
Closed

Bump platformdirs from 4.11.1 to 4.11.2#13419
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/pip/platformdirs-4.11.2

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 14, 2026

Copy link
Copy Markdown
Contributor

Bumps platformdirs from 4.11.1 to 4.11.2.

Release notes

Sourced from platformdirs's releases.

4.11.2

What's Changed

Full Changelog: tox-dev/platformdirs@4.11.1...4.11.2

Changelog

Sourced from platformdirs's changelog.

########### Changelog ###########

.. towncrier-draft-entries:: Unreleased

.. towncrier release notes start


4.11.3 (2026-08-13)


  • python -m platformdirs now lists :func:~platformdirs.user_desktop_dir, which was missing from the properties it prints. :pr:523
  • Stop :func:~platformdirs.site_data_dir, :func:~platformdirs.site_config_dir and :func:~platformdirs.site_applications_dir raising IndexError on Unix and macOS when $XDG_DATA_DIRS or $XDG_CONFIG_DIRS holds only separators and whitespace, such as ":". These values now fall back to the platform defaults, and each entry is stripped of surrounding whitespace. :pr:523

4.11.2 (2026-08-10)


  • Stop :meth:~platformdirs.PlatformDirs.iter_cache_dirs, :meth:~platformdirs.PlatformDirs.iter_state_dirs, :meth:~platformdirs.PlatformDirs.iter_log_dirs and :meth:~platformdirs.PlatformDirs.iter_runtime_dirs yielding the same directory twice on Unix when use_site_for_root is active - :pr:469 fixed this for the config and data iterators only. On macOS, :meth:~platformdirs.PlatformDirs.iter_cache_dirs now yields the Homebrew and /Library/Caches entries separately rather than one os.pathsep-joined string when multipath is set. :pr:520

4.11.1 (2026-08-07)


  • Fix :func:~platformdirs.user_desktop_dir on Windows builds without ctypes. CSIDL_DESKTOPDIRECTORY appeared only in the ctypes lookup table, so the registry and environment variable resolvers raised ValueError for it. :pr:519

4.11.0 (2026-07-21)


  • Declare support for Python 3.15 and run the test suite against it, currently in beta. :pr:512

4.10.1 (2026-07-18)


  • Stop leaking memory on repeated Windows folder lookups. get_win_folder_via_ctypes defined a fresh ctypes structure on every call, and each one registered a pointer type that was never released; the resolver is now built

... (truncated)

Commits

@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label Aug 14, 2026
@dependabot
dependabot Bot requested review from asvetlov and webknjaz as code owners August 14, 2026 10:41
@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label Aug 14, 2026
@github-actions
github-actions Bot enabled auto-merge (squash) August 14, 2026 10:41
@codecov

codecov Bot commented Aug 14, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
5007 1 5006 54
View the top 1 failed test(s) by shortest run time
tests.test_proxy_functional::test_https_proxy_unsupported_tls_in_tls[https]
Stack Traces | 31.3s run time
client_ssl_ctx = <ssl.SSLContext object at 0x10f4566c0>
secure_proxy_url = URL('https://127.0.0.1:50298')
web_server_endpoint_type = 'https'

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[33m"#x1B[39;49;00m#x1B[33mweb_server_endpoint_type#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, (#x1B[33m"#x1B[39;49;00m#x1B[33mhttps#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,))#x1B[90m#x1B[39;49;00m
    #x1B[37m@pytest#x1B[39;49;00m.mark.skipif(#x1B[90m#x1B[39;49;00m
        ASYNCIO_SUPPORTS_TLS_IN_TLS, reason=#x1B[33m"#x1B[39;49;00m#x1B[33masyncio on this python supports TLS in TLS#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[37m@pytest#x1B[39;49;00m.mark.filterwarnings(#x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mignore:.*ssl.OP_NO_SSL*#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m# Filter out the warning from#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m# https://github.com/abhinavsingh/proxy.py.../proxy/common/utils.py#L226#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m# otherwise this test will fail because the proxy will die with an error.#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[92mtest_https_proxy_unsupported_tls_in_tls#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        client_ssl_ctx: ssl.SSLContext,#x1B[90m#x1B[39;49;00m
        secure_proxy_url: URL,#x1B[90m#x1B[39;49;00m
        web_server_endpoint_type: #x1B[96mstr#x1B[39;49;00m,#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"""Ensure connecting to TLS endpoints w/ HTTPS proxy needs patching.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    This also checks that a helpful warning on how to patch the env#x1B[39;49;00m
    #x1B[33m    is displayed.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        url = URL.build(scheme=web_server_endpoint_type, host=#x1B[33m"#x1B[39;49;00m#x1B[33mpython.org#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94massert#x1B[39;49;00m url.host #x1B[95mis#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        escaped_host_port = #x1B[33m"#x1B[39;49;00m#x1B[33m:#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m.join((url.host.replace(#x1B[33m"#x1B[39;49;00m#x1B[33m.#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m), #x1B[96mstr#x1B[39;49;00m(url.port)))#x1B[90m#x1B[39;49;00m
        escaped_proxy_url = #x1B[96mstr#x1B[39;49;00m(secure_proxy_url).replace(#x1B[33m"#x1B[39;49;00m#x1B[33m.#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        conn = aiohttp.TCPConnector()#x1B[90m#x1B[39;49;00m
        sess = aiohttp.ClientSession(connector=conn)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        expected_warning_text = (#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m^#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mAn HTTPS request is being sent through an HTTPS proxy#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m. #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33m"#x1B[39;49;00m#x1B[33mThis support for TLS in TLS is known to be disabled #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33min the stdlib asyncio#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m. This is why you#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mll probably see #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33man error in the log below#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mIt is possible to enable it via monkeypatching#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m. #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mFor more details, see:#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m* https://bugs#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.python#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.org/issue37179#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m* https://github#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m..../cpython/pull/28073#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mYou can temporarily patch this as follows:#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m* https://docs#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.aiohttp#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m..../en/stable/client_advanced#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.html#proxy-support#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m* https://github#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m..../aiohttp/discussions/6044#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mn$#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        type_err = (#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mtransport <asyncio#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m.sslproto#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m._SSLProtocolTransport object at #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m0x[#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33md#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33mw]+> is not supported by start_tls#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m\#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        expected_exception_reason = (#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m^#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33m"#x1B[39;49;00m#x1B[33mCannot initialize a TLS-in-TLS connection to host #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mescaped_host_port#x1B[33m!s}#x1B[39;49;00m#x1B[33m through an underlying connection #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mto an HTTPS proxy #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mescaped_proxy_url#x1B[33m!s}#x1B[39;49;00m#x1B[33m ssl:#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mclient_ssl_ctx#x1B[33m!s}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m[#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mtype_err#x1B[33m!s}#x1B[39;49;00m#x1B[33m]#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#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#x1B[39;49;00m
        #x1B[94mwith#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
            mock.patch.object(aiohttp.connector, #x1B[33m"#x1B[39;49;00m#x1B[33maiofastnet#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            pytest.warns(#x1B[90m#x1B[39;49;00m
                #x1B[96mRuntimeWarning#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                match=expected_warning_text,#x1B[90m#x1B[39;49;00m
            ),#x1B[90m#x1B[39;49;00m
            pytest.raises(#x1B[90m#x1B[39;49;00m
                ClientConnectionError,#x1B[90m#x1B[39;49;00m
                match=expected_exception_reason,#x1B[90m#x1B[39;49;00m
            ) #x1B[94mas#x1B[39;49;00m conn_err,#x1B[90m#x1B[39;49;00m
        ):#x1B[90m#x1B[39;49;00m
>           #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m sess.get(url, proxy=secure_proxy_url, ssl=client_ssl_ctx):#x1B[90m#x1B[39;49;00m

client_ssl_ctx = <ssl.SSLContext object at 0x10f4566c0>
conn       = <aiohttp.connector.TCPConnector object at 0x10eac8760>
conn_err   = <ExceptionInfo for raises contextmanager>
escaped_host_port = 'python\\.org:443'
escaped_proxy_url = 'https://127\\.0\\.0\\.1:50298'
expected_exception_reason = '^Cannot initialize a TLS-in-TLS connection to host python\\.org:443 through an underlying connection to an HTTPS prox...0> [transport <asyncio\\.sslproto\\._SSLProtocolTransport object at 0x[\\d\\w]+> is not supported by start_tls\\(\\)]$'
expected_warning_text = '^An HTTPS request is being sent through an HTTPS proxy\\. This support for TLS in TLS is known to be disabled in the ...\\..../en/stable/client_advanced\\.html#proxy-support\\n\\* https://github\\..../aiohttp/discussions/6044\\n$'
secure_proxy_url = URL('https://127.0.0.1:50298')
sess       = <aiohttp.client.ClientSession object at 0x10f6cc370>
type_err   = 'transport <asyncio\\.sslproto\\._SSLProtocolTransport object at 0x[\\d\\w]+> is not supported by start_tls\\(\\)'
url        = URL('https://python.org')
web_server_endpoint_type = 'https'

#x1B[1m#x1B[31mtests/test_proxy_functional.py#x1B[0m:230: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31maiohttp/client.py#x1B[0m:1491: 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
        self       = <aiohttp.client._BaseRequestContextManager object at 0x10eac8fa0>
#x1B[1m#x1B[31maiohttp/client.py#x1B[0m:726: in _request
    #x1B[0mresp = #x1B[94mawait#x1B[39;49;00m handler(req)#x1B[90m#x1B[39;49;00m
        all_cookies = <BaseCookie: >
        allow_redirects = True
        auth_from_url = None
        auto_decompress = True
        chunked    = None
        compress   = False
        cookies    = None
        data       = None
        effective_middlewares = ()
        expect100  = False
        handle     = None
        handler    = <function _connect_and_send_request at 0x10b849a20>
        headers    = <CIMultiDict()>
        history    = []
        json       = None
        max_field_size = 8190
        max_headers = 128
        max_line_size = 8190
        max_redirects = 10
        method     = 'GET'
        middlewares = None
        params     = {}
        proxy      = URL('https://127.0.0.1:50298')
        proxy_     = URL('https://127.0.0.1:50298')
        proxy_headers = None
        raise_for_status = None
        read_bufsize = 262144
        read_until_eof = True
        real_timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=None, ceil_threshold=5)
        redirects  = 0
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x10eac9e70>
        resolved_proxy_headers = <CIMultiDict()>
        response_params = {'timer': <aiohttp.helpers.TimerContext object at 0x10f6c25c0>, 'skip_payload': False, 'read_until_eof': True, 'auto_decompress': True, ...}
        retry_persistent_connection = True
        self       = <aiohttp.client.ClientSession object at 0x10f6cc370>
        server_hostname = None
        skip_auto_headers = None
        skip_headers = None
        ssl        = <ssl.SSLContext object at 0x10f4566c0>
        str_or_url = URL('https://python.org')
        timeout    = <_SENTINEL.sentinel: 1>
        timer      = <aiohttp.helpers.TimerContext object at 0x10f6c25c0>
        tm         = <aiohttp.helpers.TimeoutHandle object at 0x10f9f6700>
        trace_request_ctx = None
        traces     = []
        url        = URL('https://python.org')
        version    = HttpVersion(major=1, minor=1)
#x1B[1m#x1B[31maiohttp/client.py#x1B[0m:238: in _connect_and_send_request
    #x1B[0mconn = #x1B[94mawait#x1B[39;49;00m connector.connect(req, traces=req._traces, timeout=req._timeout)#x1B[90m#x1B[39;49;00m
        connector  = <aiohttp.connector.TCPConnector object at 0x10eac8760>
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x10eac9e70>
#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:689: 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
        conn       = None
        key        = ConnectionKey(host='python.org', port=443, is_ssl=True, ssl=<ssl.SSLContext object at 0x10f4566c0>, proxy=URL('https://127.0.0.1:50298'), proxy_headers_hash=None, server_hostname=None)
        placeholder = <aiohttp.connector._TransportPlaceholder object at 0x10eac8d00>
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x10eac9e70>
        self       = <aiohttp.connector.TCPConnector object at 0x10eac8760>
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=None, ceil_threshold=5)
        traces     = []
#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:1269: in _create_connection
    #x1B[0m_, proto = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_proxy_connection(req, traces, timeout)#x1B[90m#x1B[39;49;00m
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x10eac9e70>
        self       = <aiohttp.connector.TCPConnector object at 0x10eac8760>
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=None, ceil_threshold=5)
        traces     = []
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <aiohttp.connector.TCPConnector object at 0x10eac8760>
req = <aiohttp.client_reqrep.ClientRequest object at 0x10eac9e70>, traces = []
timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=None, ceil_threshold=5)

    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m_create_proxy_connection#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m, req: ClientRequest, traces: #x1B[96mlist#x1B[39;49;00m[#x1B[33m"#x1B[39;49;00m#x1B[33mTrace#x1B[39;49;00m#x1B[33m"#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
    ) -> #x1B[96mtuple#x1B[39;49;00m[asyncio.BaseTransport, ResponseHandler]:#x1B[90m#x1B[39;49;00m
        proxy_req = #x1B[96mself#x1B[39;49;00m._update_proxy_auth_header_and_build_proxy_req(req)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# create connection to proxy server#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        transport, proto = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_direct_connection(#x1B[90m#x1B[39;49;00m
            proxy_req, [], timeout, client_error=ClientProxyConnectionError#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m req.is_ssl():#x1B[90m#x1B[39;49;00m
            #x1B[96mself#x1B[39;49;00m._warn_about_tls_in_tls(transport, req)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[90m# For HTTPS requests over HTTP proxy#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# we must notify proxy to tunnel connection#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# so we send CONNECT command:#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m#   CONNECT www.python.org:443 HTTP/1.1#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m#   Host: www.python.org#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m##x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# next we must do TLS handshake and so on#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# to do this we must wrap raw socket into secure one#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# asyncio handles this perfectly#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            proxy_req.method = hdrs.METH_CONNECT#x1B[90m#x1B[39;49;00m
            proxy_req.url = req.url#x1B[90m#x1B[39;49;00m
            key = req.connection_key._replace(proxy=#x1B[94mNone#x1B[39;49;00m, proxy_headers_hash=#x1B[94mNone#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            conn = _ConnectTunnelConnection(#x1B[96mself#x1B[39;49;00m, key, proto, #x1B[96mself#x1B[39;49;00m._loop)#x1B[90m#x1B[39;49;00m
            proxy_resp = #x1B[94mawait#x1B[39;49;00m proxy_req._send(conn)#x1B[90m#x1B[39;49;00m
            #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                protocol = conn._protocol#x1B[90m#x1B[39;49;00m
                #x1B[94massert#x1B[39;49;00m protocol #x1B[95mis#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[90m# read_until_eof=True will ensure the connection isn't closed#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[90m# once the response is received and processed allowing#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[90m# START_TLS to work on the connection below.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                protocol.set_response_params(#x1B[90m#x1B[39;49;00m
                    read_until_eof=#x1B[94mTrue#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                    timeout_ceil_threshold=#x1B[96mself#x1B[39;49;00m._timeout_ceil_threshold,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
                resp = #x1B[94mawait#x1B[39;49;00m proxy_resp.start(conn)#x1B[90m#x1B[39;49;00m
            #x1B[94mexcept#x1B[39;49;00m #x1B[96mBaseException#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                proxy_resp.close()#x1B[90m#x1B[39;49;00m
                conn.close()#x1B[90m#x1B[39;49;00m
                #x1B[94mraise#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                conn._protocol = #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[94mif#x1B[39;49;00m resp.status != #x1B[94m200#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                        message = resp.reason#x1B[90m#x1B[39;49;00m
                        #x1B[94mif#x1B[39;49;00m message #x1B[95mis#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                            message = HTTPStatus(resp.status).phrase#x1B[90m#x1B[39;49;00m
>                       #x1B[94mraise#x1B[39;49;00m ClientHttpProxyError(#x1B[90m#x1B[39;49;00m
                            proxy_resp.request_info,#x1B[90m#x1B[39;49;00m
                            resp.history,#x1B[90m#x1B[39;49;00m
                            status=resp.status,#x1B[90m#x1B[39;49;00m
                            message=message,#x1B[90m#x1B[39;49;00m
                            headers=resp.headers,#x1B[90m#x1B[39;49;00m
                        )#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                       aiohttp.client_exceptions.ClientHttpProxyError: 502, message='Bad Gateway', url='https://127.0.0.1:50298'#x1B[0m

conn       = Connection<ConnectionKey(host='python.org', port=443, is_ssl=True, ssl=<ssl.SSLContext object at 0x10f4566c0>, proxy=None, proxy_headers_hash=None, server_hostname=None)>
key        = ConnectionKey(host='python.org', port=443, is_ssl=True, ssl=<ssl.SSLContext object at 0x10f4566c0>, proxy=None, proxy_headers_hash=None, server_hostname=None)
message    = 'Bad Gateway'
proto      = <aiohttp.client_proto.ResponseHandler object at 0x10f52aab0>
protocol   = <aiohttp.client_proto.ResponseHandler object at 0x10f52aab0>
proxy_req  = <aiohttp.client_reqrep.ClientRequestBase object at 0x10eac8310>
proxy_resp = <ClientResponse(https://127.0.0.1:50298) [502 Bad Gateway]>
<HeadersDictProxy('Proxy-agent': 'proxy.py v2.4.10', 'Connection': 'close')>

req        = <aiohttp.client_reqrep.ClientRequest object at 0x10eac9e70>
resp       = <ClientResponse(https://127.0.0.1:50298) [502 Bad Gateway]>
<HeadersDictProxy('Proxy-agent': 'proxy.py v2.4.10', 'Connection': 'close')>

self       = <aiohttp.connector.TCPConnector object at 0x10eac8760>
timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=None, ceil_threshold=5)
traces     = []
transport  = <asyncio.sslproto._SSLProtocolTransport object at 0x10f6d7a00>

#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:1641: ClientHttpProxyError

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

Bumps [platformdirs](https://github.com/tox-dev/platformdirs) from 4.11.1 to 4.11.2.
- [Release notes](https://github.com/tox-dev/platformdirs/releases)
- [Changelog](https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst)
- [Commits](tox-dev/platformdirs@4.11.1...4.11.2)

---
updated-dependencies:
- dependency-name: platformdirs
  dependency-version: 4.11.2
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/pip/platformdirs-4.11.2 branch from f5d14a7 to 5566d41 Compare August 14, 2026 11:19
@codspeed-hq

codspeed-hq Bot commented Aug 14, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 84 untouched benchmarks
⏩ 83 skipped benchmarks1


Comparing dependabot/pip/platformdirs-4.11.2 (5566d41) with master (203c1c5)2

Open in CodSpeed

Footnotes

  1. 83 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.

  2. No successful run was found on master (4b7379b) during the generation of this report, so 203c1c5 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@dependabot @github

dependabot Bot commented on behalf of github Aug 17, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #13452.

@dependabot dependabot Bot closed this Aug 17, 2026
auto-merge was automatically disabled August 17, 2026 10:47

Pull request was closed

@dependabot
dependabot Bot deleted the dependabot/pip/platformdirs-4.11.2 branch August 17, 2026 10:47
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