
    gE                         d dl Z d dlmZmZmZmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZ d	Zerdd
lmZ  ed      Zdededeeef   fdZdedefdZdddeddedededee
   def
dZdddefdZy)    N)TYPE_CHECKINGTupleTypeTypeVar   )Handler
Middleware)HTTPMoveHTTPPermanentRedirect)Request)StreamResponse)SystemRoute)
middlewarenormalize_path_middleware)Application_Funcrequestpathreturnc                    K   | j                  |      }| j                  j                  j                  |       d {   }||_        |j
                  d|fS d| fS 7 w)N)rel_urlTF)cloneapprouterresolve_match_infohttp_exception)r   r   alt_request
match_infos       L/var/www/openai/venv/lib/python3.12/site-packages/aiohttp/web_middlewares.py_check_request_resolvesr!      sa     ----K{{))11+>>J(K  ([  '> ?s   ;AA Afc                     d| _         | S )Nr   )__middleware_version__)r"   s    r    r   r   !   s     AH    TF)append_slashremove_slashmerge_slashesredirect_classr&   r'   r(   r)   c                 v      xr  }|sJ d       t         dt        dt        dt        f fd       }|S )a  Factory for producing a middleware that normalizes the path of a request.

    Normalizing 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.
    z#Cannot both remove and append slashr   handlerr   c                 h  K   t        | j                  j                  t              rug }d| j                  v r%| j                  j                  dd      \  }}d|z   }nd}| j                  }r&|j                  t        j                  dd|             r/| j                  j                  d      s|j                  |dz          
r/| j                  j                  d      r|j                  |d d        r+r)|j                  t        j                  dd|dz                r-
r+t        j                  dd|      }|j                  |d d        |D ]G  }t        j                  dd|      }t        | |       d {   \  }} |s4 	| j                  |z           ||        d {   S 7 07 w)N?r    z//+/z^//+)
isinstancer   router   raw_pathsplitappendresubr   endswithr!   )r   r+   paths_to_checkr   querymerged_slashesresolvesr&   r(   r)   r'   s          r    implz'normalize_path_middleware.<locals>.implL   s    g((..<Ng&&&%..44S!<ee''%%bffUC&>?GLL$9$9#$>%%dSj1 5 5c :%%d3Bi0%%bffUC&DE!#sD!9%%nSb&9:&vvfc40*A'4*P$P!'()9)9E)ABB	 ' W%%%	 %Q &s*   E:F2=F.>	F2!F2)F0*F20F2r   r   r   r   )r&   r'   r(   r)   correct_configurationr=   s   ````  r    r   r   &   sQ    F ".!>,? G"GG &G &g &. & &< Kr%   r   r   c                 J     t         dt        dt        dt        f fd       }|S )Nr   r+   r   c                    K   | j                   }|j                  }|_        	  ||        d {   ||_        S 7 # ||_        w xY ww)N)r   current_app)r   r+   r   prevr   s       r    r=   z&_fix_request_current_app.<locals>.implo   sK     ''
%%!$
	* ))%)J" *%)J"s%    A	= ;= A	= 	AA	r>   )r   r=   s   ` r    _fix_request_current_apprD   n   s1    *G *g *. * * Kr%   )r6   typingr   r   r   r   typedefsr   r	   web_exceptionsr
   r   web_requestr   web_responser   web_urldispatcherr   __all__web_appr   r   strboolr!   r   r   rD    r%   r    <module>rP      s    	 6 6 ) ;   ( *
 $	7 	# 	%gBV 	% E  %:EE E 	E
 NE EP- J r%   