� L�gS���f�dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZmZddlmZddlmZddlmZmZmZmZdd lmZmZmZmZmZmZdd lm Z!dd lm"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(dd l)m*Z*dd l+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1dZ2ej3��Z4ddd�Z5d�6ej7ded���d����Z8ej9dkrd�Z:d�Z"d�Z;d�Z<dJd�Z=d�Z>d �Z?ej@d!���ZAd"�ZBd#�ZCd$�ZDd%�ZEdJd&�ZFd'�ZGd(�ZHd)�ZId*�ZJd+�ZKd,�ZLd-�ZMd.�ZNeOd/��ZPd0�ZQd1�ZRd2�ZSd3�ZTd4�ZUd5�ZVej@d6���ZWd7�ZXdKd8�ZYd9�ZZdLd:�Z[dMd<�Z\d=�Z]d>�Z^d?�_d@��Z`e`dAzZae`dBzZbdC�ZcdD�ZddE�ZedF�ZfdG�ZgdH�ZhdI�ZidS)Nz� requests.utils ~~~~~~~~~~~~~~ This module provides utility functions that are used within Requests that are also useful for external consumption. �N)� OrderedDict)� make_headers� parse_url�)�certs�� __version__)�_HEADER_VALIDATORS_BYTE�_HEADER_VALIDATORS_STR�HEADER_VALIDATORS�to_native_string)�Mapping� basestring�bytes� getproxies�getproxies_environment� integer_types)�parse_http_list)� proxy_bypass�proxy_bypass_environment�quote�str�unquote�urlparse� urlunparse��cookiejar_from_dict)�FileModeWarning� InvalidHeader� InvalidURL�UnrewindableBodyError)�CaseInsensitiveDict)z.netrc�_netrc�Pi�)�http�httpsz, z,\s*T)�accept_encodingzaccept-encoding�win32c�l� ddl}n#t$rYdSwxYw |�|jd��}t |�|d��d��}|�|d��d}n#t tf$rYdSwxYw|r|sdS|�d��}td|��}|D]t}|dkrd|vrd S|� dd ��}|� d d ��}|� d d��}tj ||tj ��rd S�udS)NrFz;Software\Microsoft\Windows\CurrentVersion\Internet Settings� ProxyEnable� ProxyOverride�;z<local>�.Tz\.�*z.*�?)�winreg� ImportError�OpenKey�HKEY_CURRENT_USER�int� QueryValueEx�OSError� ValueError�split�filter�replace�re�match�I)�hostr0�internetSettings� proxyEnable� proxyOverride�tests �^/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/requests/utils.py�proxy_bypass_registryrDLs��� � �M�M�M�M��� � � ��5�5� ���� �%�~�~��(�N� � � � �f�1�1�2B�M�R�R�ST�U�V�V�K�"�/�/�0@�/�R�R�ST�U�M�M����$� � � ��5�5� ����� �-� ��5� &�+�+�C�0�0� ��t�]�3�3� �!� � �D��y� � ��d�?�?��4�4��<�<��U�+�+�D��<�<��U�+�+�D��<�<��T�*�*�D��x��d�B�D�)�)� ��t�t� ��us�� ��A A:�:B�Bc�Z�t��rt|��St|��S)z�Return True, if the host should be bypassed. Checks proxy settings gathered from the environment, if specified, or the registry. )rrrD)r>s rCrrrs.�� "� #� #� /�+�D�1�1� 1�(��.�.� .�c�N�t|d��r|���}|S)z/Returns an internal sequence dictionary update.�items)�hasattrrH)�ds rC�dict_to_sequencerK~s(���q�'���� �G�G�I�I�� �HrFc�:�d}d}t|t��r|�d��}t|d��rt |��}n�t|d��r|j}n~t|d��rn |���}t j|��j}d|j vrtj dt��n#tjtf$rYnwxYwt|d��r� |���}t|d ��rW|�U |�dd ��|���}|�|pd��n'#t$$rd}YnwxYwn#t$$r|�|}YnwxYw|�d}t'd||z ��S) Nr�utf-8�__len__�len�fileno�ba%Requests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.�tell�seek�)� isinstancer�encoderIrOrP�os�fstat�st_size�mode�warnings�warnr�io�UnsupportedOperation�AttributeErrorrRrSr6�max)�o� total_length�current_positionrPs rC� super_lenrd�s����L����!�S���� �H�H�W� � ���q�)�����1�v�v� � � ��E� � ���u� � � ��H� � �� ��X�X�Z�Z�F��8�F�+�+�3�L��!�&� � �� �2�$� � � ����'��8� � � � �D�  ����.�q�&���%� %� �v�v�x�x� ��q�&�!�!� %�l�&:� %��F�F�1�a�L�L�L�#$�6�6�8�8�L��F�F�+�0�q�1�1�1�1���%�%�%�#$�L�L�L�%������%� 0� 0� 0� �'�#/� ���  0����*��� � �q�,�!1�1� 2� 2�2s7�8C � C"�!C"�6E2�AE� E.�-E.�2F�FFc���tj�d��}|�|f}nd�tD��} ddlm}m}d}|D]X} tj�|��}n#t$rYdSwxYwtj� |��r|}n�Y|�dSt|��} d} t|t��r| � d��} | j�| ��d} ||���| ��} | r| drdnd} | | | d fSdS#|t"f$r|r�YdSwxYw#t$t&f$rYdSwxYw) z;Returns the Requests tuple auth for a given url from netrc.�NETRCNc3� K�|] }d|��V�� dS)z~/N�)�.0�fs rC� <genexpr>z!get_netrc_auth.<locals>.<genexpr>�s(����9�9��8��8�8�9�9�9�9�9�9rFr)�NetrcParseError�netrc�:�asciirrT)rW�environ�get� NETRC_FILESrmrl�path� expanduser�KeyError�existsrrUr�decode�netlocr8�authenticatorsr6r1r_)�url� raise_errors� netrc_file�netrc_locationsrlrm� netrc_pathrj�loc�ri�splitstrr>r#�login_is rC�get_netrc_authr��s��������(�(�J���%�-���9�9�[�9�9�9��- �0�0�0�0�0�0�0�0�� � � � �A� ��g�(�(��+�+����� � � �����  ���� �w�~�~�c�"�"� � � ��� � � � �F� �c�]�]���� �c�3� � � 0����w�/�/�H��y���x�(�(��+�� ��U�:�&�&�5�5�d�;�;�F�� 4�%�a�y�/�!�!�a���w�����3�3� 4� 4�� ��)� � � �� �� � � � ����� �� (� � � � ��� ���sZ�E�A'�&E�' A6�1E�5A6�6)E�!AE�=;D;�;E� E� E�E�E&�%E&c���t|dd��}|rLt|t��r9|ddkr/|ddkr%tj�|��SdSdSdSdS)z0Tries to guess the filename of the given object.�nameNr�<������>)�getattrrUrrWrs�basename)�objr�s rC�guess_filenamer�sw�� �3��� %� %�D� �&� �4��,�,�&��a��C���D��H�PS�O�O��w����%�%�%�&�&�&�&���O�OrFc��tj�|��r|Stj�|��\}}|r|tj�|��s]tj�|��\}}|sn8d�||g��}|rtj�|���]t j|��s|St j|��}||���vr|Stj ��}tj�||�d��d��}tj�|��sOt|��5}|� |� |����ddd��n #1swxYwY|S)z�Replace nonexistent paths that look like they refer to a member of a zip archive with the location of an extracted copy of the target, or else just return the provided path unchanged. �/r�N)rWrsrvr8�join�zipfile� is_zipfile�ZipFile�namelist�tempfile� gettempdir� atomic_open�write�read)rs�archive�member�prefix�zip_file�tmp�extracted_path� file_handlers rC�extract_zipped_pathsr� s���  �w�~�~�d����� ��g�m�m�D�)�)�O�G�V� �,�"�'�.�.��1�1�,��'�-�-��0�0����� � ����6�6�*�+�+�� �,�"�'�.�.��1�1�,� � �g� &� &��� ���w�'�'�H� �X�&�&�(�(�(�(�� � � � � �C��W�\�\�#�v�|�|�C�'8�'8��'<�=�=�N� �7�>�>�.� )� )�6� �� (� (� 6�L� � � �x�}�}�V�4�4� 5� 5� 5� 6� 6� 6� 6� 6� 6� 6� 6� 6� 6� 6���� 6� 6� 6� 6� �s�>)F3�3F7�:F7c#�HK�tjtj�|�����\}} tj|d��5}|V�ddd��n #1swxYwYtj||��dS#t$rtj|���wxYw)z-Write a file to the disk in an atomic fashion)�dir�wbN) r��mkstemprWrs�dirname�fdopenr:� BaseException�remove)�filename�tmp_descriptor�tmp_name� tmp_handlers rCr�r�1s����� (�/�B�G�O�O�H�4M�4M�N�N�N��N�H�� �Y�~�t� ,� ,� � �� � � � � � � � � � � � � � ���� � � � � � �8�X�&�&�&�&�&�� ���� � �(���� ����s/�B�A� B�A#�#B�&A#�'B� B!c��|�dSt|ttttf��rt d���t |��S)aTake an object and test to see if it can be represented as a dictionary. Unless it can not be represented as such, return an OrderedDict, e.g., :: >>> from_key_val_list([('key', 'val')]) OrderedDict([('key', 'val')]) >>> from_key_val_list('string') Traceback (most recent call last): ... ValueError: cannot encode objects that are not 2-tuples >>> from_key_val_list({'key': 'val'}) OrderedDict([('key', 'val')]) :rtype: OrderedDict N�+cannot encode objects that are not 2-tuples)rUrr�boolr4r7r��values rC�from_key_val_listr�>sG��$ �}��t��%�#�u�d�C�0�1�1�H��F�G�G�G� �u� � �rFc���|�dSt|ttttf��rt d���t|t ��r|���}t|��S)a�Take an object and test to see if it can be represented as a dictionary. If it can be, return a list of tuples, e.g., :: >>> to_key_val_list([('key', 'val')]) [('key', 'val')] >>> to_key_val_list({'key': 'val'}) [('key', 'val')] >>> to_key_val_list('string') Traceback (most recent call last): ... ValueError: cannot encode objects that are not 2-tuples :rtype: list Nr�) rUrrr�r4r7rrH�listr�s rC�to_key_val_listr�Ysd��" �}��t��%�#�u�d�C�0�1�1�H��F�G�G�G��%��!�!��� � � � �� ��;�;�rFc���g}t|��D]N}|dd�|dd�cxkrdkrnnt|dd���}|�|���O|S)aParse lists as described by RFC 2068 Section 2. In particular, parse comma-separated lists where the elements of the list may include quoted-strings. A quoted-string could contain a comma. A non-quoted string could have quotes in the middle. Quotes are removed automatically after parsing. It basically works like :func:`parse_set_header` just that items may appear multiple times and case sensitivity is preserved. The return value is a standard :class:`list`: >>> parse_list_header('token, "quoted value"') ['token', 'quoted value'] To create a header from the :class:`list` again, use the :func:`dump_header` function. :param value: a string with a list header. :return: :class:`list` :rtype: list Nrr��")�_parse_list_header�unquote_header_value�append)r��result�items rC�parse_list_headerr�ws���.�F�"�5�)�)���� ����8�t�B�C�C�y� '� '� '� '�C� '� '� '� '� '�'��Q�r�T� �3�3�D�� � �d����� �MrFc���i}t|��D]a}d|vrd||<� |�dd��\}}|dd�|dd�cxkrdkrnnt|dd���}|||<�b|S)a^Parse lists of key, value pairs as described by RFC 2068 Section 2 and convert them into a python dict: >>> d = parse_dict_header('foo="is a fish", bar="as well"') >>> type(d) is dict True >>> sorted(d.items()) [('bar', 'as well'), ('foo', 'is a fish')] If there is no value for a key it will be `None`: >>> parse_dict_header('key_without_value') {'key_without_value': None} To create a header from the :class:`dict` again, use the :func:`dump_header` function. :param value: a string with a dict header. :return: :class:`dict` :rtype: dict �=Nrr�r�)r�r8r�)r�r�r�r�s rC�parse_dict_headerr��s���,�F�"�5�)�)���� �d�?�?��F�4�L� ��j�j��a�(�(� ��e� ��!��9��b�c�c� � )� )� )� )�c� )� )� )� )� )�(��q��t��5�5�E���t� � � �MrFc���|r`|d|dcxkrdkrGnnD|dd�}|r|dd�dkr*|�dd���d d��S|S) z�Unquotes a header value. (Reversal of :func:`quote_header_value`). This does not use the real unquoting but what browsers are actually using for quoting. :param value: the header value to unquote. :rtype: str rr�r�rNrTz\\�\z\")r:)r�� is_filenames rCr�r��s��� � C��q��U�2�Y�-�-�-�-�#�-�-�-�-�-� �a��d� ��� C�e�B�Q�B�i�6�1�1��=�=���.�.�6�6�u�c�B�B� B� �LrFc��d�|D��}|S)z�Returns a key/value dictionary from a CookieJar. :param cj: CookieJar object to extract cookies from. :rtype: dict c�(�i|]}|j|j��Srh)r�r�)ri�cookies rC� <dictcomp>z'dict_from_cookiejar.<locals>.<dictcomp>�s��>�>�>��6�;�� �>�>�>rFrh��cj� cookie_dicts rC�dict_from_cookiejarr��s��?�>�2�>�>�>�K� �rFc�"�t||��S)z�Returns a CookieJar from a key/value dictionary. :param cj: CookieJar to insert cookies into. :param cookie_dict: Dict of key/values to insert into CookieJar. :rtype: CookieJar rr�s rC�add_dict_to_cookiejarr��s�� �{�B� /� /�/rFc�`�tjdt��tjdtj���}tjdtj���}tjd��}|�|��|�|��z|�|��zS)zlReturns encodings from given content string. :param content: bytestring to extract encodings from. z�In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)z!<meta.*?charset=["\']*(.+?)["\'>])�flagsz+<meta.*?content=["\']*;?charset=(.+?)["\'>]z$^<\?xml.*?encoding=["\']*(.+?)["\'>])r[r\�DeprecationWarningr;�compiler=�findall)�content� charset_re� pragma_re�xml_res rC�get_encodings_from_contentr��s���  �M� 1� � �����@���M�M�M�J�� �I�QS�QU�V�V�V�I� �Z�?� @� @�F� ���7�#�#� � � �G� $� $� %� �.�.�� !� !� "�rFc��|�d��}|d���|dd�}}i}d}|D]�}|���}|rs|d}}|�d��} | dkr=|d| ��|��}|| dzd��|��}|||���<��||fS) z�Returns content type and parameters from given header :param header: string :return: tuple containing content type and dictionary of parameters r,rrNz"' Tr�r�)r8�strip�find�lower) �header�tokens� content_type�params� params_dict�items_to_strip�param�keyr��index_of_equalss rC�_parse_content_type_headerr�s����\�\�#� � �F�!�!�9�?�?�,�,�f�Q�R�R�j�&�L��K��N��-�-��� � � � �� � -����C�#�j�j��o�o�O��"�$�$��,�_�,�-�3�3�N�C�C���o��1�3�3�4�:�:�>�J�J��',�K�� � � � � $�� �� $�$rFc��|�d��}|sdSt|��\}}d|vr|d�d��Sd|vrdSd|vrdSdS) z}Returns encodings from given HTTP Header Dict. :param headers: dictionary to extract encoding from. :rtype: str z content-typeN�charsetz'"�textz ISO-8859-1zapplication/jsonrM)rqr�r�)�headersr�r�s rC�get_encoding_from_headersr�s����;�;�~�.�.�L� ���t�5�l�C�C��L�&��F����i� �&�&�u�-�-�-� �����|��\�)�)��w�*�)rFc#��K�|j� |Ed{V��dStj|j��d���}|D]}|�|��}|r|V��|�dd���}|r|V�dSdS)zStream decodes an iterator.Nr:��errorsrFT)�final)�encoding�codecs�getincrementaldecoderrw)�iterator�r�decoder�chunk�rvs rC�stream_decode_response_unicoder�4s����� �z������������6�f�*�1�:�6�6�i�H�H�H�G����� �^�^�E� "� "�� � ��H�H�H�� ����4�� (� (�B� ���������rFc#�K�d}|�|dkrt|��}|t|��kr)||||z�V�||z }|t|��k�'dSdS)z Iterate over slices of a string.rN)rO)�string� slice_length�poss rC� iter_slicesr�Es{���� �C���|�q�0�0��6�{�{� � ��F� � � � ��S�3��-�-�.�.�.�.� �|��� ��F� � � � � � � � rFc�:�tjdt��g}t|j��}|r; t |j|��S#t$r|�|��YnwxYw t |j|d���S#t$r |jcYSwxYw)z�Returns the requested content back in unicode. :param r: Response object to get unicode content from. Tried: 1. charset from content-type 2. fall back and replace all unicode characters :rtype: str z�In requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)r:r�) r[r\r�r�r�rr�� UnicodeErrorr�� TypeError)r��tried_encodingsr�s rC�get_unicode_from_responserOs��� �M� 1� � ����O�)���3�3�H��-� -��q�y�(�+�+� +��� -� -� -� � "� "�8� ,� ,� ,� ,� ,� -������1�9�h�y�9�9�9�9�� �����y�������s#�A � A+�*A+�/B�B�BzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c���|�d��}tdt|����D]�}||dd�}t|��dkr�|���ro t t |d����}n!#t $rtd|�d����wxYw|tvr|||dd�z||<��d||��||<��d||��||<��d � |��S) z�Un-escape any percent-escape sequences in a URI that are unreserved characters. This leaves all reserved, illegal and non-ASCII bytes encoded. :rtype: str �%rrrT�z"Invalid percent-escape sequence: '�'N�) r8�rangerO�isalnum�chrr4r7r �UNRESERVED_SETr�)�uri�parts�i�h�cs rC�unquote_unreservedr|s�� �I�I�c�N�N�E� �1�c�%�j�j� !� !� &� &�� �!�H�Q�q�S�M�� �q�6�6�Q�;�;�1�9�9�;�;�;� L���A�r� � �O�O����� L� L� L� �!J�a�!J�!J�!J�K�K�K� L�����N�"�"��u�Q�x����|�+��a���)�u�Q�x�>�>��a���%�5��8�~�~�E�!�H�H� �7�7�5�>�>�s �-B � B)c��d}d} tt|��|���S#t$rt||���cYSwxYw)z�Re-quote the given URI. This function passes the given URI through an unquote/quote cycle to ensure that it is fully and consistently quoted. :rtype: str z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~)�safe)rrr )r �safe_with_percent�safe_without_percents rC� requote_urir�sk��/��0�� 5��'��,�,�3D�E�E�E�E�� �5�5�5��S�3�4�4�4�4�4�4� 5���s�$�A�Ac ��tjdtj|����d}|�d��\}}tjdtjt t |��������d}tjdtj|����d|z}||z||zkS)z�This function allows you to check if an IP belongs to a network subnet Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 :rtype: bool z=Lrr�)�struct�unpack�socket� inet_atonr8�dotted_netmaskr4)�ip�net�ipaddr�netaddr�bits�netmask�networks rC�address_in_networkr#�s����]�4��!1�"�!5�!5� 6� 6�q� 9�F��I�I�c�N�N�M�G�T��m�D�&�"2�>�#�d�)�)�3L�3L�"M�"M�N�N�q�Q�G��m�D�&�"2�7�";�";�<�<�Q�?�'�I�G� �W� �'�G�"3� 4�4rFc�l�ddd|z zdz z }tjtjd|����S)z�Converts mask from /xx format to xxx.xxx.xxx.xxx Example: if mask is 24 function returns 255.255.255.0 :rtype: str l��r� z>I)r� inet_ntoar�pack)�maskr s rCrr�s8�� ��b�4�i��1�,� ,�D� � �F�K��d�3�3� 4� 4�4rFc�T� tj|��n#t$rYdSwxYwdS)z :rtype: bool FT)rrr6)� string_ips rC�is_ipv4_addressr+�sB������#�#�#�#�� �����u�u����� �4s �� %�%c�N�|�d��dkr� t|�d��d��}n#t$rYdSwxYw|dks|dkrdS t j|�d��d��n#t $rYdSwxYwdSdS)zV Very simple check of the cidr format in no_proxy variable. :rtype: bool r�rFr%rT)�countr4r8r7rrr6)�string_networkr(s rC� is_valid_cidrr/�s��� ���C� � �A�%�%� ��~�+�+�C�0�0��3�4�4�D�D��� � � ��5�5� ���� �!�8�8�t�b�y�y��5� � � �^�1�1�#�6�6�q�9� :� :� :� :��� � � ��5�5� �����u� �4s#�(A� A�A�$-B� B �B c#�K�|du}|r.tj�|��}|tj|< dV�|r"|�tj|=dS|tj|<dSdS#|r|�tj|=n|tj|<wxYw)z�Set the environment variable 'env_name' to 'value' Save previous value, yield, and then restore the previous value stored in the environment variable 'env_name'. If 'value' is None, do nothingN)rWrprq)�env_namer�� value_changed� old_values rC� set_environr4�s�������%�M��%��J�N�N�8�,�,� �$�� �8��1� ���� � 1�� ��J�x�(�(�(�'0�� �8�$�$�$�  1� 1��=� 1�� ��J�x�(�(�'0�� �8�$�0�0�0�0s �A"�"#Bc���d�}|}|� |d��}t|��}|j�dS|r�d�|�dd���d��D��}t |j��r<|D]8}t |��rt |j|��rdS�*|j|krdS�9nR|j}|jr |d |j��z }|D]4}|j�|��s|�|��rdS�5td|��5 t|j��}n#ttj f$rd }YnwxYwddd��n #1swxYwY|rdSd S) zL Returns whether we should bypass proxies or not. :rtype: bool c��tj�|��p0tj�|�����S�N)rWrprq�upper)r�s rC� get_proxyz(should_bypass_proxies.<locals>.get_proxys1���z�~�~�c�"�"�A�b�j�n�n�S�Y�Y�[�[�&A�&A�ArFN�no_proxyTc3�K�|]}|�|V�� dSr7rh)rir>s rCrkz(should_bypass_proxies.<locals>.<genexpr>s'����R�R�T�T�R�D�R�R�R�R�R�RrF� r�,�:F)r�hostnamer:r8r+r/r#�port�endswithr4rr�r�gaierror) rzr:r9� no_proxy_arg�parsed�proxy_ip�host_with_portr>�bypasss rC�should_bypass_proxiesrH�s#��B�B�B� �L����9�Z�(�(�� �c�]�]�F� ����t�� �S�R�X�%5�%5�c�2�%>�%>�%D�%D�S�%I�%I�R�R�R�� �6�?� +� +� �$� � �� ��*�*� �)�&�/�8�D�D�$�#�t�t�$��_��0�0� �4�4�1�  �$�_�N��{� 4��"3�f�k�"3�"3�3�� � � ���?�+�+�D�1�1� �^�5L�5L�T�5R�5R� � �4�4� � �Z�� .� .��� �!�&�/�2�2�F�F���6�?�+� � � ��F�F�F� ���� ���������������������t� �5s6�E�D)�(E�)E�E�E�E�E�Ec�D�t||���riSt��S)zA Return a dict of environment proxies. :rtype: dict �r:)rHr)rzr:s rC�get_environ_proxiesrK:s(�� �S�8�4�4�4��� ��|�|�rFc��|pi}t|��}|j�.|�|j|�d����S|jdz|jz|jd|jzdg}d}|D]}||vr ||}n�|S)z�Select a proxy for the url, if applicable. :param url: The url being for the request :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs N�allz://zall://)rr?rq�scheme)rz�proxies�urlparts� proxy_keys�proxy� proxy_keys rC� select_proxyrTFs��� �m��G���}�}�H��� ��{�{�8�?�G�K�K��,>�,>�?�?�?� ��%��(�"3�3����8�$�$� � �J� �E���� � �� � ��I�&�E� �E� � �LrFc�d�|�|ni}|j}t|��j}|�d��}|���}|rct ||���sRt ||���}|�||�d����}|r|�||��|S)a�This method takes proxy information from a request and configuration input to resolve a mapping of target proxies. This will consider settings such as NO_PROXY to strip proxy configurations. :param request: Request or PreparedRequest :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs :param trust_env: Boolean declaring whether to trust environment configs :rtype: dict Nr:rJrM)rzrrNrq�copyrHrK� setdefault) �requestrO� trust_envrzrNr:� new_proxies�environ_proxiesrRs rC�resolve_proxiesr\`s���!�,�g�g�"�G� �+�C� �c�]�]� !�F��{�{�:�&�&�H��,�,�.�.�K��2�.�s�X�F�F�F�2�-�c�H�E�E�E���#�#�F�O�,?�,?��,F�,F�G�G�� � 2� � "� "�6�5� 1� 1� 1� �rF�python-requestsc��|�dt��S)zO Return a string representing the default user agent. :rtype: str r�r)r�s rC�default_user_agentr_{s�� � "� "�[� "� "�"rFc�L�tt��tddd���S)z9 :rtype: requests.structures.CaseInsensitiveDict z*/*z keep-alive)z User-AgentzAccept-Encoding�Accept� Connection)r"r_�DEFAULT_ACCEPT_ENCODINGrhrFrC�default_headersrd�s2�� �,�.�.�6��&�  � � � �rFc��g}d}|�|��}|s|Stjd|��D]�} |�dd��\}}n#t$r|d}}YnwxYwd|�d��i}|�d��D]X} |�d��\}}n#t$rYn0wxYw|�|��||�|��<�Y|�|����|S) z�Return a list of parsed link headers proxies. i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg" :rtype: list z '"z, *<r,rrrzz<> '"r�)r�r;r8r7r�) r��links� replace_chars�valrzr��linkr�r�s rC�parse_header_linksrj�sA�� �E��M� �K�K� � &� &�E� ��� ��x���&�&���� "��)�)�C��+�+�K�C����� "� "� "��r��C�C�C� "�����s�y�y��*�*�+���\�\�#�&�&� H� H�E� �"�[�[��-�-� ��U�U��� � � ���� ����.3�[�[��-G�-G�D����=�)�)� *� *� � � �T����� �Ls#�A�A!� A!�B,�, B:�9B:�rorT�c���|dd�}|tjtjfvrdS|dd�tjkrdS|dd�tjtjfvrdS|�t��}|dkrd S|dkr,|ddd�tkrd S|d dd�tkrd S|dkr*|dd�tkrd S|d d�tkrdSdS)z :rtype: str N�zutf-32rlz utf-8-sigrTzutf-16rrMz utf-16-berz utf-16-lez utf-32-bez utf-32-le) r�� BOM_UTF32_LE� BOM_UTF32_BE�BOM_UTF8� BOM_UTF16_LE� BOM_UTF16_BEr-�_null�_null2�_null3)�data�sample� nullcounts rC�guess_json_utfrz�s���"�1�"�X�F� �&�%�v�':�;�;�;��x� �b�q�b�z�V�_�$�$��{� �b�q�b�z�f�)�6�+>�?�?�?��x�� � �U�#�#�I��A�~�~��w��A�~�~� �#�#�A�#�;�&� � ��;� �!�$�Q�$�<�6� !� !��;��A�~�~� �"�1�"�:�� � ��;� �!�"�"�:�� � ��;� �4rFc��t|��}|\}}}}}}} |j} | s|| }} |rd�|| g��} |�|}|�d}t|| |d|| f��S)z�Given a URL that may or may not have a scheme, prepend the given scheme. Does not replace a present scheme with the one provided as an argument. :rtype: str �@Nr)rrxr�r) rz� new_schemerDrN�authr>r@rs�query�fragmentrxs rC�prepend_scheme_if_neededr��s��� �s�^�^�F�6<�3�F�D�$��d�E�8� �]�F� �$��V��� �*����4��.�)�)�� �~��� �|��� �v�v�t�R���A� B� B�BrFc��t|��} t|j��t|j��f}n#tt f$rd}YnwxYw|S)z{Given a url with authentication components, extract them into a tuple of username,password. :rtype: (str,str) )rr)rr�username�passwordr_r�)rzrDr~s rC�get_auth_from_urlr��sd�� �c�]�]�F�����(�(�'�&�/�*B�*B�C���� �I� &������������ �Ks�(:�A�Ac�T�|\}}t||d��t||d��dS)z�Verifies that header parts don't contain leading whitespace reserved characters, or return characters. :param header: tuple, in the format (name, value). rrN)�_validate_header_part)r�r�r�s rC�check_header_validityr� s7�� �K�D�%��&�$��*�*�*��&�%��+�+�+�+�+rFc �D�t|t��rt|}nHt|t��rt|}n%t d|�d|�dt |�������|�|��s|dkrdnd}t d|�d|�����dS) Nz Header part (z) from z# must be of type str or bytes, not rr�r�zTInvalid leading whitespace, reserved character(s), or return character(s) in header z: )rUrr rr r�typer<)r�� header_part�header_validator_index� validator� header_kinds rCr�r�s����+�s�#�#� �*�+A�B� � � �K�� '� '� �+�,B�C� � �� E�K� E� E�&� E� E�15�k�1B�1B� E� E� � � � �?�?�;� '� '� � 6�!� ;� ;�f�f�� �� E�&1� E� E�5@� E� E� � � � � rFc��t|��\}}}}}}|s||}}|�dd��d}t|||||df��S)zW Given a url remove the fragment and the authentication part. :rtype: str r|rr�r)r�rsplitr)rzrNrxrsr�rr�s rC� urldefragauthr�(sb�� 5=�S�M�M�1�F�F�D�&�%�� �$��V��� �]�]�3�� "� "�2� &�F� �v�v�t�V�U�B�?� @� @�@rFc���t|jdd��}|�Jt|jt��r0 ||j��dS#t $rt d���wxYwt d���)zfMove file pointer back to its recorded starting position so it can be read again on redirect. rSNz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r��bodyrU�_body_positionrr6r!)�prepared_request� body_seeks rC� rewind_bodyr�9s����(�-�v�t�<�<�I�����'��"�"�� � �I�&�5� 6� 6� 6� 6� 6��� � � �'�M��� � ���� $�$Q�R�R�Rs �A�A )Fr7)T)r])j�__doc__r�� contextlibr]rWr;rr�sysr�r[r�� collectionsr� urllib3.utilrrrrr �_internal_utilsr r r r �compatrrrrrrrr�rrrrrrr�cookiesr� exceptionsrrr r!� structuresr"rr�where�DEFAULT_CA_BUNDLE_PATH� DEFAULT_PORTSr�r8rc�platformrDrKrdr�r�r��contextmanagerr�r�r�r�r�r�r�r�r�r�r�r�r�r� frozensetr rrr#rr+r/r4rHrKrTr\r_rdrjrVrtrurvrzr�r�r�r�r�r�rhrFrC�<module>r�s������ � � ����� � � � � � � � � � � � � � � � � � � � � � � � �������������#�#�#�#�#�#�0�0�0�0�0�0�0�0�������$�$�$�$�$�$������������� ����������������:�9�9�9�9�9�������������������)�(�(�(�(�(������������� ,�+�+�+�+�+�"� �$�������c�*�*� ��)�)� �B�H�W�l�l�4�8�8�8�9J�K�L�L���� �<�7���$�$�$�L /� /� /� � � �B3�B3�B3�J6 �6 �6 �6 �r&�&�&�"�"�"�J �� � ��� ����6���<���@���F����2���0�0�0����2%�%�%�2���2���"���$�$�$�P��M���� ���05�5�5�, 5� 5� 5�5�5�5�������0 ��1�1���1�*:�:�:�z � � � ����4����6#�#�#�#� � � �"�"�"�L � � �g���� ���� �������@C�C�C�: � � � ,�,�,� � � �&A�A�A�"S�S�S�S�SrF
Memory