
    .Ph,$                        d Z ddlZddlZ	 ddlmZ ddlmZ ddlmZ n# e$ r ddlmZ ddlmZ ddlmZ Y nw xY w	 ddl	m
Z
 ddlmZ n(# e$ r  	 ddlm
Z
 ddlmZ n# e$ r dZ
dZY nw xY wY nw xY wej        dk     rdZn	 dd	lmZ n# e$ r	 dd	lmZ Y nw xY wej        d
k    ZerddlmZmZ ddlZddlmZmZ nddlmZmZ ddlZddlmZ ddlmZ 	 eZn# e$ r e e!fZY nw xY w G d de          Z"dZ#dS )zPrivate module full of compatibility hacks.

Primarily this is for downstream redistributions of requests that unvendor
urllib3 without providing a shim.

.. warning::

    This module is private. If you use it, and something breaks, you were
    warned
    N)fields)filepost)poolmanager)HTTPConnection)
connectioni  )timeout)   r   )MappingMutableMapping)	urlencodeurljoin)r   )r   c                        e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	d	 Z
esej        Zej        Z e            Zd
 Zd ZefdZd Zd Zd Zd ZeZeZeZd Zd Zd Zd Zd Zd Z e!d             Z" xZ#S )HTTPHeaderDictap  
    :param headers:
        An iterable of field-value pairs. Must not contain multiple field names
        when compared case-insensitively.

    :param kwargs:
        Additional field-value pairs to pass in to ``dict.update``.

    A ``dict`` like container for storing HTTP Headers.

    Field names are stored and compared case-insensitively in compliance with
    RFC 7230. Iteration provides the first case-sensitive key seen for each
    case-insensitive pair.

    Using ``__setitem__`` syntax overwrites fields that compare equal
    case-insensitively in order to maintain ``dict``'s api. For fields that
    compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add``
    in a loop.

    If multiple fields that are equal case-insensitively are passed to the
    constructor or ``.update``, the behavior is undefined and some will be
    lost.

    >>> headers = HTTPHeaderDict()
    >>> headers.add('Set-Cookie', 'foo=bar')
    >>> headers.add('set-cookie', 'baz=quxx')
    >>> headers['content-length'] = '7'
    >>> headers['SET-cookie']
    'foo=bar, baz=quxx'
    >>> headers['Content-Length']
    '7'
    Nc                    t          t          |                                            i | _        |@t	          |t                    r|                     |           n|                     |           |r|                     |           d S d S N)superr   __init__
