o
    ê}”eZ  ã                   @  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é   )Ú
MapAdapter)ÚRule)ÚRequest)ÚResponsec                   @  ó   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   úd/Users/abhinavbhinder/Documents/map/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 | 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   5   s   

zRequestPath.__init__)r+   r   r   r   )r   r   r   r   Ú	__slots__r   r)   r   r   r!   r   r*   0   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]Úendpointr   r   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   r   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   r   Úvaluesr/   Úmethodú
str | NoneÚadapterúMapAdapter | Noner   r   c                   s,   t ƒ  |||¡ || _|| _|| _|| _d S r   )r   r   r0   r2   r3   r5   )r    r0   r2   r3   r5   r!   r   r   r   H   s
   
zBuildError.__init__úRule | Nonec                 C  s   |   | j¡S r   )Úclosest_ruler5   ©r    r   r   r   Ú	suggestedU   s   zBuildError.suggestedc                   s.   d‡ fdd„}|r|j jrt|j j|d�S d S )	NÚruler   r   Úfloatc                   sT   t dt d | jˆ j¡ ¡  dttˆ jpdƒ | j	¡ƒ dt| j
o%ˆ j| j
v ƒ gƒS )Ng\�Âõ(\ï?g{®Gáz„?r   )ÚsumÚdifflibZSequenceMatcherr0   ZratioÚboolÚsetr2   ÚissubsetÚ	argumentsÚmethodsr3   )r;   r9   r   r   Ú_score_ruleZ   s   
ÿýúÿz,BuildError.closest_rule.<locals>._score_rule)Úkey)r;   r   r   r<   )ÚmapZ_rulesÚmax)r    r5   rD   r   r9   r   r8   Y   s   zBuildError.closest_rulec                 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   r3   Úappendr2   Úsortedr:   rC   rB   Úunionr@   ÚdefaultsÚkeysÚjoin)r    ÚmessageZmissing_valuesr   r   r   Ú__str__k   s>   
ÿ
þý
ÿÿÿþÿ€
zBuildError.__str__r   )
r0   r   r2   r/   r3   r4   r5   r6   r   r   )r   r7   )r5   r6   r   r7   )r   r   )
r   r   r   r   r   r   r:   r8   rS   r)   r   r   r!   r   r1   C   s    	û
r1   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   rT   ‰   r   rT   c                   @  s   e Zd ZdZddd	„Zd
S )ÚNoMatch©Úhave_match_forÚwebsocket_mismatchrW   úset[str]rX   r?   r   r   c                 C  s   || _ || _d S r   rV   )r    rW   rX   r   r   r   r   ’   s   
zNoMatch.__init__N)rW   rY   rX   r?   r   r   )r   r   r   r,   r   r   r   r   r   rU   �   s    rU   )Ú
__future__r   r>   ÚtypingÚtÚ
exceptionsr   r   Úutilsr   r   ÚTYPE_CHECKINGZ_typeshed.wsgir   rF   r
   Úrulesr   Zwrappers.requestr   Zwrappers.responser   Ú	Exceptionr   r   r*   r-   ÚLookupErrorr1   rT   rU   r   r   r   r   Ú<module>   s(    
	F