� L�g0��\�dZddlmZddlZddlmZddlmZmZm Z ddl m Z ddl m Z ed ���Z ed ���Zd efd �Zd ed efd�Zd efd�Zd ed edededededeededefd�Zdedededefd�Ze dddddddddd� d ed ededededededeededefd ���ZdS)!zURL.�)� lru_cacheN)�Optional)�parse_qs�unquote�urlsplit�)�hostname)� validatorc�@�tjdtj��S)Nz�(^[\u0100-\u017F\u0180-\u024F]|[-!#$%&'*+/=?^_`{}|~0-9a-z]+(\.[-!#$%&'*+/=?^_`{}|~0-9a-z]+)*$|^([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\011.])*$)��re�compile� IGNORECASE���^/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/validators/url.py�_username_regexrs#�� �:� G� � � � �rc�@�tjdtj��S)Nz�^[\/a-z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@\%\U0001F300-\U0001F5FF\U0001F600-\U0001F64F\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$r rrr� _path_regexrs"�� �:� 8� � � � � r�valuec��|r|dvndS)zValidate scheme.> �ftp�git�irc�ssh�ftps�http�rtmp�rtsp�sftp�https�rtmps�telnetFr)rs r�_validate_schemer$*s'�� � �� � � �� r�skip_ipv6_addrc�d�|p.|�d��dkp|�d�� S)zConfirm skip IPv6 check.�:��[)�count� startswith)rr%s r�_confirm_ipv6_skipr,;s4�� � N�U�[�[��-�-��1� N��9I�9I�#�9N�9N�5N�Nrc���|sdS|�d��x}dkr.t���t|����S|dkr!t���|��S|�dd��\}�t���|��ot �fd�dD����S)z Validate authentication segment.Tr'rc3� �K�|]}|�vV�� dS)Nr)�.0� char_to_avoid�passwords �r� <genexpr>z)_validate_auth_segment.<locals>.<genexpr>Ks9�����5�5�*7� �X�%�5�5�5�5�5�5r)�/�?�#�@)r*r�matchr�rsplit�all)r� colon_count�usernamer1s @r�_validate_auth_segmentr<@s���� ���t��{�{�3�'�'�'� �1�,�,�� � �&�&�w�u�~�~�6�6�6��Q���� � �&�&�u�-�-�-����c�1�-�-��H�h� � � � "� "�8� ,� ,� ��5�5�5�5�;O�5�5�5�2�2�r�skip_ipv4_addr� may_have_port� simple_host� consider_tld�private�rfc_1034�rfc_2782c �N�|r|�d��dkrdS|�d��dkrdtt||��sd|vr|n)|�d���ddd��t||��|||||||�� � S|�dd��\} } tt| |��sd|vr| n)| �d���ddd��t| |��|||||||�� � ot | ��S) zValidate netloc.r6rFz]:r)�]�)r%r=r>� maybe_simpler@rArBrC)r*r r,�lstrip�replacer8r<) rr%r=r>r?r@rArBrC� basic_auth�hosts r�_validate_netlocrLPsf�� ��E�K�K��$�$�q�(�(��u� �{�{�3���!����&�e�^�<�<�;�@D�� � ����\�\�#�&�&�.�.�s�B��:�:�-�e�^�D�D�)�'�$�%���� � � � ��|�|�C��+�+��J�� �"�$��7�7� 6�;?�5�=�=� �D����S�!�!�)�)�#�r�1�5�5�)�$��?�?�%�#� �!���� � � � -� !�� ,� ,�-r�path�query�fragment� strict_queryc�~�d}|r1|tt���|����z} |r)t||d���rt||d���r|dz}n(#t$r|rt||���r|dz}YnwxYw|r0|tt jd|t j����z}|S)z"Validate path query and fragments.T�&)�strict_parsing� separator�;)rSz[0-9a-z?/:@\-._~%!$&'()*+,;=]*)�boolrr7r� TypeErrorr � fullmatchr)rMrNrOrP�optional_segmentss r�_validate_optionalsrZ�s���� �=��T�+�-�-�"5�"5�d�";�";�<�<�<�� &� � &���|�s�K�K�K� &���|�s�K�K�K�  &� �� %� ��� �&�&�&� � &�X�e�L�A�A�A� &� �� %� ���&����� ��T� �L�:�H�b�m� T� T� � � �� �s�+A#�#"B�BFT) r%r=r>r?rPr@rArBrCc ���|rtjd|��rdS t|��\} } } } }n#t$rYdSwxYwt | ��o(t | |||||||| � � ot | | ||��S)a�Return whether or not given value is a valid URL. This validator was originally inspired from [URL validator of dperini][1]. The following diagram is from [urlly][2]:: foo://admin:hunter1@example.com:8042/over/there?name=ferret#nose \_/ \___/ \_____/ \_________/ \__/\_________/ \_________/ \__/ | | | | | | | | scheme username password hostname port path query fragment [1]: https://gist.github.com/dperini/729294 [2]: https://github.com/treeform/urlly Examples: >>> url('http://duck.com') # Output: True >>> url('ftp://foobar.dk') # Output: True >>> url('http://10.0.0.1') # Output: True >>> url('http://example.com/">user@example.com') # Output: ValidationError(func=url, ...) Args: value: URL string to validate. skip_ipv6_addr: When URL string cannot contain an IPv6 address. skip_ipv4_addr: When URL string cannot contain an IPv4 address. may_have_port: URL string may contain port number. simple_host: URL string maybe only hyphens and alpha-numerals. strict_query: Fail validation on query string parsing error. consider_tld: Restrict domain to TLDs allowed by IANA. private: Embedded IP address is public if `False`, private/local if `True`. rfc_1034: Allow trailing dot in domain/host name. Ref: [RFC 1034](https://www.rfc-editor.org/rfc/rfc1034). rfc_2782: Domain/Host name is of type service record. Ref: [RFC 2782](https://www.rfc-editor.org/rfc/rfc2782). Returns: (Literal[True]): If `value` is a valid url. (ValidationError): If `value` is an invalid url. z\sF)r �searchr� ValueErrorr$rLrZ)rr%r=r>r?rPr@rArBrC�scheme�netlocrMrNrOs r�urlr`�s���F ��B�I�e�U�+�+���u��08����-����e�X�X�� �����u�u����� �� � � E� � � � � � � � � � � � � E� ��e�X�|� D� D�s �1� ?�?)�__doc__� functoolsrr �typingr� urllib.parserrrr �utilsr rr�strr$rVr,r<rLrZr`rrr�<module>rgsy�� � � ������ � � � �������4�4�4�4�4�4�4�4�4�4������������� � � � �� � � � � �� ��C�����"O�c�O�4�O�O�O�O� �#� � � � � --� �--��--��--�� --� � --� � --��d�^�--��--��--�--�--�--�`�c��#����D�����2 � !� �����"���Z�Z�Z� �Z�� Z� � Z� � Z��Z��Z��Z��d�^�Z��Z��Z�Z�Z� ��Z�Z�Zr
Memory