_container
isinstance
_copy_fromextend)selfheaderskwargs	__class__s      Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/requests_toolbelt/_compat.pyr   zHTTPHeaderDict.__init__`   s    nd##,,...'>22 %((((G$$$ 	 KK	  	     c                 |    ||f| j         |                                <   | j         |                                         S r   r   lowerr   keyvals      r   __setitem__zHTTPHeaderDict.__setitem__k   s/    (+Sz		$syy{{++r   c                 z    | j         |                                         }d                    |dd                    S )N,    r   r    joinr!   s      r   __getitem__zHTTPHeaderDict.__getitem__o   s0    ociikk*yyQRR!!!r   c                 :    | j         |                                = d S r   r   r   r"   s     r   __delitem__zHTTPHeaderDict.__delitem__s   s    OCIIKK(((r   c                 8    |                                 | j        v S r   )r    r   r,   s     r   __contains__zHTTPHeaderDict.__contains__v   s    yy{{do--r   c                 6   t          |t                    st          |d          sdS t          |t          |                     s t          |           |          }d |                                 D             d |                                D             k    S )NkeysFc                 >    i | ]\  }}|                                 |S  r    .0kvs      r   
<dictcomp>z)HTTPHeaderDict.__eq__.<locals>.<dictcomp>~   s&    <<<$!QA<<<r   c                 >    i | ]\  }}|                                 |S r3   r4   r5   s      r   r9   z)HTTPHeaderDict.__eq__.<locals>.<dictcomp>   s&    ===$!QA===r   )r   r
   hasattrtype
itermergedr   others     r   __eq__zHTTPHeaderDict.__eq__y   s    %)) 	'%2H2H 	5%d,, 	&DJJu%%E<<$//*;*;<<<==%*:*:*<*<===> 	?r   c                 .    |                      |           S r   )r@   r>   s     r   __ne__zHTTPHeaderDict.__ne__   s    ;;u%%%%r   c                 *    t          | j                  S r   )lenr   r   s    r   __len__zHTTPHeaderDict.__len__   s    4?###r   c              #   V   K   | j                                         D ]}|d         V  d S )Nr   )r   values)r   valss     r   __iter__zHTTPHeaderDict.__iter__   s<      O**,, 	 	Dq'MMMM	 	r   c                 V    	 | |         }| |= |S # t           $ r || j        u r |cY S w xY w)zD.pop(k[,d]) -> v, remove specified key and return its value.

        If key is not found, d is returned if given, otherwise KeyError is
        raised.
        )KeyError_HTTPHeaderDict__marker)r   r"   defaultvalues       r   popzHTTPHeaderDict.pop   sT    	IE S	L  	 	 	$-''NNN	s    ((c                 0    	 | |= d S # t           $ r Y d S w xY wr   )rL   r,   s     r   discardzHTTPHeaderDict.discard   s4    	S			 	 	 	DD	s    
c                    |                                 }||f}| j                            ||          }||urGt          |t                    r|                    |           dS |d         |d         |g| j        |<   dS dS )zAdds a (name, value) pair, doesn't overwrite the value if it already
        exists.

        >>> headers = HTTPHeaderDict(foo='bar')
        >>> headers.add('Foo', 'baz')
        >>> headers['foo']
        'bar, baz'
        r   r'   N)r    r   
setdefaultr   listappend)r   r"   r#   	key_lowernew_valsrI   s         r   addzHTTPHeaderDict.add   s     IIKK	8)))X>>4$%% EC      /31gtAw-D	***  r   c                    t          |          dk    r/t          d                    t          |                              t          |          dk    r|d         nd}t          |t                    r1|                                D ]\  }}|                     ||           nt          |t                    r"|D ]}|                     |||                    nbt          |d          r4|	                                D ]}|                     |||                    n|D ]\  }}|                     ||           |
                                D ]\  }}|                     ||           dS )zGeneric import function for any type of header-like object.
        Adapted version of MutableMapping.update in order to insert items
        with self.add instead of self.__setitem__
        r'   z8extend() takes at most 1 positional arguments ({} given)r   r3   r1   N)rD   	TypeErrorformatr   r   	iteritemsrY   r
   r;   r1   items)r   argsr   r?   r"   r#   rO   s          r   r   zHTTPHeaderDict.extend   s   
 t99q== 3396#d))3D3DF F Ft99>>Qre^,, 	%!OO-- # #Sc""""#w'' 	% * *eCj))))*UF## 	%zz|| * *eCj))))* $ % %
Ue$$$$ ,,.. 	! 	!JCHHS%    	! 	!r   c                     	 | j         |                                         }t          |t                    r	|d         gS |dd         S # t          $ r g cY S w xY w)zmReturns a list of all the values for the named field. Returns an
        empty list if the key doesn't exist.r'   N)r   r    r   tuplerL   )r   r"   rI   s      r   getlistzHTTPHeaderDict.getlist   sn    	 ?399;;/D $&&  Qy ABBx  	 	 	III	s   A	 	AAc                 t    t          |           j        dt          |                                           dS )N())r<   __name__dictr=   rE   s    r   __repr__zHTTPHeaderDict.__repr__   s4    ::...T__5F5F0G0G0G0GHHr   c                     |D ][}|                     |          }t          |t                    rt          |          }|g|z   | j        |                                <   \d S r   )rb   r   rU   r   r    )r   r?   r"   r#   s       r   r   zHTTPHeaderDict._copy_from   sf     	7 	7C--$$C#t$$  3ii,/53;DOCIIKK((	7 	7r   c                 ^     t          |                       }|                    |            |S r   )r<   r   )r   clones     r   copyzHTTPHeaderDict.copy   s,    T

r   c              #      K   | D ]:}| j         |                                         }|dd         D ]}|d         |fV  ;dS )z8Iterate over all header lines, including duplicate ones.r'   Nr   r   )r   r"   rI   r#   s       r   r]   zHTTPHeaderDict.iteritems   sf       	# 	#C?399;;/DABBx # #1gsl""""#	# 	#r   c              #      K   | D ]H}| j         |                                         }|d         d                    |dd                   fV  IdS )z:Iterate over all headers, merging duplicate ones together.r   r&   r'   Nr(   r!   s      r   r=   zHTTPHeaderDict.itermerged  s_       	- 	-C/#))++.Ca&$))CG,,,,,,,	- 	-r   c                 D    t          |                                           S r   )rU   r]   rE   s    r   r^   zHTTPHeaderDict.items  s    DNN$$%%%r   c                 4   g }|j         D ]}|                    d          r+|d         \  }}||dz   |                                z   f|d<   B|                    dd          \  }}|                    ||                                f            | |          S )z4Read headers from a Python 2 httplib message object.) 	z
:r'   )r   
startswithrstripsplitrV   strip)clsmessager   liner"   rO   s         r   from_httplibzHTTPHeaderDict.from_httplib  s     O 	1 	1D{++ $R[
U"EFNT[[]]$BCC++JCNNC/0000s7||r   r   )$rf   
__module____qualname____doc__r   r$   r*   r-   r/   r@   rB   PY3r   iterkeys
itervaluesobjectrM   rF   rJ   rP   rR   rY   r   rb   
getheadersgetallmatchingheadersigetrh   r   rl   r]   r=   r^   classmethodr|   __classcell__)r   s   @r   r   r   >   s        B	  	  	  	  	  	 , , ," " ") ) ). . .? ? ?& & &  /!*#.
vxxH$ $ $  
  (    (  E E E.! ! !4      J#DI I I7 7 7  
# # #- - -& & &   [    r   r   )

basestringr   r   r   r   r   r   queuer   r   )$r   sysrequestsrequests.packages.urllib3r   r   r   ImportErrorurllib3$requests.packages.urllib3.connectionr   r   urllib3.connection	__build__r   requests.packages.urllib3.utilurllib3.utilversion_infor   collections.abcr
   r   r   urllib.parser   r   collectionsQueueurlliburlparser   	NameErrorstrbytesr   __all__r3   r   r   <module>r      s  	 	 


 $0000002222225555555 $ $ $      ########$
	CCCCCC4444444   555555&&&&&&&   


	   GG)::::::: ) ) )(((((((() 
 !77777777LLL/////////33333333            JJ   uJJJb b b b b^ b b bJse    99A
 
A/AA/	A)&A/(A))A/.A/B BBC 	C#"C#