U '7`a@sddlZddlmZmZmZmZmZmZddlm Z m Z ddl m Z ddl mZddlmZdZerpdd lmZed Ze eeee fd d d ZeedddZee geefZee egeefZddde deeeee edddZdedddZdS)N) TYPE_CHECKING AwaitableCallableTupleTypeTypeVar)HTTPPermanentRedirect _HTTPMove)Request)StreamResponse) SystemRoute) middlewarenormalize_path_middleware) Application_Func)requestpathreturncs@|j|d}|jj|IdH}||_|jdkr8d|fSd|fS)N)Zrel_urlTF)ZcloneappZrouterZresolveZ _match_infoZhttp_exception)rrZ alt_request match_inforJ/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_middlewares.py_check_request_resolvess   r)frcCs d|_|S)Nr)Z__middleware_version__)rrrrr srTF) append_slash remove_slash merge_slashesredirect_class)rrrrrcs.o }ttttdfdd }|S)a Middleware factory which produces a middleware that normalizes the path of a request. By normalizing it means: - Add or remove a trailing slash to the path. - Double slashes are replaced by one. The middleware returns as soon as it finds a path that resolves correctly. The order if both merge and append/remove are enabled is 1) merge slashes 2) append/remove slash 3) both merge slashes and append/remove slash. If the path resolves with at least one of those conditions, it will redirect to the new path. Only one of `append_slash` and `remove_slash` can be enabled. If both are `True` the factory will raise an assertion error If `append_slash` is `True` the middleware will append a slash when needed. If a resource is defined with trailing slash and the request comes without it, it will append it automatically. If `remove_slash` is `True`, `append_slash` must be `False`. When enabled the middleware will remove trailing slashes and redirect if the resource is defined If merge_slashes is True, merge multiple consecutive slashes in the path into one. rhandlerrcs0t|jjtr"g}d|jkr:|jdd\}}d|}n d}|j}r\|tdd|rz|j dsz||dr|j dr||ddrr|tdd|drrtdd|}||dd|D]8}tdd|}t ||IdH\}}|r|j|q||IdHS)N?rz//+/z^//+) isinstancerZrouter Zraw_pathsplitappendresubrendswithr)rr Zpaths_to_checkrZqueryZmerged_slashesZresolvesrrrrrrimplQs0  z'normalize_path_middleware..implrr _Handlerr )rrrrZcorrect_configurationr,rr+rr)s% rr)rrcsttttdfdd }|S)Nrc s2|j||IdHW5QRSQRXdS)N)rZset_current_app)rr rrrr,tsz&_fix_request_current_app..implr-)rr,rr/r_fix_request_current_appssr0)r(typingrrrrrrZweb_exceptionsr r Z web_requestr Z web_responser Zweb_urldispatcherr __all__Zweb_apprrstrboolrrr.Z _Middlewarerr0rrrrs2       J