
    |h,$                        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 	 ddl	m
Z
 ddlmZ ej                  dk  rdZn	 dd	lmZ ej"                  d
kD  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 G d de      Z"dZ#y# e$ r ddlmZ ddlmZ ddlmZ Y w xY w# 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 w xY w# e$ r	 dd	lmZ Y w xY w# e$ r e e!fZY ow xY w)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'
    c                     t         t        |           i | _        |3t	        |t              r| j                  |       n| j                  |       |r| j                  |       y y N)superr   __init__
_container
isinstance
_copy_fromextend)selfheaderskwargs	__class__s      X/var/www/html/test/engine/venv/lib/python3.12/site-packages/requests_toolbelt/_compat.pyr   zHTTPHeaderDict.__init__`   sS    nd,.'>2(G$KK     c                 z    ||f| j                   |j                         <   | j                   |j                            S r   r   lowerr   keyvals      r   __setitem__zHTTPHeaderDict.__setitem__k   s/    (+Sz		$syy{++r   c                 d    | j                   |j                            }dj                  |dd        S )N,    r   r    joinr!   s      r   __getitem__zHTTPHeaderDict.__getitem__o   s+    oociik*yyQR!!r   c                 :    | j                   |j                         = y r   r   r   r"   s     r   __delitem__zHTTPHeaderDict.__delitem__s   s    OOCIIK(r   c                 :    |j                         | j                  v S r   )r    r   r,   s     r   __contains__zHTTPHeaderDict.__contains__v   s    yy{doo--r   c                 j   t        |t              st        |d      syt        |t        |             s t        |       |      }| j	                         D ci c]  \  }}|j                         | c}}|j	                         D ci c]  \  }}|j                         | c}}k(  S c c}}w c c}}w )NkeysF)r   r
   hasattrtype
itermergedr    )r   otherkvs       r   __eq__zHTTPHeaderDict.__eq__y   s    %)'%2H%d,DJu%E*.//*;<$!QA<*/*:*:*<=$!QA=> 	?<=s   B)B/c                 &    | j                  |       S r   )r8   )r   r5   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              #   X   K   | j                   j                         D ]	  }|d     y w)Nr   )r   values)r   valss     r   __iter__zHTTPHeaderDict.__iter__   s+     OO**, 	Dq'M	s   (*c                 X    	 | |   }| |= |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   sC    	IE S	L  	$--'N	s    ))c                 *    	 | |= y # t         $ r Y y w xY wr   )rD   r,   s     r   discardzHTTPHeaderDict.discard   s     	S	 		s    	c                     |j                         }||f}| j                  j                  ||      }||ur;t        |t              r|j                  |       y|d   |d   |g| j                  |<   yy)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_valsrA   s         r   addzHTTPHeaderDict.add   sp     IIK	8)))X>4$%C  /31gtAw-D	*  r   c                 Z   t        |      dkD  r#t        dj                  t        |                  t        |      dk\  r|d   nd}t        |t              r+|j                         D ]  \  }}| j                  ||        nt        |t              r|D ]  }| j                  |||           nSt        |d      r+|j                         D ]  }| j                  |||           n|D ]  \  }}| j                  ||        |j                         D ]  \  }}| j                  ||        y)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    r1   N)r<   	TypeErrorformatr   r   	iteritemsrQ   r
   r2   r1   items)r   argsr   r5   r"   r#   rG   s          r   r   zHTTPHeaderDict.extend   s    
 t9q= 3396#d)3DF Ft9>Qre^,!OO- #Sc"#w' *eCj)*UF#zz| *eCj)* $ %
Ue$% !,,. 	!JCHHS% 	!r   c                     	 | j                   |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   tuplerD   )r   r"   rA   s      r   getlistzHTTPHeaderDict.getlist   sT    	 ??399;/D $&Qy ABx  	I	s   : AAc                 f    t        |       j                  dt        | j                               dS )N())r3   __name__dictr4   r=   s    r   __repr__zHTTPHeaderDict.__repr__   s#    :..T__5F0GHHr   c                     |D ]O  }|j                  |      }t        |t              rt        |      }|g|z   | j                  |j	                         <   Q y r   )r[   r   rM   r   r    )r   r5   r"   r#   s       r   r   zHTTPHeaderDict._copy_from   sL     	7C--$C#t$3i,/53;DOOCIIK(	7r   c                 H     t        |              }|j                  |        |S r   )r3   r   )r   clones     r   copyzHTTPHeaderDict.copy   s"    T
r   c              #   z   K   | D ]2  }| j                   |j                            }|dd D ]  }|d   |f  4 yw)z8Iterate over all header lines, including duplicate ones.r'   Nr   r   )r   r"   rA   r#   s       r   rV   zHTTPHeaderDict.iteritems   sL      	#C??399;/DABx #1gsl"#	#s   9;c              #      K   | D ]:  }| j                   |j                            }|d   dj                  |dd       f < yw)z:Iterate over all headers, merging duplicate ones together.r   r&   r'   Nr(   r!   s      r   r4   zHTTPHeaderDict.itermerged  sG      	-C//#))+.Ca&$))CG,,,	-s   AAc                 4    t        | j                               S r   )rM   rV   r=   s    r   rW   zHTTPHeaderDict.items  s    DNN$%%r   c                    g }|j                   D ]m  }|j                  d      r$|d   \  }}||dz   |j                         z   f|d<   8|j                  dd      \  }}|j	                  ||j                         f       o  | |      S )z4Read headers from a Python 2 httplib message object.) 	z
:r'   )r   
startswithrstripsplitrN   strip)clsmessager   liner"   rG   s         r   from_httplibzHTTPHeaderDict.from_httplib  s     OO 	1D{+$R[
U"EFNT[[]$BCC+JCNNC/0	1 7|r   r   )$r_   
__module____qualname____doc__r   r$   r*   r-   r/   r8   r:   PY3r   iterkeys
itervaluesobjectrE   r>   rB   rH   rJ   rQ   r   r[   
getheadersgetallmatchingheadersigetra   r   re   rV   r4   rW   classmethodru   __classcell__)r   s   @r   r   r   >   s    B	 ,").?& !**#..
xH$
  ( (E.!4  J#DI7
#-&  r   r   )

basestringr   r   r   r   r   r   queuer   r   )$rx   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_infory   collections.abcr
   r   r   urllib.parser   r   collectionsQueueurlliburlparser   	NameErrorstrbytesr   __all__rS   r   r   <module>r      s  	  $025	C4  G): 
7//3  J
b^ bJa  $ #$  5& 
	  )()"  uJsi   B B0 C C) B-,B-0C6CC	CCCCCC&%C&)	C54C5