Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increase minimum yarl version to 1.12.0 #9268

Closed
wants to merge 5 commits into from
Closed

Increase minimum yarl version to 1.12.0 #9268

wants to merge 5 commits into from

Conversation

bdraco
Copy link
Member

@bdraco bdraco commented Sep 23, 2024

needs https://github.com/aio-libs/yarl/actions/runs/11000860360

The minimum version must increase because we need URL.path_safe to be able to fix the issue in PR #9267 and the original PR #8898

The minimum version must increase because we need ``URL.path_safe`` to be
able to fix #9267 and the original PR #8898
@bdraco bdraco added backport-3.10 Trigger automatic backporting to the 3.10 release branch by Patchback robot backport-3.11 Trigger automatic backporting to the 3.11 release branch by Patchback robot labels Sep 23, 2024
@psf-chronographer psf-chronographer bot added the bot:chronographer:provided There is a change note present in this PR label Sep 23, 2024
CHANGES/9268.breaking.rst Outdated Show resolved Hide resolved
@bdraco bdraco closed this Sep 23, 2024
@bdraco bdraco reopened this Sep 23, 2024
@bdraco bdraco marked this pull request as ready for review September 23, 2024 20:47
Copy link

codecov bot commented Sep 23, 2024

❌ 5 Tests Failed:

