
    nbi                    8   U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	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mZ ddlmZmZmZmZ dd	lmZmZmZmZ dd
lm Z! ddl"Z"ddl#m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z= ddl>m?Z? ej@        rddlAmBZBmCZC ddlDmEZE ddlFmGZGmHZHmIZImJZJ   e            e          Z  e            e          ZdZKdddZLdeMd<   dN                     ejO        d  e<d!"          d#                             ZPd$eMd%<   ejQ        d&k    rdd)ZRdd+Zdd/ZS ed01          ddd7            ZTdd:ZUejV        dd>            ZWddBZX ejY        dC          ZZ ejY        dD          Z[ddGZ\ddIZ]ddKZ^dddMZ_ddQZ`ddTZaddWZbddZZcdd`ZdddcZe ejY        ddefeg          ZhddiZi ejdj          ZkddlZlddmZmdddqZnddtZodduZpddwZqddxZrdd{Zsdd}ZtejV        dd            ZuddZvdddZwddZx	 dddZydddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZddZddZddZdddZddZddZddZddZddZddZddZdS )z
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
    )annotationsN)OrderedDict)	lru_cache)	CookieJar)NetrcParseErrornetrc)quoteunquoteurlparse
urlunparse)
getproxiesgetproxies_environmentproxy_bypassproxy_bypass_environment)parse_http_list   __version__)
InvalidURLMissingSchemaUnrewindableBodyError)RevocationConfigurationRevocationStrategy)ConnectionInfo)BaseResolverManyResolverProtocolResolverResolverDescription)AsyncBaseResolverAsyncManyResolverAsyncResolverDescription)ExtensionFromHTTPload_extension)AsyncExtensionFromHTTP)make_headers	parse_url)CaseInsensitiveDict)AsyncResolverTypeResolverType)RequestsCookieJar)AsyncResponsePreparedRequestRequestResponse)z.netrc_netrcP   i  httphttpszdict[str, int]DEFAULT_PORTSz, z,\s*T)accept_encodingzaccept-encodingstrDEFAULT_ACCEPT_ENCODINGwin32returnboolc                l   	 dd l }n# t          $ r Y dS w xY w	 |                    |j        d          }t	          |                    |d          d                   }|                    |d          d         }n# t          t          f$ r Y dS w xY w|r|sdS |                    d          }t          d |          }|D ]t}|dk    rd| vr d	S |
                    dd
          }|
                    dd          }|
                    dd          }t          j        || t          j                  r d	S udS )Nr   Fz;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)hostrB   internetSettingsproxyEnableproxyOverridetests         ^/var/www/html/mdtn/previsions/meteo_cartes/venv/lib/python3.11/site-packages/niquests/utils.pyproxy_bypass_registryrV   M   s   	MMMM 	 	 	55	
	%~~(N   
 f112BMRRSTUVVK"//0@/RRSTUMM$ 	 	 	55	 	- 	5
 &++C00 t]33! 	 	Dy  d??44<<U++D<<U++D<<T**DxdBD)) ttus    
A A: :BBrP   c                Z    t                      rt          |           S t          |           S )zReturn True, if the host should be bypassed.

        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        )r   r   rV   )rP   s    rU   r   r   t   s.     "## 	/+D111(...    o
