o �J�h́�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZmZddlmZddlmZddlmZmZdd lmZmZmZmZmZmZdd lmZdd 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-ddl.m/Z/dZ0e�1�Z2ddd�Z3d�4e�5dedd�d��Z6ej7dkr�dd�Z8dd�Z dd�Z9dd �Z:dtd"d#�Z;d$d%�Z<d&d'�Z=ej>d(d)��Z?d*d+�Z@d,d-�ZAd.d/�ZBd0d1�ZCdtd2d3�ZDd4d5�ZEd6d7�ZFd8d9�ZGd:d;�ZHd<d=�ZId>d?�ZJd@dA�ZKdBdC�ZLeMdD�ZNdEdF�ZOdGdH�ZPdIdJ�ZQdKdL�ZRdMdN�ZSdOdP�ZTej>dQdR��ZUdSdT�ZVdudUdV�ZWdWdX�ZXdvdYdZ�ZYdwd\d]�ZZd^d_�Z[d`da�Z\db�]dc�Z^e^ddZ_e^deZ`dfdg�Zadhdi�Zbdjdk�Zcdldm�Zddndo�Zedpdq�Zfdrds�ZgdS)xz� 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�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 Cs�zddl}Wn tyYdSwz|�|jd�}t|�|d�d�}|�|d�d}Wn ttfy8YdSw|r=|s?dS|�d�}|D]*}|dkrSd|vrSd S|� dd �}|� d d �}|� d d�}t � ||t j �rpd SqFdS)NrFz;Software\Microsoft\Windows\CurrentVersion\Internet Settings� ProxyEnable� ProxyOverride�;z<local>�.Tz\.�*z.*�?) �winreg� ImportError�OpenKey�HKEY_CURRENT_USER�int� QueryValueEx�OSError� ValueError�split�replace�re�match�I)�hostr,�internetSettings� proxyEnable� proxyOverride�test�r>�LC:\pinokio\api\whisper-webui.git\app\env\lib\site-packages\requests\utils.py�proxy_bypass_registryGs:  ���    �r@cCst�rt|�St|�S)z�Return True, if the host should be bypassed. Checks proxy settings gathered from the environment, if specified, or the registry. )rrr@)r9r>r>r?rksrcCst|d�r |��}|S)z/Returns an internal sequence dictionary update.�items)�hasattrrA)�dr>r>r?�dict_to_sequencews rDc Cs d}d}t|d�rt|�}n2t|d�r|j}n)t|d�r@z|��}Wn tjtfy.Ynwt�|�j}d|j vr@t � dt �t|d�r�z|� �}WntyZ|durX|}Yn)wt|d�r�|dur�z|�dd �|� �}|�|ptd�Wn ty�d}Ynw|dur�d}td||�S) Nr�__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�)rBrFrG�io�UnsupportedOperation�AttributeError�os�fstat�st_size�mode�warnings�warnrrIr2rJ�max)�o� total_length�current_positionrGr>r>r?� super_len�sJ     �  �   ��  �rYFc Cs>tj�d�}|dur|f}ndd�tD�}z}ddlm}m}d}|D]!}ztj�|�}Wn ty8YWdSwtj� |�rC|}nq"|durKWdSt |�} d} t |t �r[| � d�} | j�| �d} z||��| �} | r| drsdnd } | | | d fWWSWWdS|tfy�|r��YWdSwttfy�YdSw) z;Returns the Requests tuple auth for a given url from netrc.ZNETRCNcss�|]}d|��VqdS)z~/Nr>)�.0�fr>r>r?� <genexpr>�s�z!get_netrc_auth.<locals>.<genexpr>r)�NetrcParseError�netrc�:�asciirrK)rO�environ�get� NETRC_FILESr^r]�path� expanduser�KeyError�existsr� isinstancer�decode�netlocr4�authenticatorsr2r-rN)�urlZ raise_errorsZ netrc_fileZnetrc_locationsr]r^Z netrc_pathr[�locZriZsplitstrr9r Zlogin_ir>r>r?�get_netrc_auth�sL   � �  ����rncCsNt|dd�}|rt|t�r!|ddkr#|ddkr%tj�|�SdSdSdSdS)z0Tries to guess the filename of the given object.�nameNr�<������>)�getattrrhr rOrd�basename)�objror>r>r?�guess_filename�s & �rvcCs�tj�|�r|Stj�|�\}}|r2tj�|�s2tj�|�\}}|s#nd�||g�}|r2tj�|�rt�|�s9|St�|�}||��vrF|St � �}tj�||�d�d�}tj�|�syt |��}|� |� |��Wd�|S1stwY|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. �/rqN)rOrdrgr4�join�zipfile� is_zipfile�ZipFile�namelist�tempfile� gettempdir� atomic_open�write�read)rd�archive�member�prefixZzip_file�tmpZextracted_pathZ file_handlerr>r>r?�extract_zipped_pathss. �      ��r�ccsz�tjtj�|�d�\}}z"t�|d�� }|VWd�n1s"wYt�||�WdSty<t�|��w)z-Write a file to the disk in an atomic fashion)�dir�wbN) r}�mkstemprOrd�dirname�fdopenr5� BaseException�remove)�filenameZtmp_descriptorZtmp_nameZ tmp_handlerr>r>r?r's��  �rcCs.|durdSt|ttttf�rtd��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)rhrr �boolr0r3r��valuer>r>r?�from_key_val_list4s r�cCs@|durdSt|ttttf�rtd��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�) rhrr r�r0r3r rA�listr�r>r>r?�to_key_val_listOs r�cCsXg}t|�D]#}|dd�|dd�krdkr$nnt|dd��}|�|�q|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 Nrrq�")�_parse_list_header�unquote_header_value�append)r��result�itemr>r>r?�parse_list_headerms  ( r�cCsxi}t|�D]3}d|vrd||<q|�dd�\}}|dd�|dd�kr+dkr5nnt|dd��}|||<q|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 �=Nrrqr�)r�r4r�)r�r�r�ror>r>r?�parse_dict_header�s ( r�cCs^|r-|d|dkrdkr-n|S|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 rrqr�rNrKz\\�\z\")r5)r�Z is_filenamer>r>r?r��s " �r�cCsi}|D]}|j||j<q|S)z�Returns a key/value dictionary from a CookieJar. :param cj: CookieJar object to extract cookies from. :rtype: dict )r�ro)�cj� cookie_dict�cookier>r>r?�dict_from_cookiejar�sr�cCs 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 r)r�r�r>r>r?�add_dict_to_cookiejar�s r�cCsTt�dt�tjdtjd�}tjdtjd�}t�d�}|�|�|�|�|�|�S)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=["\']*(.+?)["\'>])rSrT�DeprecationWarningr6�compiler8�findall)�contentZ charset_reZ pragma_reZxml_rer>r>r?�get_encodings_from_content�s�  ���r�c Cs�|�d�}|d��|dd�}}i}d}|D]0}|��}|rH|d}}|�d�} | dkrB|d| ��|�}|| dd��|�}|||��<q||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�rq)r4�strip�find�lower) �header�tokens� content_type�paramsZ params_dictZitems_to_strip�param�keyr�Zindex_of_equalsr>r>r?�_parse_content_type_header�s    �r�cCsP|�d�}|s dSt|�\}}d|vr|d�d�Sd|vr dSd|vr&dSdS) 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/json�utf-8)rbr�r�)�headersr�r�r>r>r?�get_encoding_from_headerss  �r�ccsj�|jdur |EdHdSt�|j�dd�}|D] }|�|�}|r$|Vq|jddd�}|r3|VdSdS)zStream decodes an iterator.Nr5��errors�T)�final)�encoding�codecs�getincrementaldecoderri)�iterator�r�decoder�chunk�rvr>r>r?�stream_decode_response_unicode.s�   � �r�ccsX�d}|dus |dkrt|�}|t|�kr*||||�V||7}|t|�ksdSdS)z Iterate over slices of a string.rN)rF)�stringZ slice_length�posr>r>r?� iter_slices?s� �r�cCsvt�dt�g}t|j�}|r%zt|j|�WSty$|�|�Ynwz t|j|dd�WSt y:|jYSw)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.)r5r�) rSrTr�r�r�rr�� UnicodeErrorr�� TypeError)r�Ztried_encodingsr�r>r>r?�get_unicode_from_responseIs" �  �  �r�zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c Cs�|�d�}tdt|��D]Q}||dd�}t|�dkrT|��rTz tt|d��}Wnty8td|�d���w|tvrJ|||dd�||<q d||��||<q d||��||<q 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 �%rrrK�z"Invalid percent-escape sequence: '�'N�) r4�rangerF�isalnum�chrr0r3r�UNRESERVED_SETrx)�uri�parts�i�h�cr>r>r?�unquote_unreservedvs  � r�cCs:d}d}z tt|�|d�WStyt||d�YSw)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)rr�r)r�Zsafe_with_percentZsafe_without_percentr>r>r?� requote_uri�s �r�cCslt�dt�|��d}|�d�\}}t�dt�tt|����d}t�dt�|��d|@}||@||@kS)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=Lrrw)�struct�unpack�socket� inet_atonr4�dotted_netmaskr0)�ip�netZipaddrZnetaddr�bits�netmask�networkr>r>r?�address_in_network�s r�cCs&ddd|>dA}t�t�d|��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�r>r>r?r��sr�cCs&zt�|�WdStyYdSw)z :rtype: bool FT)r�r�r2)Z string_ipr>r>r?�is_ipv4_address�s   ��r�cCs�|�d�dkr?z t|�d�d�}Wn tyYdSw|dks%|dkr'dSz t�|�d�d�WdSty>YdSwdS)zV Very simple check of the cidr format in no_proxy variable. :rtype: bool rwrFr�rT)�countr0r4r3r�r�r2)Zstring_networkr�r>r>r?� is_valid_cidr�s � ��r�c csz�|du}|rtj�|�}|tj|<zdVW|r*|dur#tj|=dS|tj|<dSdS|r<|dur7tj|=w|tj|<w)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)rOrarb)Zenv_namer�Z value_changed� old_valuer>r>r?� set_environ�s�   �r�c Cs8dd�}|}|dur|d�}t|�}|jdurdS|rkdd�|�dd ��d �D�}t|j�rJ|D]}t|�r@t|j|�r?dSq0|j|krHdSq0n!|j}|jrX|d |j��7}|D]}|j�|�sg|�|�rjdSqZt d|��zt |j�}Wnt t j fy�d }YnwWd�n1s�wY|r�dSd S) zL Returns whether we should bypass proxies or not. :rtype: bool cSstj�|�p tj�|���S�N)rOrarb�upper)r�r>r>r?� get_proxy�sz(should_bypass_proxies.<locals>.get_proxyN�no_proxyTcss�|]}|r|VqdSr�r>)rZr9r>r>r?r\s�z(should_bypass_proxies.<locals>.<genexpr>� r��,�:F)r�hostnamer5r4r�r�r��port�endswithr�rr�r��gaierror) rlr�r�Z no_proxy_arg�parsedZproxy_ipZhost_with_portr9Zbypassr>r>r?�should_bypass_proxies�sJ   � �� � ���r�cCst||d�riSt�S)zA Return a dict of environment proxies. :rtype: dict �r�)r�r)rlr�r>r>r?�get_environ_proxies3s r�cCsv|pi}t|�}|jdur|�|j|�d��S|jd|j|jd|jdg}d}|D] }||vr8||}|Sq+|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�rb�scheme)rl�proxies�urlpartsZ proxy_keys�proxyZ proxy_keyr>r>r?� select_proxy?s" ��rc Cst|dur|ni}|j}t|�j}|�d�}|��}|r8t||d�s8t||d�}|�||�d��}|r8|�||�|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 a 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�r�r)rlrrrb�copyr�r�� setdefault) �requestr� trust_envrlrr�Z new_proxiesZenviron_proxiesrr>r>r?�resolve_proxiesYs     r �python-requestscCs|�dt��S)zO Return a string representing the default user agent. :rtype: str rwr)ror>r>r?�default_user_agenttsr cCstt�tddd��S)z9 :rtype: requests.structures.CaseInsensitiveDict z*/*z keep-alive)z User-AgentzAccept-Encoding�Accept� Connection)rr �DEFAULT_ACCEPT_ENCODINGr>r>r>r?�default_headers}s��rc Cs�g}d}|�|�}|s |St�d|�D]M}z |�dd�\}}Wnty-|d}}Ynwd|�d�i}|�d�D] }z |�d�\}}Wn tyOYn w|�|�||�|�<q:|�|�q|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(rr�rlz<> '"r�)r�r6r4r3r�) r��links� replace_chars�valrlr��linkr�r�r>r>r?�parse_header_links�s*  � � r�r`rK�cCs�|dd�}|tjtjfvrdS|dd�tjkrdS|dd�tjtjfvr)dS|�t�}|dkr4d S|dkrN|ddd�tkrCd S|d dd�tkrNd S|dkrf|dd�t kr\d S|d d�t krfdSdS)z :rtype: str N�zutf-32rz utf-8-sigrKzutf-16rr�z 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�sampleZ nullcountr>r>r?�guess_json_utf�s*  r#c Cslt|�}|\}}}}}}} |j} | s|| } }|r d�|| g�} |dur&|}|dur,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�)rrjrxr) rlZ new_schemer�r�authr9r�rd�query�fragmentrjr>r>r?�prepend_scheme_if_needed�s r(c Cs@t|�}z t|j�t|j�f}W|Sttfyd}Y|Sw)z{Given a url with authentication components, extract them into a tuple of username,password. :rtype: (str,str) )r�r�)rr�username�passwordrNr�)rlr�r%r>r>r?�get_auth_from_url�s��r+c Csv|\}}|D]}t|�tvr td|�d|�d|�dt|�����qt|dtt|�d�t|dtt|�d�d S) z�Verifies that header parts don't contain leading whitespace reserved characters, or return characters. :param header: tuple, in the format (name, value). z Header part (z) from {�: z$} must be of type str or bytes, not rorr�rN)�typer r�_validate_header_part)r�ror��partr>r>r?�check_header_validitys ���r0cCs"|�|�std|�d|����dS)NzSInvalid leading whitespace, reserved character(s), or returncharacter(s) in header r,)r7r)Z header_partZ header_kind� validatorr>r>r?r.s ����r.cCsFt|�\}}}}}}|s||}}|�dd�d}t|||||df�S)zW Given a url remove the fragment and the authentication part. :rtype: str r$rrqr�)r�rsplitr)rlrrjrdr�r&r'r>r>r?� urldefragauths  r3cCsRt|jdd�}|dur%t|jt�r%z||j�WdSty$td��wtd��)zfMove file pointer back to its recorded starting position so it can be read again on redirect. rJNz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)rs�bodyrhZ_body_positionrr2r)Zprepared_request� body_seekr>r>r?� rewind_body/s � ��r6)Fr�)T)r )h�__doc__r�� contextlibrLrOr6r�r��sysr}rSry� collectionsrZ urllib3.utilrrr�rrZ_internal_utilsr r �compatr r r rrrrr�rrrrrrr�cookiesr� exceptionsrrrrZ structuresrrc�whereZDEFAULT_CA_BUNDLE_PATHZ DEFAULT_PORTSrxr4r�platformr@rDrYrnrvr��contextmanagerrr�r�r�r�r�r�r�r�r�r�r�r�r�� frozensetr�r�r�r�r�r�r�r�r�r�rr r rr�encoderrr r#r(r+r0r.r3r6r>r>r>r?�<module>s�     $   � $  B9%   #  (�    <    &  
Memory