Tests completed Failed Passed Skipped
3318 5 3313 26
View the top 3 failed tests by shortest run time
tests.test_urldispatch test_http_exception_is_none_when_resolved
Stack Traces | 0.04s run time
cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x10c73be20>
when = 'call'
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[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: Optional[#x1B[90m#x1B[39;49;00m
            Union[Type[#x1B[96mBaseException#x1B[39;49;00m], Tuple[Type[#x1B[96mBaseException#x1B[39;49;00m], ...]]#x1B[90m#x1B[39;49;00m
        ] = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> #x1B[33m"#x1B[39;49;00m#x1B[33mCallInfo[TResult]#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m:#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    :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
        start = timing.time()#x1B[90m#x1B[39;49;00m
        precise_start = timing.perf_counter()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: Optional[TResult] = func()#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = 0.03998891599997023
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored in: <socket.socket fd=-1, family=AddressFamily.AF_U...rning: unclosed <socket.socket fd=22, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>\n') tblen=12>
func       = <function call_and_report.<locals>.<lambda> at 0x10c73be20>
precise_start = 999.04730325
precise_stop = 999.087292166
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
start      = 1727125188.12888
stop       = 1727125188.168891
when       = 'call'

#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10....../site-packages/_pytest/runner.py#x1B[0m:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10....../site-packages/_pytest/runner.py#x1B[0m:240: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds), when=when, reraise=reraise#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_exception_is_none_when_resolved>
        kwds       = {}
        runtest_hook = <HookCaller 'pytest_runtest_call'>
#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10.../site-packages/pluggy/_hooks.py#x1B[0m:513: 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_http_exception_is_none_when_resolved>}
        self       = <HookCaller 'pytest_runtest_call'>
#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10.../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_call'
        kwargs     = {'item': <Function test_http_exception_is_none_when_resolved>}
        methods    = [<HookImpl plugin_name='runner', plugin=<module '_pytest.runner' from '....../Library/Frameworks/Python.framework/Versions/3........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10........./site-packages/_pytest/unraisableexception.py'>>, ...]
        self       = <_pytest.config.PytestPluginManager object at 0x10453cac0>
#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10....../site-packages/_pytest/threadexception.py#x1B[0m:87: in pytest_runtest_call
    #x1B[0m#x1B[94myield from#x1B[39;49;00m thread_exception_runtest_hook()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10....../site-packages/_pytest/threadexception.py#x1B[0m:63: in thread_exception_runtest_hook
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        cm         = <_pytest.threadexception.catch_threading_exception object at 0x10a99f280>
#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10........./site-packages/_pytest/unraisableexception.py#x1B[0m:90: in pytest_runtest_call
    #x1B[0m#x1B[94myield from#x1B[39;49;00m unraisable_exception_runtest_hook()#x1B[90m#x1B[39;49;00m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    #x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92munraisable_exception_runtest_hook#x1B[39;49;00m() -> Generator[#x1B[94mNone#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]:#x1B[90m#x1B[39;49;00m
        #x1B[94mwith#x1B[39;49;00m catch_unraisable_exception() #x1B[94mas#x1B[39;49;00m cm:#x1B[90m#x1B[39;49;00m
            #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mfinally#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m cm.unraisable:#x1B[90m#x1B[39;49;00m
                    #x1B[94mif#x1B[39;49;00m cm.unraisable.err_msg #x1B[95mis#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                        err_msg = cm.unraisable.err_msg#x1B[90m#x1B[39;49;00m
                    #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                        err_msg = #x1B[33m"#x1B[39;49;00m#x1B[33mException ignored in#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    msg = #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m{#x1B[39;49;00merr_msg#x1B[33m}#x1B[39;49;00m#x1B[33m: #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mcm.unraisable.object#x1B[33m!r}#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m\n#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    msg += #x1B[33m"#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m.join(#x1B[90m#x1B[39;49;00m
                        traceback.format_exception(#x1B[90m#x1B[39;49;00m
                            cm.unraisable.exc_type,#x1B[90m#x1B[39;49;00m
                            cm.unraisable.exc_value,#x1B[90m#x1B[39;49;00m
                            cm.unraisable.exc_traceback,#x1B[90m#x1B[39;49;00m
                        )#x1B[90m#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: <socket.socket fd=-1, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>#x1B[0m
#x1B[1m#x1B[31mE                   #x1B[0m
#x1B[1m#x1B[31mE                   Traceback (most recent call last):#x1B[0m
#x1B[1m#x1B[31mE                     File ".../aiohttp/aiohttp/test_utils.py", line 569, in teardown_test_loop#x1B[0m
#x1B[1m#x1B[31mE                       gc.collect()#x1B[0m
#x1B[1m#x1B[31mE                   ResourceWarning: unclosed <socket.socket fd=22, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>#x1B[0m

cm         = <_pytest.unraisableexception.catch_unraisable_exception object at 0x109b1b430>
err_msg    = 'Exception ignored in'
msg        = 'Exception ignored in: <socket.socket fd=-1, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>\n\nTr...nResourceWarning: unclosed <socket.socket fd=22, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>\n'

#x1B[1m#x1B[........./Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10........./site-packages/_pytest/unraisableexception.py#x1B[0m:80: PytestUnraisableExceptionWarning
tests.test_web_middleware.TestNormalizePathMiddleware test_add_trailing_when_necessary[pyloop-/resource2/a/b%2Fc-200]
Stack Traces | 0.041s run time
self = <test_web_middleware.TestNormalizePathMiddleware object at 0x1096cba90>
path = '....../resource2/a/b%2Fc', status = 200
cli = <function cli.<locals>.wrapper at 0x10c670550>

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        #x1B[33m"#x1B[39;49;00m#x1B[33mpath, status#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        [#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m404#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1/?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m404#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2/?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m....../resource2/a/b#x1B[39;49;00m#x1B[33m%2F#x1B[39;49;00m#x1B[33mc#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m....../resource2/a/b#x1B[39;49;00m#x1B[33m%2F#x1B[39;49;00m#x1B[33mc/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#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[92mtest_add_trailing_when_necessary#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m, path: #x1B[96mstr#x1B[39;49;00m, status: #x1B[96mint#x1B[39;49;00m, cli: CLI#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        extra_middlewares = [web.normalize_path_middleware(merge_slashes=#x1B[94mFalse#x1B[39;49;00m)]#x1B[90m#x1B[39;49;00m
        client = #x1B[94mawait#x1B[39;49;00m cli(extra_middlewares)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        resp = #x1B[94mawait#x1B[39;49;00m client.get(path)#x1B[90m#x1B[39;49;00m
>       #x1B[94massert#x1B[39;49;00m resp.status == status#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       AssertionError: assert 404 == 200#x1B[0m
#x1B[1m#x1B[31mE        +  where 404 = <ClientResponse(http://127.0.0.1:50217....../resource2/a/b%2Fc) [404 Not Found]>\n<CIMultiDictProxy('Content-Type': 'text/plain; charset=utf-8', 'Content-Length': '14', 'Date': 'Mon, 23 Sep 2024 20:59:55 GMT', 'Server': 'Python/3.10 aiohttp/4.0.0a2.dev0')>\n.status#x1B[0m

cli        = <function cli.<locals>.wrapper at 0x10c670550>
client     = <aiohttp.test_utils.TestClient object at 0x10c850100>
extra_middlewares = [<function normalize_path_middleware.<locals>.impl at 0x10c6705e0>]
path       = '....../resource2/a/b%2Fc'
resp       = <ClientResponse(http://127.0.0.1:50217....../resource2/a/b%2Fc) [404 Not Found]>
<CIMultiDictProxy('Content-Type': 'text/pla...tf-8', 'Content-Length': '14', 'Date': 'Mon, 23 Sep 2024 20:59:55 GMT', 'Server': 'Python/3.10 aiohttp/4.0.0a2.dev0')>

self       = <test_web_middleware.TestNormalizePathMiddleware object at 0x1096cba90>
status     = 200

#x1B[1m#x1B[31mtests/test_web_middleware.py#x1B[0m:210: AssertionError
tests.test_web_middleware.TestNormalizePathMiddleware test_add_trailing_when_necessary[pyloop-/resource2/a/b%2Fc/-200]
Stack Traces | 0.041s run time
self = <test_web_middleware.TestNormalizePathMiddleware object at 0x1096cbbe0>
path = '....../resource2/a/b%2Fc/', status = 200
cli = <function cli.<locals>.wrapper at 0x10c6716c0>

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        #x1B[33m"#x1B[39;49;00m#x1B[33mpath, status#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        [#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m404#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource1/?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m404#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m/resource2/?p1=1&p2=2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m....../resource2/a/b#x1B[39;49;00m#x1B[33m%2F#x1B[39;49;00m#x1B[33mc#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[33m"#x1B[39;49;00m#x1B[33m....../resource2/a/b#x1B[39;49;00m#x1B[33m%2F#x1B[39;49;00m#x1B[33mc/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94m200#x1B[39;49;00m),#x1B[90m#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[92mtest_add_trailing_when_necessary#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m, path: #x1B[96mstr#x1B[39;49;00m, status: #x1B[96mint#x1B[39;49;00m, cli: CLI#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        extra_middlewares = [web.normalize_path_middleware(merge_slashes=#x1B[94mFalse#x1B[39;49;00m)]#x1B[90m#x1B[39;49;00m
        client = #x1B[94mawait#x1B[39;49;00m cli(extra_middlewares)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        resp = #x1B[94mawait#x1B[39;49;00m client.get(path)#x1B[90m#x1B[39;49;00m
>       #x1B[94massert#x1B[39;49;00m resp.status == status#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       AssertionError: assert 404 == 200#x1B[0m
#x1B[1m#x1B[31mE        +  where 404 = <ClientResponse(http://127.0.0.1:50219....../resource2/a/b%2Fc/) [404 Not Found]>\n<CIMultiDictProxy('Content-Type': 'text/plain; charset=utf-8', 'Content-Length': '14', 'Date': 'Mon, 23 Sep 2024 20:59:55 GMT', 'Server': 'Python/3.10 aiohttp/4.0.0a2.dev0')>\n.status#x1B[0m

cli        = <function cli.<locals>.wrapper at 0x10c6716c0>
client     = <aiohttp.test_utils.TestClient object at 0x10a98f0a0>
extra_middlewares = [<function normalize_path_middleware.<locals>.impl at 0x10c6717e0>]
path       = '....../resource2/a/b%2Fc/'
resp       = <ClientResponse(http://127.0.0.1:50219....../resource2/a/b%2Fc/) [404 Not Found]>
<CIMultiDictProxy('Content-Type': 'text/pl...tf-8', 'Content-Length': '14', 'Date': 'Mon, 23 Sep 2024 20:59:55 GMT', 'Server': 'Python/3.10 aiohttp/4.0.0a2.dev0')>

self       = <test_web_middleware.TestNormalizePathMiddleware object at 0x1096cbbe0>
status     = 200

#x1B[1m#x1B[31mtests/test_web_middleware.py#x1B[0m:210: AssertionError

To view individual test run time comparison to the main branch, go to the Test Analytics Dashboard

@bdraco
Copy link
Member Author

bdraco commented Sep 23, 2024

Looks like I'm going to have to merge this into #9267 to get it to be a single change without breaking anything

@bdraco bdraco closed this Sep 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport-3.10 Trigger automatic backporting to the 3.10 release branch by Patchback robot backport-3.11 Trigger automatic backporting to the 3.11 release branch by Patchback robot bot:chronographer:provided There is a change note present in this PR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant