a
    é´«j  ã                   @  sT  d dl mZ d dlZd dl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 d dlmZ dd	lmZ d
ddœdd„Ze de¡ ddddœdd„Zeg edƒ¢d‘d‘R ƒ ¡ ZedeƒZeded ƒZeded ƒZeded ƒZdddœd d!„Zddd"œd#d$„Zd%ejjv�r0ejj d%¡ ddd&œd'd(„Zd)dd*œd+d,„Z dS )-é    )ÚannotationsN)Úquote)Úunquote)Ú	urlencode)Úurlsplit)Ú
urlunsplité   )Úiter_multi_itemsÚUnicodeErrorztuple[str, int])ÚeÚreturnc                 C  s$   t | j| j| j… dd�}|| jfS )zRUsed in :func:`uri_to_iri` after unquoting to re-quote any
    invalid bytes.
    Ú ©Úsafe)r   ÚobjectÚstartÚend)r   Úout© r   úL/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/werkzeug/urls.pyÚ_codec_error_url_quote   s    r   úwerkzeug.url_quoteÚstrzt.Callable[[str], str])ÚnameÚcharsr   c                   sR   d  dd„ t|ƒD ƒ¡}t d|› d�tj¡‰ dddœ‡ fdd	„}d
| › �|_|S )zÑCreate a function that unquotes all percent encoded characters except those
    given. This allows working with unquoted characters if possible while not changing
    the meaning of a given part of a URL.
    ú|c                 s  s   | ]}t |ƒd ›V  qdS )Z02XN)Úord)Ú.0Úcr   r   r   Ú	<genexpr>"   ó    z%_make_unquote_part.<locals>.<genexpr>z((?:%(?:z))+)r   )Úvaluer   c                   sH   t ˆ  | ¡ƒ}g }|D ]&}| t|ddƒ¡ | t|dƒ¡ qd |¡S )Nzutf-8r   r   )ÚiterÚsplitÚappendr   ÚnextÚjoin)r!   Úpartsr   Úpart©Úpatternr   r   Ú_unquote_partial%   s    z,_make_unquote_part.<locals>._unquote_partialZ	_unquote_)r&   ÚsortedÚreÚcompileÚIÚ__name__)r   r   Úchoicesr+   r   r)   r   Ú_make_unquote_part   s
    
r2   é!   é%   é   ÚfragmentÚqueryz&=+#Úpathz/?#Úuserz:@/?#)Úurir   c                 C  s¶   t | ƒ}t|jƒ}t|jƒ}t|jƒ}|jr8t|jƒ}nd}d|v rPd|› d�}|j	rf|› d|j	› �}|j
r¢t|j
ƒ}|jr”t|jƒ}|› d|› �}|› d|› �}t|j||||fƒS )a-  Convert a URI to an IRI. All valid UTF-8 characters are unquoted,
    leaving all reserved and invalid characters quoted. If the URL has
    a domain, it is decoded from Punycode.

    >>> uri_to_iri("http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF")
    'http://\u2603.net/p\xe5th?q=\xe8ry%DF'

    :param uri: The URI to convert.

    .. versionchanged:: 3.0
        Passing a tuple or bytes, and the ``charset`` and ``errors`` parameters,
        are removed.

    .. versionchanged:: 2.3
        Which characters remain quoted is specific to each part of the URL.

    .. versionchanged:: 0.15
        All reserved and invalid characters remain quoted. Previously,
        only some reserved characters were preserved, and invalid bytes
        were replaced instead of left quoted.

    .. versionadded:: 0.6
    r   ú:ú[ú]ú@)r   Ú_unquote_pathr8   Ú_unquote_queryr7   Ú_unquote_fragmentr6   ÚhostnameÚ_decode_idnaÚportÚusernameÚ_unquote_userÚpasswordr   Úscheme)r:   r'   r8   r7   r6   ÚnetlocÚauthrG   r   r   r   Ú
uri_to_iri=   s$    




rK   )Úirir   c                 C  sÒ   t | ƒ}t|jdd�}t|jdd�}t|jdd�}|jrL|j d¡ d¡}nd}d|v rdd	|› d
�}|jrz|› d|j› �}|j	r¾t|j	dd�}|j
r°t|j
dd�}|› d|› �}|› d|› �}t|j||||fƒS )a,  Convert an IRI to a URI. All non-ASCII and unsafe characters are
    quoted. If the URL has a domain, it is encoded to Punycode.

    >>> iri_to_uri('http://\u2603.net/p\xe5th?q=\xe8ry%DF')
    'http://xn--n3h.net/p%C3%A5th?q=%C3%A8ry%DF'

    :param iri: The IRI to convert.

    .. versionchanged:: 3.0
        Passing a tuple or bytes, the ``charset`` and ``errors`` parameters,
        and the ``safe_conversion`` parameter, are removed.

    .. versionchanged:: 2.3
        Which characters remain unquoted is specific to each part of the URL.

    .. versionchanged:: 0.15
        All reserved characters remain unquoted. Previously, only some reserved
        characters were left unquoted.

    .. versionchanged:: 0.9.6
       The ``safe_conversion`` parameter was added.

    .. versionadded:: 0.6
    z%!$&'()*+,/:;=@r   z%!$&'()*+,/:;=?@z%!#$&'()*+,/:;=?@ÚidnaÚasciir   r;   r<   r=   z%!$&'()*+,;=r>   )r   r   r8   r7   r6   rB   ÚencodeÚdecoderD   rE   rG   r   rH   )rL   r'   r8   r7   r6   rI   rJ   rG   r   r   r   Ú
iri_to_uriq   s$    rQ   zitms-services)Údomainr   c              	   C  sœ   z|   d¡}W n ty$   |  Y S 0 z| d¡W S  tyD   Y n0 g }| d¡D ]<}z| | d¡¡ W qT tyŽ   | | d¡¡ Y qT0 qTd |¡S )NrN   rM   ó   .Ú.)rO   ÚUnicodeEncodeErrorrP   ÚUnicodeDecodeErrorr#   r$   r&   )rR   Údatar'   r(   r   r   r   rC   ¯   s    
rC   z1t.Mapping[str, str] | t.Iterable[tuple[str, str]])r7   r   c                 C  s   dd„ t | ƒD ƒ}t|dd�S )Nc                 S  s   g | ]}|d  dur|‘qS )r   Nr   )r   Úxr   r   r   Ú
<listcomp>É   r    z_urlencode.<locals>.<listcomp>z!$'()*,/:;?@r   )r	   r   )r7   Úitemsr   r   r   Ú
_urlencodeÈ   s    r[   )!Ú
__future__r   Úcodecsr-   ÚtypingÚtÚurllib.parseÚurllibr   r   r   r   r   Zdatastructuresr	   r   Úregister_errorr2   ÚbytesÚrangerP   Z_always_unsaferA   r@   r?   rF   rK   rQ   ÚparseÚuses_netlocr$   rC   r[   r   r   r   r   Ú<module>   s0   

4: