o
    ßý°jî  ã                   @  s  d dl mZ d dlZd dlZddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ejrGd dlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ G dd„ deƒZG dd„ deeƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZG dd„ deƒZG dd„ deƒZdS )é    )ÚannotationsNé   )Ú
BadRequest)ÚHTTPException)Úcached_property)Úredirect)ÚWSGIEnvironment)ÚRequest)ÚResponseé   )Ú
MapAdapter)ÚRulec                   @  ó   e Zd ZdZdS )ÚRoutingExceptionzxSpecial exceptions that require the application to redirect, notifying
    about missing urls, etc.

    :internal:
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úŽ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/werkzeug/routing/exceptions.pyr      ó    r   c                      s6   e Zd ZdZdZd‡ fdd„Z				dddd„Z‡  ZS )ÚRequestRedirectzÜRaise if the map requests a redirect. This is for example the case if
    `strict_slashes` are activated and an url that requires a trailing slash.

    The attribute `new_url` contains the absolute destination url.
    i4  Únew_urlÚstrÚreturnÚNonec                   s   t ƒ  |¡ || _d S ©N)ÚsuperÚ__init__r   )Úselfr   ©Ú	__class__r   r   r   %   s   
zRequestRedirect.__init__NÚenvironú WSGIEnvironment | Request | NoneÚscopeúdict[str, t.Any] | Noner
   c                 C  s   t | j| jƒS r   )r   r   Úcode)r    r#   r%   r   r   r   Úget_response)   s   zRequestRedirect.get_response)r   r   r   r   )NN)r#   r$   r%   r&   r   r
   )r   r   r   r   r'   r   r(   Ú__classcell__r   r   r!   r   r      s    ýr   c                      s&   e Zd ZdZdZd	‡ fdd„Z‡  ZS )
ÚRequestPathzInternal exception.)Ú	path_infor+   r   r   r   c                   s   t ƒ  ¡  || _d S r   )r   r   r+   )r    r+   r!   r   r   r   6   s   

zRequestPath.__init__)r+   r   r   r   )r   r   r   r   Ú	__slots__r   r)   r   r   r!   r   r*   1   s    r*   c                      s"   e Zd ZdZd
‡ fdd	„Z‡  ZS )ÚRequestAliasRedirectzAThis rule is an alias and wants to redirect to the canonical URL.Úmatched_valuesút.Mapping[str, t.Any]Úendpointút.Anyr   r   c                   s   t ƒ  ¡  || _|| _d S r   )r   r   r.   r0   )r    r.   r0   r!   r   r   r   >   s   

zRequestAliasRedirect.__init__)r.   r/   r0   r1   r   r   )r   r   r   r   r   r)   r   r   r!   r   r-   ;   s    r-   c                      sH   e Zd ZdZ	dd‡ fdd„Zeddd„ƒZddd„Zddd„Z‡  Z	S )Ú
BuildErrorz_Raised if the build system cannot find a URL for an endpoint with the
    values provided.
    Nr0   r1   Úvaluesr/   Úmethodú
str | NoneÚadapterúMapAdapter | Noner   r   c                   s,   t ƒ  |||¡ || _|| _|| _|| _d S r   )r   r   r0   r3   r4   r6   )r    r0   r3   r4   r6   r!   r   r   r   I   s
   
zBuildError.__init__úRule | Nonec                 C  s   |   | j¡S r   )Úclosest_ruler6   ©r    r   r   r   Ú	suggestedV   s   zBuildError.suggestedc                   s.   d‡ fdd„}|r|j jrt|j j|d�S d S )	NÚruler   r   Úfloatc                   s\   t dt d t| jƒtˆ jƒ¡ ¡  dttˆ jpdƒ 	| j
¡ƒ dt| jo)ˆ j| jv ƒ gƒS )Ng\�Âõ(\ï?g{®Gáz„?r   )ÚsumÚdifflibÚSequenceMatcherr   r0   ÚratioÚboolÚsetr3   ÚissubsetÚ	argumentsÚmethodsr4   )r<   r:   r   r   Ú_score_rule[   s   üú÷ÿz,BuildError.closest_rule.<locals>._score_rule)Úkey)r<   r   r   r=   )ÚmapÚ_rulesÚmax)r    r6   rG   r   r:   r   r9   Z   s   zBuildError.closest_ruler   c                 C  s   d| j ›�g}| jr| d| j›d�¡ | jr"| dt| jƒ›�¡ | d¡ | jr{| j | jj krp| jrN| jjd urN| j| jjvrN| dt| jjƒ›d�¡ | jj t	| jj
pXdƒ¡t	| j ¡ ƒ }|ro| d	t|ƒ›d�¡ n| d
| jj ›d�¡ d |¡S )Nz!Could not build url for endpoint z (ú)z with values Ú.z Did you mean to use methods ú?r   z" Did you forget to specify values z Did you mean z	 instead?Ú )r0   r4   Úappendr3   Úsortedr;   rF   rE   ÚunionrC   ÚdefaultsÚkeysÚjoin)r    ÚmessageÚmissing_valuesr   r   r   Ú__str__o   s:   
ÿ
ÿÿÿþÿ€
zBuildError.__str__r   )
r0   r1   r3   r/   r4   r5   r6   r7   r   r   )r   r8   )r6   r7   r   r8   )r   r   )
r   r   r   r   r   r   r;   r9   rX   r)   r   r   r!   r   r2   D   s    	û
r2   c                   @  r   )ÚWebsocketMismatchz�The only matched rule is either a WebSocket and the request is
    HTTP, or the rule is HTTP and the request is a WebSocket.
    Nr   r   r   r   r   rY   �   r   rY   c                   @  s   e Zd ZdZddd	„Zd
S )ÚNoMatch©Úhave_match_forÚwebsocket_mismatchr\   úset[str]r]   rB   r   r   c                 C  s   || _ || _d S r   r[   )r    r\   r]   r   r   r   r   –   s   
zNoMatch.__init__N)r\   r^   r]   rB   r   r   )r   r   r   r,   r   r   r   r   r   rZ   “   s    rZ   )Ú
__future__r   r?   ÚtypingÚtÚ
exceptionsr   r   Úutilsr   r   ÚTYPE_CHECKINGÚ_typeshed.wsgir   Úwrappers.requestr	   Úwrappers.responser
   rI   r   Úrulesr   Ú	Exceptionr   r   r*   r-   ÚLookupErrorr2   rY   rZ   r   r   r   r   Ú<module>   s(    
	I