
     f                       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Z ej        de           d)dZ eg  ed          ddR                                           Z ede          Z ededz             Z ededz             Z ededz             Zd*d Zd+d"Zd#ej        j        vrej        j                            d#           d,d%Zd-d'Z dS ).    )annotationsN)quote)unquote)	urlencode)urlsplit)
urlunsplit   )iter_multi_itemseUnicodeErrorreturntuple[str, int]c                d    t          | j        | j        | j                 d          }|| j        fS )zRUsed in :func:`uri_to_iri` after unquoting to re-quote any
    invalid bytes.
     safe)r   objectstartend)r   outs     P/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/werkzeug/urls.py_codec_error_url_quoter      s1     15)
3
3
3C:    werkzeug.url_quotenamestrcharst.Callable[[str], str]c                    d                     d t          |          D                       }t          j        d| dt          j                  d
fd}d	|  |_        |S )zCreate 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              3  8   K   | ]}t          |          d V  dS )02XN)ord).0cs     r   	<genexpr>z%_make_unquote_part.<locals>.<genexpr>"   s,      >>1#a&&>>>>>>r   z((?:%(?:z))+)valuer   r   c                   t                              |                     }g }|D ]I}|                    t          |dd                     |                    t	          |d                     Jd                    |          S )Nzutf-8r   r   )itersplitappendr   nextjoin)r'   partsr   partpatterns       r   _unquote_partialz,_make_unquote_part.<locals>._unquote_partial%   s|    W]]5))** 	( 	(DJJwtW.BCCDDDJJtE2''''wws||r   	_unquote_)r'   r   r   r   )r-   sortedrecompileI__name__)r   r   choicesr1   r0   s       @r   _make_unquote_partr9      s    
 hh>>u>>>>>Gj1G1112488G      !3D 2 2r   !   %      fragmentqueryz&=+#pathz/?#userz:@/?#uric                   t          |           }t          |j                  }t          |j                  }t          |j                  }|j        rt          |j                  }nd}d|v rd| d}|j	        r| 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_pathr?   _unquote_queryr>   _unquote_fragmentr=   hostname_decode_idnaportusername_unquote_userpasswordr   scheme)rA   r.   r?   r>   r=   netlocauthrO   s           r   
uri_to_irirS   =   s   0 SMME$$D5;''E 00H~ en--
f}}Vz *))UZ))~ $U^,,> 	($U^44H''X''D##6##u|VT5(CDDDr   iric                   t          |           }t          |j        d          }t          |j        d          }t          |j        d          }|j        r.|j                            d                              d          }nd}d|v rd	| d
}|j        r| d|j         }|j	        rAt          |j	        d          }|j
        rt          |j
        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   rC   rD   rE   z%!$&'()*+,;=rF   )r   r   r?   r>   r=   rJ   encodedecoderL   rM   rO   r   rP   )rT   r.   r?   r>   r=   rQ   rR   rO   s           r   
iri_to_urirZ   q   s6   2 SMME "3444D%+$6777EU^*=>>>H~ &&v..55g>>
f}}Vz *))UZ))~ $U^.999> 	(U^.AAAH''X''D##6##u|VT5(CDDDr   zitms-servicesdomainc                   	 |                      d          }n# t          $ r | cY S w xY w	 |                    d          S # t          $ r Y nw xY wg }|                    d          D ]c}	 |                    |                    d                     ,# t          $ r+ |                    |                    d                     Y `w xY wd                    |          S )NrW   rV      ..)rX   UnicodeEncodeErrorrY   UnicodeDecodeErrorr*   r+   r-   )r[   datar.   r/   s       r   rK   rK      s   }}W%%   {{6"""    E

4   / /	/LLV,,----! 	/ 	/ 	/LLW--.....	/ 88E??s/    ''A   
AA*(B2CC1t.Mapping[str, str] | t.Iterable[tuple[str, str]]c                V    d t          |           D             }t          |d          S )Nc                "    g | ]}|d          
|S )r	    )r$   xs     r   
<listcomp>z_urlencode.<locals>.<listcomp>   s!    DDD11Q43CQ3C3C3Cr   z!$'()*,/:;?@r   )r
   r   )r>   itemss     r   
_urlencoderi      s1    DD(//DDDEU0000r   )r   r   r   r   )r   r   r   r   r   r   )rA   r   r   r   )rT   r   r   r   )r[   r   r   r   )r>   rb   r   r   )!
__future__r   codecsr4   typingturllib.parseurllibr   r   r   r   r   datastructuresr
   r   register_errorr9   bytesrangerY   _always_unsaferI   rH   rG   rN   rS   rZ   parseuses_netlocr+   rK   ri   re   r   r   <module>rw      s   " " " " " "  				                           " " " " " " ! ! ! ! ! ! # # # # # # , , , , , ,     *,B C C C   2 1t1d1D112299;;&&z>BB ##G^f-DEE""6>E+ABB""6>G+CDD1E 1E 1E 1Eh4E 4E 4E 4Et &,222
L##O444   21 1 1 1 1 1r   