� K�grH� ��dZddlmZddlZddlZddlZddlZddlmZdZ dZ dZ ej d ��Z d �d �ed d ��D����Zd �d�ed d ��D����Zd �d�ed d ��D����Zd �d�ed d ��D����Zd �d�ed d ��D����Zd �d�ed d ��D����Zej d�ddddd�����Zej d�ddd�����Zej d��ej d��ej d��ej d��ej d��ej d��ej d��ej d��d�Zej d ��Zej d!��ZGd"�d#ej��Zd=d>d)�Zd?d+�Zd@d0�Z dAd6�Z!dBd7�Z"dCd9�Z#dDd;�Z$dDd<�Z%dS)Ea� An implementation of `urlparse` that provides URL validation and normalization as described by RFC3986. We rely on this implementation rather than the one in Python's stdlib, because: * It provides more complete URL validation. * It properly differentiates between an empty querystring and an absent querystring, to distinguish URLs with a trailing '?'. * It handles scheme, hostname, port, and path normalization. * It supports IDNA hostnames, normalizing them to their encoded form. * The API supports passing individual components, as well as the complete URL string. Previously we relied on the excellent `rfc3986` package to handle URL parsing and validation, but this module provides a simpler alternative, with less indirection required. �)� annotationsN�)� InvalidURLizBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~z !$&'()*+,;=z%[A-Fa-f0-9]{2}�c�4�g|]}|dv�t|����S))� �"�<�>�`��chr��.0�is �_/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/httpx/_urlparse.py� <listcomp>r,�)��R�R�R��!�3Q�*Q�*Q�S��V�V�*Q�*Q�*Q�r�c�4�g|]}|dv�t|����S))rr �#r r r rs rrr2rrc�4�g|]}|dv�t|����S)) rr rr r �?r �{�}r rs rrr8s4����� � �M� M� M� �A��� M� M� Mrc�4�g|]}|dv�t|����S�)rr rr r rr rr�/�:�;�=�@�[�\�]�^�|r rs rrrC�F����� � �G� G� G� �A��� G� G� Grc�4�g|]}|dv�t|����Srr rs rrrMr)rc�4�g|]}|dv�t|����S))rr rr r rr rrrr!r"r#r$r%r&r'r(r rs rrrZsF����� � �A� A� A� �A��� A� A� Arz�(?:(?P<scheme>{scheme}):)?(?://(?P<authority>{authority}))?(?P<path>{path})(?:\?(?P<query>{query}))?(?:#(?P<fragment>{fragment}))?z([a-zA-Z][a-zA-Z0-9+.-]*)?z[^/?#]*z[^?#]*z[^#]*z.*��scheme� authority�path�query�fragmentzA(?:(?P<userinfo>{userinfo})@)?(?P<host>{host}):?(?P<port>{port})?z(\[.*\]|[^:@]*))�userinfo�host�portz[^@]*z(\[.*\]|[^:]*))r-r.r/r0r1r2r3r4z ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$z^\[.*\]$c��eZdZUded<ded<ded<ded<ded<ded <ded <edd ���Zedd ���Zdd�Zdd�ZdS)� ParseResult�strr-r2r3� int | Noner4r/� str | Noner0r1�returnc��d�|jr |j�d�ndd|jvr d|j�d�n|j|j� d|j��ndg��S)Nr�@�:�[�])�joinr2r3r4��selfs rr.zParseResult.authority�sq���w�w�'+�}�<�4�=�#�#�#�#�"�$'�4�9�$4�$4� �D�I� � � � �$�)�#'�9�#8��D�I����b� � � � rc��d�d|jvr d|j�d�n|j|j� d|j��ndg��S)Nrr=r>r?)r@r3r4rAs r�netloczParseResult.netloc�sW���w�w�$'�4�9�$4�$4� �D�I� � � � �$�)�#'�9�#8��D�I����b� � � � r�kwargsc ��|s|S|j|j|j|j|jd�}|�|��t di|��S)Nr,r�r)r-r.r/r0r1�update�urlparse)rBrE�defaultss r� copy_withzParseResult.copy_with�s^��� ��K��k����I��Z�� �  � �� ��������'�'�h�'�'�'rc���|j}d�|jr |j�d�nd|rd|��nd|j|j� d|j��nd|j� d|j��ndg��S)Nrr=�//�?�#)r.r@r-r/r0r1)rBr.s r�__str__zParseResult.__str__�s����N� ��w�w�%)�[�8�4�;�!�!�!�!�b�$-�5� �Y� � � �2�� �$(�J�$:� �D�J� � � ��'+�}�'@�#�D�M�#�#�#�b�  � � � rN)r:r7)rEr9r:r6) �__name__� __module__� __qualname__�__annotations__�propertyr.rDrKrP�rrr6r6�s���������K�K�K��M�M�M� �I�I�I����� �I�I�I��������� � � � ��X� �� � � ��X� � (� (� (� (�  �  �  �  �  �  rr6�urlr7rEr9r:c � �t|��tkrtd���td�|D����rFt d�|D����}|�|��}d|�d|�d�}t|���d|vr1|d}t |t��rt|��n||d<d|vr6|� d��pd }|� d ��\|d <}|d<d |vsd |vrft|� d d ��pd t���}t|� d d ��pd t���} | r|�d | ��n||d<d|vr=|� d��pd } | � d��\|d<} |d<| sd|d<d |vrN|�d ��pd } d | vr3| �d��r| �d��s d| �d�|d <|���D]�\} }|��t|��tkrtd| �d����td�|D����rIt d�|D����}|�|��}d| �d|�d|�d�}t|���t$| �|��std| �d������t(�|��}|�J�|���}|�d|d��pd }|�d|d��pd }|�d|d��pd }|�d|d��}|�d |d ��}t.�|��}|�J�|���}|�d|d��pd }|�d |d ��pd } |�d|d��}|���}t|t2���}t5| ��}t7||��}|d k}|d kp |d kp|du}t9|||�!��|s|rt;|��}t|t<���}|�dnt|t>���} |�dnt|t@���}!tC|||||| |!��S)"Nz URL too longc3�hK�|]-}|���o|��� V��.dS�N��isascii� isprintable�r�chars r� <genexpr>zurlparse.<locals>.<genexpr>�s>���� E� E��4�<�<�>�>� 4�$�"2�"2�"4�"4�4� E� E� E� E� E� Erc3�jK�|].}|����|����*|V��/dSrZr[r^s rr`zurlparse.<locals>.<genexpr>�s@����V�V�T�D�L�L�N�N�V�4�CS�CS�CU�CU�V�D�V�V�V�V�V�Vrz.Invalid non-printable ASCII character in URL, z at position �.r4rDrr=r3�username�password��safer2�raw_pathrNr/r0r>r?zURL component 'z ' too longc3�hK�|]-}|���o|��� V��.dSrZr[r^s rr`zurlparse.<locals>.<genexpr>s>����O�O��4�<�<�>�>�<�$�*:�*:�*<�*<�&<�O�O�O�O�O�Orc3�jK�|].}|����|����*|V��/dSrZr[r^s rr`zurlparse.<locals>.<genexpr>sW������!�d�l�l�n�n��EI�EU�EU�EW�EW��������rz-Invalid non-printable ASCII character in URL z component, zInvalid URL component '�'r-r.r1)� has_scheme� has_authority)"�len�MAX_URL_LENGTHr�any�next�find� isinstance�intr7�pop� partition�quote� USERNAME_SAFE� PASSWORD_SAFE�get� startswith�endswith�items�COMPONENT_REGEX� fullmatch� URL_REGEX�match� groupdict�AUTHORITY_REGEX�lower� USERINFO_SAFE� encode_host�normalize_port� validate_path�normalize_path� PATH_SAFE� QUERY_SAFE� FRAG_SAFEr6)"rWrEr_�idx�errorr4rD�_rcrdrg� seperatorr3�key�value� url_match�url_dictr-r.r/r0�frag�authority_match�authority_dictr2� parsed_scheme�parsed_userinfo� parsed_host� parsed_portrkrl� parsed_path� parsed_query� parsed_frags" rrIrI�s���  �3�x�x�.� � ���(�(�(� � E� E�� E� E� E�E�E� ��V�V�S�V�V�V�V�V���h�h�t�n�n�� X�T� X� X�RU� X� X� X� ������ �����f�~��&0��s�&;�&;�E��T������v���6������H�%�%�+���,2�,<�,<�S�,A�,A�)��v���6�&�>��V���z�V�3�3�����J��3�3�9�r� �N�N�N������J��3�3�9�r� �N�N�N��9A�O��5�5�8�5�5�5�x��z���V����:�:�j�)�)�/�R��5=�5G�5G��5L�5L�2��v�� �6�'�?�� #�"�F�7�O������z�z�&�!�!�'�R�� �$�;�;����� 4� 4�;����s�9K�9K�;�(��[�[�[�F�6�N� �l�l�n�n�C�C� ��U� � ��5�z�z�N�*�*� �!B�3�!B�!B�!B�C�C�C��O�O��O�O�O�O�O� (����%*��������j�j��&�&��3�C�3�3��3�3�,/�3�3�3��!��'�'�'�#�3�'�1�1�%�8�8� C� �!A�3�!A�!A�!A�B�B�B������$�$�I� � � � ��"�"�$�$�H��Z�Z��(�8�"4� 5� 5� ;��F�� � �;���(=�>�>�D�"�I� �:�:�f�h�v�.� /� /� 5�2�D� �J�J�w��� 1� 2� 2�E� �:�:�j�(�:�"6� 7� 7�D�&�+�+�I�6�6�O� � &� &� &�$�.�.�0�0�N��z�z�*�n�Z�&@�A�A�G�R�H� �:�:�f�n�V�4� 5� 5� ;��D� �:�:�f�n�V�4� 5� 5�D�  �����M� �� �>�>�>�O�"�4�(�(�K�,�T�6�:�:�K��"�$�J��2��M���!2�M�k��6M���$�:�]�K�K�K�K��$�]�$��d�#�#���T� �2�2�2�K�',�}�t�t�%��J�:W�:W�:W�L�&*�l�d�d��d��8S�8S�8S�K� �������� � �rr3c���|sdSt�|��r= tj|��n%#tj$rt d|�����wxYw|St �|��rM tj|dd���n%#tj$rt d|�����wxYw|dd�S|���r-d}t|� ��t|z���S tj |� �����d��S#tj$rt d |�����wxYw) NrzInvalid IPv4 address: r�����zInvalid IPv6 address: z"`{}%|\re�asciizInvalid IDNA hostname: )�IPv4_STYLE_HOSTNAMEr�� ipaddress� IPv4Address�AddressValueErrorr�IPv6_STYLE_HOSTNAME� IPv6Addressr\rvr�� SUB_DELIMS�idna�encode�decode� IDNAError)r3� WHATWG_SAFEs rr�r�\s��� �%B��r� � "� "�4� (� (�"B�  @� � !�$� '� '� '� '���*� @� @� @��>�d�>�>�?�?� ?� @����� � � "� "�4� (� (�B� @� � !�$�q��t�*� -� -� -� -���*� @� @� @��>�d�>�>�?�?� ?� @�����A�b�D�z�� �����B� !� ��T�Z�Z�\�\� �[�(@�A�A�A�A�=��{�4�:�:�<�<�(�(�/�/��8�8�8�� �>�=�=�=��;�4�;�;�<�<�<�=���s!�5�"A�7B�"B6�8D>�>"E r4�str | int | Noner-r8c���|�|dkrdS t|��}n #t$rtd|�����wxYwdddddd��|��}||krdS|S)NrzInvalid port: ��Pi�)�ftp�http�https�ws�wss)rs� ValueErrorrry)r4r-� port_as_int� default_ports rr�r��s��� �|�t�r�z�z��t�4��$�i�i� � �� �4�4�4��2�$�2�2�3�3�3�4�����r�C�r�#�N�N�R�R����L��l�"�"��t� �s��9r/rk�boolrl�Nonec���|r&|r$|�d��std���|sJ|sJ|�d��rtd���|�d��rtd���dSdSdS)z� Path validation rules that depend on if the URL contains a scheme or authority component. See https://datatracker.ietf.org/doc/html/rfc3986.html#section-3.3 �/z7For absolute URLs, path must be empty or begin with '/'rMz3Relative URLs cannot have a path starting with '//'r=z2Relative URLs cannot have a path starting with ':'N)rzr)r/rkrls rr�r��s����X� � X�����,�,� X��V�W�W� W� � S�m� S� �?�?�4� � � T��R�S�S� S� �?�?�3� � � S��Q�R�R� R� S� S� S� S� S� Src��d|vr|S|�d��}d|vrd|vr|Sg}|D]B}|dkr� |dkr|r|dgkr|����-|�|���Cd�|��S)z� Drop "." and ".." segments from a URL path. For example: normalize_path("/path/./to/somewhere/..") == "/path/to" rbr�z..r)�splitrt�appendr@)r/� components�output� components rr�r��s��� �$���� ����C���J� �*����Z�!7�!7�� ��F��%�%� � �� � � � �$� � �� �&�R�D�.�.�� � � � � �� �M�M�)� $� $� $� $� �8�8�F� � �r�stringc�f�d�d�|�d��D����S)Nrc��g|]}d|d���� S)�%�02XrV)r�bytes rrzPERCENT.<locals>.<listcomp>�s ��F�F�F�t�N��N�N�N�F�F�Frzutf-8)r@r�)r�s r�PERCENTr��s/�� �7�7�F�F�v�}�}�W�/E�/E�F�F�F� G� G�Grrfc���t|z�|����s|Sd��fd�|D����S)z1 Use percent-encoding to quote a string. rc�:��g|]}|�vr|nt|����SrV)r�)rr_�NON_ESCAPED_CHARSs �rrz#percent_encoded.<locals>.<listcomp>�s.���Q�Q�Q�$��*�*�*����� � �Q�Q�Qr)�UNRESERVED_CHARACTERS�rstripr@)r�rfr�s @r�percent_encodedr��sY���.��4�� �=�=�*� +� +��� � �7�7�Q�Q�Q�Q�&�Q�Q�Q� � �rc��g}d}tjt|��D]�}|���|���}}|�d��}||kr.|||�}|�t||�����|�|��|}��|t|��kr.||d�} |�t| |�����d� |��S)a� Use percent-encoding to quote a string, omitting existing '%xx' escape sequences. See: https://www.rfc-editor.org/rfc/rfc3986#section-2.1 * `string`: The string to be percent-escaped. * `safe`: A string containing characters that may be treated as safe, and do not need to be escaped. Unreserved characters are always treated as safe. See: https://www.rfc-editor.org/rfc/rfc3986#section-2.3 rreNr) �re�finditer�PERCENT_ENCODED_REGEX�start�end�groupr�r�rmr@) r�rf�parts�current_positionr��start_position� end_position� matched_text� leading_text� trailing_texts rrvrv�s��� �E�����2�F�;�;� (� (��',�{�{�}�}�e�i�i�k�k� ���{�{�1�~�~� � �-� -� -�!�"2�>�"A�B�L� �L�L���D�A�A�A� B� B� B� � � �\�"�"�"�'����3�v�;�;�&�&��/�0�0�1� � � � �_�]��>�>�>�?�?�?� �7�7�5�>�>�rrG)rWr7rEr9r:r6)r3r7r:r7)r4r�r-r7r:r8)r/r7rkr�rlr�r:r�)r/r7r:r7)r�r7r:r7)r�r7rfr7r:r7)&�__doc__� __future__rr�r��typingr�� _exceptionsrrnr�r��compiler�r@�ranger�r�r�rwrxr��formatrr�r}r�r�� NamedTupler6rIr�r�r�r�r�r�rvrVrr�<module>r�s�����$#�"�"�"�"�"����� � � � � � � � � � � � �#�#�#�#�#�#���I��� �"�� �#4�5�5�� �G�G�R�R�U�U�4��&�&�R�R�R� � � � �W�W�R�R�U�U�4��&�&�R�R�R��� � �G�G�����t�T�"�"���� � � ��������t�T�"�"���� � � ��������t�T�"�"���� � � ��������t�T�"�"���� � � �" �B�J� *�  �f�+�� ���  ��� � � �&�"�*�T� �f�� � �  ��� � �� �b�j�5�6�6����I�&�&� �B�J�x� � � �R�Z�� � ��� �4� � ��� �7�#�#� �B�J�)� *� *� �B�J�t� � � � ��!�b�j�!D�E�E�� �b�j��-�-��4 �4 �4 �4 �4 �&�#�4 �4 �4 �nD�D�D�D�D�N,=�,=�,=�,=�^����6S�S�S�S�2����>H�H�H�H� � � � ������r
Memory