typing.AnyrF   c                   d }d}t          | d          rt          |           }nst          | d          r| j        }n[t          | d          rK	 |                                 }t          j        |          j        }n# t          j        t          f$ r Y nw xY wt          | d          r	 | 	                                }t          | d          rW|U	 | 
                    dd           | 	                                }| 
                    |pd           n'# t          $ r d}Y nw xY wn# t          $ r ||}Y nw xY w|d}t          d||z
            S )Nr   __len__lenfilenotellseek   )hasattrr]   r^   osfstatst_sizeioUnsupportedOperationAttributeErrorr_   r`   rH   max)rY   total_lengthcurrent_positionr^   s       rU   	super_lenrl      s   Lq) 41vv	E		 4u	H		 	4	4XXZZF 8F++3LL '8 	 	 	 D		 q& %	% vvxx q&!! %l&:	%FF1aLLL#$6688L FF+0q1111 % % %#$LLL%%  	0 	0 	0
 '#/ 	0* q,!11222s7   A< <BB)D% AD D! D!%D65D6@   )maxsizeFurl
str | Noneraise_errorstuple[str, str] | Nonec                P   | dS t           j                            d          }||fnt          d t          D                       }	 t          d |D             d          }|dS t          |           }|j        }|dS t          |          	                    |          }|r|\  }}	}
|r|
r||
fS dS nq# t          $ r}|rt          d          |Y d}~nPd}~wt          $ r}|rt          d          |Y d}~n,d}~wt          $ r}|rt          d          |Y d}~nd}~ww xY wdS )z;Returns the Requests tuple auth for a given url from netrc.NNETRCc              3      K   | ]	}d | V  
dS )z~/N .0fs     rU   	<genexpr>z!get_netrc_auth.<locals>.<genexpr>   s-      YxYxghZb_`ZbZbYxYxYxYxYxYxrX   c              3     K   | ]_}t           j                            t           j                            |                    >t           j                            |          V  `d S N)rc   pathexists
expanduserrw   s     rU   rz   z!get_netrc_auth.<locals>.<genexpr>   sV      eeqrw~~bgN`N`abNcNc?d?deRW""eeeeeerX   zSyntax error in netrc filez+Problem accessing or reading the netrc filez6Unexpected error while retrieving netrc authenticators)rc   environgettupleNETRC_FILESnextr&   hostnamer   authenticatorsr   rI   rH   rh   RuntimeError)ro   rq   
netrc_filenetrc_locations
netrc_pathrirP   r/   login_passwordes               rU   get_netrc_authr      s    {t((J8B8N
}}TYYxYxlwYxYxYxTxTxO`eeOeee
 

 4s^^{<4z""11$77 	!'E1h ' 'h&4		
  B B B 	B9::A	B 	B 	B 	B 	B P P P 	PGHHaO	P 	P 	P 	P 	P ` ` ` 	`WXX^__	` 	` 	` 	` 	`` 4s<   B5 &B5  1B5 5
D#?CD##C::D#DD#obj	typing.IOc                    t          | dd          }|rLt          |t                    r7|d         dk    r+|d         dk    rt          j                            |          S dS )z0Tries to guess the filename of the given object.nameNr   <>)getattr
isinstancer6   rc   r}   basename)r   r   s     rU   guess_filenamer      s_    3%%D &
4%% &$q'S..T"X__w%%%4rX   filenamestr | bytes | os.PathLike-typing.Generator[typing.BinaryIO, None, None]c              #  H  K   t          j        t          j                            |                     \  }}	 t          j        |d          5 }|V  ddd           n# 1 swxY w Y   t          j        ||            dS # t          $ r t          j        |            w xY w)z-Write a file to the disk in an atomic fashion)dirwbN)	tempfilemkstemprc   r}   dirnamefdopenrL   BaseExceptionremove)r   tmp_descriptortmp_nametmp_handlers       rU   atomic_openr      s      
  (/BGOOH4M4MNNNNHY~t,, 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	

8X&&&&&   
	(s/   B AB A##B &A#'B  B!valuetyping.Any | NoneOrderedDict | Nonec                    | dS t          | t          t          t          f          st	          d          t          |           S )a  Take 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')])
    N+cannot encode objects that are not 2-tuples)r   r   listdictrI   r   r   s    rU   from_key_val_listr      sE      }teeT4011 HFGGGurX   _KT_VTLdict[_KT, _VT] | typing.Mapping[_KT, _VT] | typing.Iterable[tuple[_KT, _VT]]list[tuple[_KT, _VT]]c                    | t          d          t          | t          t          t          t
          f          rt          d          t          | d          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
    Nz%cannot accept None in to_key_val_listr   items)	rI   r   r6   bytesr:   rF   rb   r   r   r   s    rU   to_key_val_listr     sn    " }@AAA%#udC011 HFGGGug ;;rX   	list[str]c                    g }t          |           D ]N}|dd         |dd         cxk    rdk    rn nt          |dd                   }|                    |           O|S )a  Parse 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`
    Nr   r   ")_parse_list_headerunquote_header_valueappend)r   resultitems      rU   parse_list_headerr   0  s    , F"5))  8tBCCy''''C''''''QrT
33DdMrX   typing.Mapping[str, str | None]c                    i }t          |           D ]a}d|vrd||<   |                    dd          \  }} | dd         | dd         cxk    rdk    rn nt          | dd                   } | ||<   b|S )aM  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`
    =Nr   r   r   )r   rJ   r   )r   r   r   r   s       rU   parse_dict_headerr   O  s    * 68F"5))  d??F4Ljja((e!9bcc
))))c)))))(qt55EtMrX   is_filenamec                    | r`| d         | d         cxk    rdk    rGn nD| dd         } |r| dd         dk    r*|                      dd                               d	d          S | S )
zUnquotes 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.
    r   r   r   r   Nra   z\\\z\")rL   )r   r   s     rU   r   r   q  s      CqU2Y----#-----
 ad  	CeBQBi611==..66ucBBBLrX   cjr   dict[str, str | None]c                    d | D             }|S )zoReturns a key/value dictionary from a CookieJar.

    :param cj: CookieJar object to extract cookies from.
    c                (    i | ]}|j         |j        S rv   )r   r   )rx   cookies     rU   
<dictcomp>z'dict_from_cookiejar.<locals>.<dictcomp>  s    >>>6;>>>rX   rv   )r   cookie_dicts     rU   dict_from_cookiejarr     s     ?>2>>>KrX   r*   RequestsCookieJar | CookieJarc                &    ddl m}  |||           S )zReturns 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.
    r   )cookiejar_from_dict)cookiesr   )r   r   r   s      rU   add_dict_to_cookiejarr     s)     -,,,,,{B///rX   header1tuple[str, dict[str, str | typing.Literal[True]]]c                   |                      d          }|d                                         |dd         }}i }d}|D ]}|                                }|rs|d}}|                    d          }	|	dk    r=|d|	                             |          }||	dz   d                             |          }|||                                <   ||fS )	zReturns content type and parameters from given header

    :param header: string
    :return: tuple containing content type and dictionary of
         parameters
    r>   r   r   Nz"' Tr   r   )rJ   stripfindlower)
r   tokenscontent_typeparamsparams_dictitems_to_stripparamkeyr   index_of_equalss
             rU   _parse_content_type_headerr     s     \\#F!!9??,,fQRRj&LKN 
- 
- 	- C#jjooO"$$,_,-33NCCo1334::>JJ',K		$$$rX   headerstyping.Mapping[str, str]c                    |                      d          }|sdS t          |          \  }}d|v r8t          |d         t                    r|d                             d          ndS d|v rdS dS )zmReturns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    zcontent-typeNcharsetz'"zapplication/jsonzutf-8)r   r   r   r6   r   )r   r   r   s      rU   get_encoding_from_headersr     s     ;;~..L t5lCCL&F1;F9<Ms1S1S]vi &&u---Y]]\))w4rX   iterator#typing.Generator[bytes, None, None]rr.   )typing.Generator[bytes | str, None, None]c              #     K   |j         
| E d{V  dS  t          j        |j                   d          }| D ]}|                    |          }|r|V  |                    dd          }|r|V  dS dS zStream decodes an iterator.NrL   )errorsrX   T)finalencodingcodecsgetincrementaldecoderdecode)r   r   decoderchunkrvs        rU   stream_decode_response_unicoder     s      
 	z6f*1:66iHHHG  ^^E"" 	HHH	4	(	(B	  rX   "typing.AsyncGenerator[bytes, None](typing.AsyncGenerator[bytes | str, None]c                 K   |j         | 2 3 d{V }|W V  6 dS  t          j        |j                   d          }| 2 3 d{V }|                    |          }|r|W V  $6 |                    dd          }|r|W V  dS dS r   r   )r   r   r   r   r   s        rU   astream_decode_response_unicoder    s      
 	z# 	 	 	 	 	 	 	%KKKKK $6f*1:66iHHHG       e^^E"" 	HHHH   
4	(	(B	  s
   A%_SVstringslice_length
int | None!typing.Generator[_SV, None, None]c              #     K   d}||dk    rt          |           }|t          |           k     r)| |||z            V  ||z  }|t          |           k     'dS dS )z Iterate over slices of a string.r   N)r]   )r  r  poss      rU   iter_slicesr
    s{      
C|q006{{
F

S3--....| F





rX   zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~uric                   |                      d          }t          dt          |                    D ]}||         dd         }t          |          dk    r|                                ro	 t	          t          |d                    }n!# t          $ r t          d| d          w xY w|t          v r|||         dd         z   ||<   d||          ||<   d||          ||<   d		                    |          S )
zUn-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
    %r   r   ra      z"Invalid percent-escape sequence: ''N )
rJ   ranger]   isalnumchrrF   rI   r   UNRESERVED_SETjoin)r  partsihcs        rU   unquote_unreservedr    s    IIcNNE1c%jj!! & &!HQqSMq66Q;;199;;;LAr

OO L L L !Ja!J!J!JKKKL N""uQx|+a)uQx>>a%58~~E!HH775>>s   -BB)c                    d}d}	 t          t          |           |          S # t          $ r t          | |          cY S w xY w)zRe-quote the given URI.

    This function passes the given URI through an unquote/quote cycle to
    ensure that it is fully and consistently quoted.
    z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~)safe)r	   r  r   )r  safe_with_percentsafe_without_percents      rU   requote_urir  !  sk     /0	5 ',,3DEEEE 5 5 5 S3444444	5s   $ AA    mask	totalbitsc                "    d| z  dz
  || z
  z  }|S )a
  Converts a mask from /xx format to an integer
    to be used as a mask for IP's in int format
    Example: if mask is 24 function returns 0xFFFFFF00
             if mask is 24 and totalbits=128 function
                returns 0xFFFFFF00000000000000000000000000
    r   rv   )r!  r"  bitss      rU   _get_mask_bitsr%  5  s      $Y!OT!12DKrX   ipnetc                   |                     d          \  }}t          |           rt          |          rwt          j        dt	          j        |                     d         }t          t          |                    }t          j        dt	          j        |                    d         }nt          |           rt          |          rt          j        dt	          j	        t          j
        |                     \  }}|dz  |z  }t          t          |          d          }t          j        dt	          j	        t          j
        |                    \  }	}
|	dz  |
z  }ndS ||z  ||z  k    S )a!  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
             returns True if ip = 1:2:3:4::1 and net = 1:2:3:4::/64
    /z>Lr   z>QQrm      F)rJ   is_ipv4_addressstructunpacksocket	inet_atonr%  rF   is_ipv6_address	inet_ptonAF_INET6)r&  r'  netaddrr$  ipaddrnetmasknetwork
ipaddr_msb
ipaddr_lsbnetwork_msbnetwork_lsbs              rU   address_in_networkr;  A  sG    IIcNNMGTr w77 tV%5b%9%9::1= T++-f&6w&?&?@@C			 !9!9 !'uf6FvXZ6[6[!\!\
J"j0 TC00#)=8HZa8b8b#c#c ["$3uW'G"344rX   c                l    ddd| z
  z  dz
  z  }t          j        t          j        d|                    S )zpConverts mask from /xx format to xxx.xxx.xxx.xxx

    Example: if mask is 24 function returns 255.255.255.0
    l    r   r   z>I)r.  	inet_ntoar,  pack)r!  r$  s     rU   dotted_netmaskr?  X  s8    
 b4i1,,DFKd33444rX   	string_ipc                T    	 t          j        |            n# t          $ r Y dS w xY wdS NFT)r.  r/  rH   r@  s    rU   r+  r+  a  sB    ####   uu4s    
%%c                j    	 t          j        t           j        |            n# t          $ r Y dS w xY wdS rB  r.  r1  r2  rH   rC  s    rU   r0  r0  i  sF    )4444   uu4s   " 
00abc                    	 t          j        t           j        |           t          j        t           j        |          k    S # t          $ r Y dS w xY w)zD
    Compare 2 IPs, uses socket.inet_pton to normalize IPv6 IPs
    FrE  )rF  rG  s     rU   compare_ipv6rI  q  sS    33v7GYZ7[7[[[   uus   ?A 
AAstring_networkc                \   |                      d          dk    r|                     d          \  }}t          |          dk    s|                                du rdS t	          |          }t          |          r|dk     s|dk    rdS n"t          |          r|dk     s|dk    rdS ndS dS dS )zD
    Very simple check of the cidr format in no_proxy variable.
    r)  r      Fr   r*  T)countrJ   r]   isdigitrF   r+  r0  )rJ  addressr!  mask_ints       rU   is_valid_cidrrQ  {  s     C  A%%&,,S11t99>>T\\^^u445t997## 	!||x"}}u  -W%% 	!||x#~~u  . 5u4rX   env_name"typing.Generator[None, None, None]c              #    K   |du}|r.t           j                            |           }|t           j        | <   	 dV  |r"|t           j        | = dS |t           j        | <   dS dS # |r|t           j        | = n|t           j        | <   w xY w)zSet 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)rc   r   r   )rR  r   value_changed	old_values       rU   set_environrW    s       %M %JNN8,,	$
81 	1 Jx((('0
8$$$		1 	1= 	1 Jx(('0
8$0000s   A" "#Bno_proxyc                >   dd}|}| |d          }t          |           }|j        dS |rt          d	 |                    d
d                              d          D                       }t          |j                  st          |j                  rT|D ]P}t          |          rt          |j        |          r dS *|j        |k    r dS t          |j        |          r dS QnR|j        }|j
        r|d|j
         z  }|D ]4}|j                            |          s|                    |          r dS 5t          d|          5  	 t          |j                  }	n# t          t          j        f$ r d}	Y nw xY wddd           n# 1 swxY w Y   |	rdS dS )z:
    Returns whether we should bypass proxies or not.
    r   r6   r9   rp   c                    t           j                            |           p0t           j                            |                                           S r|   )rc   r   r   upper)r   s    rU   	get_proxyz(should_bypass_proxies.<locals>.get_proxy  s1    z~~c""AbjnnSYY[[&A&AArX   NrX  Tc              3     K   | ]}||V  	d S r|   rv   )rx   rP   s     rU   rz   z(should_bypass_proxies.<locals>.<genexpr>  s(      [[dVZ[T[[[[[[rX    r  ,:F)r   r6   r9   rp   )r   r   r   rL   rJ   r+  r0  rQ  r;  rI  portendswithrW  r   	TypeErrorr.  gaierror)
ro   rX  r\  no_proxy_argparsedno_proxy_listproxy_iphost_with_portrP   bypasss
             rU   should_bypass_proxiesrk    s]   B B B B
 L9Z((c]]Ft   [[h.>.>sB.G.G.M.Mc.R.R[[[[[6?++ 	 v/O/O 	 ) 	  	  **  )&/8DD $#tt$_00  44!&/8<<  44 	  $_N{ 4"3fk"3"33%    ?++D11  ^5L5LT5R5R    44 
 
Z	.	.  	!&/22FF6?+ 	 	 	FFF		                t5s6   FE$#F$E?<F>E??FFFdict[str, str]c                P    t                      }|si S t          | |          ri S |S )z/
    Return a dict of environment proxies.
    rX  )r   rk  )ro   rX  proxiess      rU   get_environ_proxiesrp    s9     llG 	S8444 	rX   ro  &typing.Mapping[str, str | None] | Nonec                   |pi }|sdS t          |           }|j        .|                    |j        |                    d                    S |j        dz   |j        z   |j        d|j        z   dg}|j                                        dvr|j        }d}d|v r't          |                    dd                    \  }}	 t          ||          }|                    |          }|	                    |           |	                    |dz   |j        z              n# t          $ r Y nw xY wd}|D ]}	|	|v r
||	         } n|S )	zSelect 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://zall://r1   +r   )maxsplit)r   r   r   schemer   r   rJ   r#   scheme_to_http_schemer   rC   )
ro   ro  urlparts
proxy_keysmaybe_extension_schemeimplementationextension_classparent_schemeproxy	proxy_keys
             rU   select_proxyr    s    mG t}}H {{8?GKK,>,>??? 	%("338$$	J  '   "*(((5:;Q;W;WX[fg;W;h;h5i5i2"N	I,-C^TTO ,AABXYYMm,,,me3h6GGHHHH  	 	 	D	 E  	I&EE   Ls    D 
D('D(requestPreparedRequest | Requestdict[str, str] | None	trust_envc                r   ||ni }| j         }|
J d            t          |          }|                    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 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
    Nz,PreparedRequest is not initialized correctlyrX  rn  rs  )ro   parse_schemer   copyrk  rp  
setdefault)	r  ro  r  ro   rv  rX  new_proxiesenviron_proxiesr~  s	            rU   resolve_proxiesr  )  s     !,gg"G
+C??J???#F{{:&&H,,..K 2.sXFFF 2-cHEEE##FO,?,?,F,FGG 	2""65111rX   niquestsr   c                    |  dt            S )z>
    Return a string representing the default user agent.
    r)  r   )r   s    rU   default_user_agentr  I  s     ""["""rX   r'   c                 L    t          t                      t          ddd          S )Nz*/*z
keep-alive)z
User-AgentzAccept-EncodingAccept
Connection)r'   r  r7   rv   rX   rU   default_headersr  P  s0    ,..6&		
 	
  rX   list[dict[str, str]]c                   g }d}|                      |          } | s|S t          j        d|           D ]}	 |                    dd          \  }}n# t          $ r |d}}Y nw xY wd|                     d          i}|                    d          D ]X}	 |                    d          \  }} n# t          $ r Y  n0w xY w|                      |          ||                     |          <   Y|                    |           |S )	zReturn 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"
    z '"z, *<r>   r   r  ro   z<> '"r   )r   rM   rJ   rI   r   )	r   linksreplace_charsvalro   r   linkr   r   s	            rU   parse_header_linksr  [  sA    #%EMKK&&E x&&  	"))C++KC 	" 	" 	"rCCC	" syy**+\\#&& 	H 	HE"[[--
UU    .3[[-G-GD=))**TLs#   AA! A!B,,
B:9B:
new_schemec                    t          |           }|\  }}}}}}}	|j        }
|
s||
}}
|r|
rd                    ||
g          }
||}|d}t          ||
|d||	f          S )zGiven 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.
    @Nr  )r&   netlocr  r   )ro   r  rf  rv  authrP   ra  r}   queryfragmentr  s              rU   prepend_scheme_if_neededr  ~  s     s^^F6<3FD$dE8 ]F $V * * 4.))~|vvtRABBBrX   tuple[str, str]c                   t          |           }|j        r	d|j        vrdS t          |j                            dd                    \  }}	 t	          |          t	          |          f}n# t
          t          f$ r d}Y nw xY w|S )zdGiven a url with authentication components, extract them into a tuple of
    username,password.
    r`  )r  r  r   )r&   r  r   rJ   r
   rh   rc  )ro   rf  usernamer   r  s        rU   get_auth_from_urlr    s     s^^F; #V[00vv{00a8899Hh!!78#4#45I&    Ks   A- -BBc                    t          |           \  }}}}}}|s||}}|                    dd          d         }t          |||||df          S )zF
    Given a url remove the fragment and the authentication part.
    r  r   r   r  )r   rsplitr   )ro   rv  r  r}   r   r  r  s          rU   urldefragauthr    sb     5=SMM1FFD&%  $V]]3""2&FvvtVUB?@@@rX   prepared_requestr,   Nonec                    t          | j        dd          }|Jt          | j        t                    r0	  || j                   dS # t
          $ r t          d          w xY wt          d          )zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    r`   Nz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r   bodyr   _body_positionrF   rH   r   )r  	body_seeks     rU   rewind_bodyr    s     (-vt<<I,<,KS!Q!Q	gI&566666 	g 	g 	g'(efff	g $$QRRRs   A A 
definitionResolverType | Noner   c                H   | bt           j                            dd          }|t          j        |          } n+t          t
          j                                                  S t          | t                    r| S t          | t                    rt          j        |           g}nt          | t                    r| g}n|t          | t                    rX| s+t          t
          j                                                  S t          | d         t                    rd | D             }n| }nt          d          g }d}|D ]}t          |t                    r}|                    t          j        |                     |d         j        t
          j        k    rd}d	|d         v r.|d         j        d	         du rd|d         d
<   |d         j        d	= |                    |           d	|d         v r.|d         j        d	         du rd|d         d
<   |d         j        d	= |d         j        t
          j        k    rd}|s'|                    t          j        d                     |D ]$}d|vrd|vrd|vrt!          j                    |d<   %t%          d |D              S )AInstantiate a unique resolver, reusable across the Session scope.NNIQUESTS_DNS_URLr   c                6    g | ]}t          j        |          S rv   )r   from_urlrx   r   s     rU   
<listcomp>z#create_resolver.<locals>.<listcomp>  s$    LLLA+4Q77LLLrX   !invalid resolver definition givenFr   Tverify	cert_reqs system://default?hosts=localhostca_cert_dataca_cert_dirca_certsc                6    g | ]}|                                 S rv   newrx   r   s     rU   r  z#create_resolver.<locals>.<listcomp>  s     555a!%%''555rX   )rc   r   r   r   r  r   SYSTEMr  r   r   r6   r   rI   r   protocolkwargswassimagenerate_ca_bundler   r  overrule_dnsresolver	resolverscan_resolve_localhostresolver_descriptionrds          rU   create_resolverr    s   z~~&8$??#,5lCCJJ&'7'>??CCEEE*l++ *c"" >'0<<=	J 3	4	4 
><	J	%	% > 	F&'7'>??CCEEEjmS)) 	"LLLLLHH!HH<===+-I"' ( ) )*C00 
	09:NOOPPP}%)9)@@@(,%9R=((Yr]-A(-Ku-T-T-.	"k*bM(2-...y}$$2)=h)G5)P)P)*IbM+&"$X.R=!%5%<<<$(!  [,56XYYZZZ  > >##R(?(?JVXDXDX!(!;!=!=B~55955566rX   AsyncResolverType | Noner   c                H   | bt           j                            dd          }|t          j        |          } n+t          t
          j                                                  S t          | t                    r| S t          | t                    rt          j        |           g}nt          | t                    r| g}n|t          | t                    rX| s+t          t
          j                                                  S t          | d         t                    rd | D             }n| }nt          d          g }d}|D ]}t          |t                    r}|                    t          j        |                     |d         j        t
          j        k    rd}d	|d         v r.|d         j        d	         du rd|d         d
<   |d         j        d	= |                    |           d	|d         v r.|d         j        d	         du rd|d         d
<   |d         j        d	= |d         j        t
          j        k    rd}|s'|                    t          j        d                     |D ]$}d|vrd|vrd|vrt!          j                    |d<   %t%          d |D              S )r  Nr  r   c                6    g | ]}t          j        |          S rv   )r!   r  r  s     rU   r  z)create_async_resolver.<locals>.<listcomp>  s$    QQQ09!<<QQQrX   r  Fr   Tr  r  r  r  r  r  c                6    g | ]}|                                 S rv   r  r  s     rU   r  z)create_async_resolver.<locals>.<listcomp>F  s     :::1quuww:::rX   )rc   r   r   r!   r  r   r  r  r   r   r6   r   rI   r   r  r  r  r  r    r  s          rU   create_async_resolverr  	  s   z~~&8$??#1:<HHJJ+,<,CDDHHJJJ*/00 *c"" >,5jAAB	J 8	9	9 
><	J	%	% > 	K+,<,CDDHHJJJjmS)) 	"QQjQQQHH!HH<===02I"' ( ) )*C00 
	5>?STTUUU}%)9)@@@(,%9R=((Yr]-A(-Ku-T-T-.	"k*bM(2-...y}$$2)=h)G5)P)P)*IbM+&"$X.R=!%5%<<<$(!  `1:;]^^___  > >##R(?(?JVXDXDX!(!;!=!=B~::	:::;;rX   disable_ipv4disable_ipv6socket.AddressFamilyc                R    | rt           j        S |rt           j        S t           j        S r|   )r.  r2  AF_INET	AF_UNSPEC)r  r  s     rU   resolve_socket_familyr  I  s+      ~rX   responseAsyncResponse | Responsec                    | j         }t          |j                  dk    o|j        d         t          u}|r|j        d         | _         d S |                                d         | _         d S )Nr   r   )	__class__r]   	__bases__object__subclasses__)r  response_classis_asyncs      rU   _swap_contextr  Q  sp    'N>+,,1_n6Nq6QY_6_H @+5a8+::<<Q?rX   ConnectionInfo | Nonec                    | d S t                      }t          |                                           D ]\  }}t          |||           |S r|   )r   varsr   setattr)rY   nattrr  s       rU   _deepcopy_cir  \  sR    ytA!WW]]__  	c4HrX      default
max_lengthc                    	 | d|                      dd|dz                      }n2# t          $ r%}||cY d}~S t          d| d|  d          |d}~ww xY w|                                S )zWe tend to extract url scheme often enough, but we were crazy
    enough to use urlparse for it...! We were wasting precious CPU cycles.
    Return used scheme url, lowercased.Nr`  r   zInvalid URL z0: No scheme supplied. Perhaps you meant https://rA   )indexrI   r   r   )ro   r  r  rv  r   s        rU   r  r  h  s    q8syyaa8889 q q qNNNNNNh3hhbehhhiioppq
 <<>>s   "% 
AAAAA	conn_infoc                    | | j         | j        dS d t          | j                            dg                     D             }|sdS dS )NFc                <    g | ]}|                     d           |S zhttp://
startswithrx   eps     rU   r  z#is_ocsp_capable.<locals>.<listcomp>{  <        ==##	
  rX   OCSPTcertificate_dercertificate_dictr   r   r  	endpointss     rU   is_ocsp_capabler  v  sl    I5=A[Acu  y155fbAABB  I  u4rX   c                    | | j         | j        dS d t          | j                            dg                     D             }|sdS dS )NFc                <    g | ]}|                     d           |S r  r  r  s     rU   r  z"is_crl_capable.<locals>.<listcomp>  r  rX   crlDistributionPointsTr  r   s     rU   is_crl_capabler    sm    I5=A[Acu  y1556MrRRSS  I  u4rX   revocation_configurationRevocationConfiguration | Nonec                    t          |           sdS |dS |j        t          j        t          j        hv rdS t          |           sdS dS rB  )r  strategyr   
PREFER_CRL	CHECK_ALLr  r  r  s     rU   should_check_crlr    s\    )$$ u'u(-?-JL^Lh,iiit9%% t5rX   c                    t          |           sdS |dS |j        t          j        t          j        hv rdS t          |           sdS dS rB  )r  r
  r   PREFER_OCSPr  r  r  s     rU   should_check_ocspr    s\    9%% u'u(-?-KM_Mi,jjjt)$$ t5rX   	extensiontype[ExtensionFromHTTP]c                   	
 ddl mmmmm	m
 ddl m ddlm	m
mm ddlm ddlm ddlm ddlm  G 	
fdd	|           }|S )
z
    We want to properly map exceptions from bellow (urllib3-future) into our own exceptions.
    This function purposely wrap the extension class to achieve that.
    Warning: synchronous context only!
    r   ChunkedEncodingErrorConnectionErrorContentDecodingErrorInvalidHeader
ProxyErrorReadTimeoutSSLErrorClosedPoolErrorDecodeErrorProtocolErrorReadTimeoutError	HTTPErrorr  r  c                  z     e Zd Zd		
 f	dZd
	
 fdZd	
 fdZ xZS ):wrap_extension_for_http.<locals>._WrappedExtensionFromHTTPr9   str | bytes | Nonec                   	 	  t                      j        |i |S # $ r} |          d }~w$ r} |          d }~w	$ r} |          d }~w$ r} 
|          d }~ww xY wr|   supernext_payloadselfargsr  r   r  r  r   r!  r  r"  RequestsSSLError	_SSLErrorr  s       rU   r-  zGwrap_extension_for_http.<locals>._WrappedExtensionFromHTTP.next_payload  s    	*+uww+T<V<<<  . . .**1--- . . .**1---# % % %!k!nn$ * * *&&q)))*s3    A*,A*?A*AA*A%%A*bufstr | bytesr  c                   	 t                                          |           d S # t          f$ r} |          d }~w$ r} |          d }~w$ r} |          d }~wf$ rW}t          |          r |          t          |
          r 	|          t          |          r |           d }~ww xY wr|   r,  send_payloadrH   r   r/  r3  errr   r  r  r  r!  r  r  r"  r1  
_HTTPError_InvalidHeader_ProxyErrorr2  r  s       rU   r7  zGwrap_extension_for_http.<locals>._WrappedExtensionFromHTTP.send_payload  s(   $$S)))))!7+ + + +%oc***" ) ) )%oa((( $ $ $ jmm#z*   a++ **1---#344 %+a..(>22 '-***s7   !& C=CACA##
C-AB??Cc                   	 t                                                       d S # t          f$ r} |          d }~w$ r} |          d }~w$ r} |          d }~wf$ rW}t          |          r 
|          t          |	          r |          t          |          r |           d }~ww xY wr|   r,  closerH   r   r/  r9  r   r  r  r  r!  r  r  r"  r1  r:  r;  r<  r2  r  s      rU   r?  z@wrap_extension_for_http.<locals>._WrappedExtensionFromHTTP.close  s   !7+ + + +%oc***" ) ) )%oa((( $ $ $ jmm#z*   a++ **1---#344 %+a..(>22 '-***s7    % C<CACA""
C,AB>>Cr9   r)  r3  r4  r9   r  r9   r  __name__
__module____qualname__r-  r7  r?  __classcell__r  r  r  r  r  r   r  r!  r  r  r"  r1  r:  r;  r<  r2  s   @rU   _WrappedExtensionFromHTTPr(           
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	*	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	rX   rJ  
exceptionsr  r  r  r  r  r  r  packages.urllib3.exceptionsr  r   r!  r"  r$  )r  rJ  r  r  r  r  r   r  r!  r  r  r"  r1  r:  r;  r<  r2  s     @@@@@@@@@@@@@@@rU   wrap_extension_for_httprO    s                                                      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1I 1 1 1f %$rX   type[AsyncExtensionFromHTTP]c                   	
 ddl mmmmm	m
 ddl m ddlm	m
mm ddlm ddlm ddlm ddlm  G 	
fdd	|           }|S )
z
    We want to properly map exceptions from bellow (urllib3-future) into our own exceptions.
    This function purposely wrap the extension class to achieve that.
    Warning: asynchronous context only!
    r   r  r  r  r#  r%  r&  c                  z     e Zd Zd		
 f	dZd
	
 fdZd	
 fdZ xZS )Easync_wrap_extension_for_http.<locals>._AsyncWrappedExtensionFromHTTPr9   r)  c                   	K   	  t                      j        |i | d {V S # $ r} |          d }~w$ r} |          d }~w	$ r} |          d }~w$ r} 
|          d }~ww xY wr|   r+  r.  s       rU   r-  zRasync_wrap_extension_for_http.<locals>._AsyncWrappedExtensionFromHTTP.next_payload@  s      	*1UWW14B6BBBBBBBBB  . . .**1--- . . .**1---# % % %!k!nn$ * * *&&q)))*s5   $ A24A2AA2AA2"A--A2r3  r4  r  c                  K   	 t                                          |           d {V  d S # t          f$ r} |          d }~w$ r} |          d }~w$ r} |          d }~wf$ rW}t          |          r |          t          |
          r 	|          t          |          r |           d }~ww xY wr|   r6  r8  s       rU   r7  zRasync_wrap_extension_for_http.<locals>._AsyncWrappedExtensionFromHTTP.send_payloadL  s>     gg**3///////////!7+ + + +%oc***" ) ) )%oa((( $ $ $ jmm#z*   a++ **1---#344 %+a..(>22 '-***s9   '. CACAC A++
C5ACCc                  K   	 t                                                       d {V  d S # t          f$ r} |          d }~w$ r} |          d }~w$ r} |          d }~wf$ rW}t          |          r 
|          t          |	          r |          t          |          r |           d }~ww xY wr|   r>  r@  s      rU   r?  zKasync_wrap_extension_for_http.<locals>._AsyncWrappedExtensionFromHTTP.close_  s8     ggmmoo%%%%%%%%%!7+ + + +%oc***" ) ) )%oa((( $ $ $ jmm#z*   a++ **1---#344 %+a..(>22 '-***s9   &- CACACA**
C4ACCrA  rB  rC  rD  rI  s   @rU   _AsyncWrappedExtensionFromHTTPrS  ?  rK  rX   rW  rL  )r  rW  r  r  r  r  r   r  r!  r  r  r"  r1  r:  r;  r<  r2  s     @@@@@@@@@@@@@@@rU   async_wrap_extension_for_httprX    s                                                      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1f *)rX   excr   c                    t                      }| }|rI||vrEt          |t          j                  rdS |                    |           |j        p|j        }|r||vEdS )NTF)setr   asyncioCancelledErroradd	__cause____context__)rY  seencurs      rU   is_cancelled_error_root_causerc  u  sp    55D #C
 /#T//c7122 	4m.s	  /#T//
 5rX   )r9   r:   )rP   r6   r9   r:   )rY   rZ   r9   rF   )F)ro   rp   rq   r:   r9   rr   )r   r   r9   rp   )r   r   r9   r   )r   r   r9   r   )r   r   r9   r   )r   r6   r9   r   )r   r6   r9   r   )r   r6   r   r:   r9   r6   )r   r   r9   r   )r   r*   r9   r   )r   r6   r9   r   )r   r   r9   rp   )r   r   r   r.   r9   r   )r   r   r   r.   r9   r   )r  r  r  r  r9   r  )r  r6   r9   r6   )r   )r!  rF   r"  rF   r9   rF   )r&  r6   r'  r6   r9   r:   )r!  rF   r9   r6   )r@  r6   r9   r:   )rF  r6   rG  r6   )rJ  r6   r9   r:   )rR  r6   r   rp   r9   rS  )ro   r6   rX  rp   r9   r:   r|   )ro   r6   rX  rp   r9   rl  )ro   r6   ro  rq  r9   rp   )T)r  r  ro  r  r  r:   r9   rl  )r  )r   r6   r9   r6   )r9   r'   )r   r6   r9   r  )ro   r6   r  r6   r9   r6   )ro   r6   r9   r  )ro   r6   r9   r6   )r  r,   r9   r  )r  r  r9   r   )r  r  r9   r   )r  r:   r  r:   r9   r  )r  r  r9   r  )rY   r  r9   r  )Nr  )ro   r6   r  rp   r  rF   r9   r6   )r  r  r9   r:   )r  r  r  r  r9   r:   )r  r  r9   r  )r  rP  r9   rP  )rY  r   r9   r:   )__doc__
__future__r   r\  r   
contextlibrf   rc   rM   r.  r,  sysr   typingcollectionsr   	functoolsr   http.cookiejarr   r   r   urllib.parser	   r
   r   r   urllib.requestr   r   r   r   r   r   r  r   rM  r   r   r   extensions.revocationr   r   packages.urllib3r   !packages.urllib3.contrib.resolverr   r   r   r   (packages.urllib3.contrib.resolver._asyncr   r    r!   &packages.urllib3.contrib.webextensionsr"   r#   -packages.urllib3.contrib.webextensions._asyncr$   packages.urllib3.utilr%   r&   
structuresr'   TYPE_CHECKING_typingr(   r)   r   r*   modelsr+   r,   r-   r.   r   r4   __annotations__r  rJ   r7   platformrV   rl   r   r   contextmanagerr   r   TypeVarr   r   r   r   r   r   r   r   r   r   r   r  r6   r   r  r
  	frozensetr  r  r  r%  r;  r?  r+  r0  rI  rQ  rW  rk  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rO  rX  rc  rv   rX   rU   <module>r~     s]     # " " " " "       				 				 				   



   # # # # # #       $ $ $ $ $ $ ( ( ( ( ( ( ( ( = = = = = = = = = = = =            A @ @ @ @ @  $ $ $ $ $ $ H H H H H H H H H H N N N N N N N N , , , , , ,                    
 V U U U U U U U Q Q Q Q Q Q : : : : : : : : + + + + + +	 J88888888******IIIIIIIIIIII YY[[$$
$%;<< ")+c : : : : : :  $yy'<<X\;];];]^o;p)q)qrr  r r r r <7% % % %N	/ 	/ 	/ 	/03 03 03 03f 2' ' ' ' 'T          2 fnUfnU   <   >   D    0   0 0 0 0% % % %:   .   &   * fnUC''    dee   ,5 5 5 5(	 	 	 	 	5 5 5 5.5 5 5 5            2 1 1 1 1*: : : :z    0 0 0 0l     @# # # # #          FC C C C6   &A A A AS S S S=7 =7 =7 =7@=< =< =< =<@   @ @ @ @	 	 	 	       &   $        Z% Z% Z% Z%zZ* Z* Z* Z*z     rX   