Re(*@sddlmZyddlmZmZWn(ek rTddlmZmZYnXyddlmZWn%ek rGdddZYnXddlm Z ddl m Z dd l m Z mZmZd d gZeZGd d d eZGd d d eZdS))absolute_import)MappingMutableMapping)RLockc@s(eZdZddZddZdS)rcCsdS)N)selfrr/builddir/build/BUILDROOT/alt-python35-pip-20.2.4-5.el8.x86_64/opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/urllib3/_collections.py __enter__ szRLock.__enter__cCsdS)Nr)rexc_type exc_value tracebackrrr__exit__szRLock.__exit__N)__name__ __module__ __qualname__r r rrrrr s  r) OrderedDict) InvalidHeader)iterkeys itervaluesPY3RecentlyUsedContainerHTTPHeaderDictc@seZdZdZeZddddZddZdd Zd d Z d d Z ddZ ddZ ddZ dS)ra Provides a thread-safe dict-like container which maintains up to ``maxsize`` keys while throwing away the least-recently-used keys beyond ``maxsize``. :param maxsize: Maximum number of recent elements to retain. :param dispose_func: Every time an item is evicted from the container, ``dispose_func(value)`` is called. Callback which will get called NcCs1||_||_|j|_t|_dS)N)_maxsize dispose_func ContainerCls _containerrlock)rmaxsizerrrr__init__.s  zRecentlyUsedContainer.__init__c Cs8|j(|jj|}||j|<|SWdQRXdS)N)rrpop)rkeyitemrrr __getitem__5s  z!RecentlyUsedContainer.__getitem__c Cst}|jZ|jj|t}||j|>> 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 sntt|jt|_|dk rWt|trJ|j|n |j||rj|j|dS)N)superrr rr isinstance _copy_fromextend)rheaderskwargs) __class__rrr s   zHTTPHeaderDict.__init__cCs*||g|j|j<|j|jS)N)rlower)rr"valrrrr-szHTTPHeaderDict.__setitem__cCs*|j|j}dj|ddS)Nz, r)rr>join)rr"r?rrrr$szHTTPHeaderDict.__getitem__cCs|j|j=dS)N)rr>)rr"rrrr.szHTTPHeaderDict.__delitem__cCs|j|jkS)N)r>r)rr"rrr __contains__szHTTPHeaderDict.__contains__cCst|t r$t|d r$dSt|t|sKt||}tdd|jDtdd|jDkS)Nr5Fcss'|]\}}|j|fVqdS)N)r>).0kvrrr sz(HTTPHeaderDict.__eq__..css'|]\}}|j|fVqdS)N)r>)rBrCrDrrrrEs)r8rhasattrtypedict itermerged)rotherrrr__eq__s  zHTTPHeaderDict.__eq__cCs|j| S)N)rK)rrJrrr__ne__szHTTPHeaderDict.__ne__cCs t|jS)N)r(r)rrrrr/szHTTPHeaderDict.__len__ccs'x |jjD]}|dVqWdS)Nr)rr4)rvalsrrrr1szHTTPHeaderDict.__iter__c CsHy||}Wn(tk r8||jkr0|SYn X||=|SdS)zD.pop(k[,d]) -> v, remove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised. N)KeyError_HTTPHeaderDict__marker)rr"defaultr*rrrr!s  zHTTPHeaderDict.popc Cs$y ||=Wntk rYnXdS)N)rN)rr"rrrdiscards  zHTTPHeaderDict.discardcCsJ|j}||g}|jj||}||k rF|j|dS)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' N)r>r setdefaultappend)rr"r? key_lowernew_valsrMrrradds   zHTTPHeaderDict.addcOsZt|dkr-tdjt|t|dkrI|dnf}t|trx|jD]\}}|j||qkWnt|trx|D]}|j|||qWndt|drxR|j D]}|j|||qWn'x$|D]\}}|j||q Wx*|j D]\}}|j||q6WdS)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__ rz9extend() takes at most 1 positional arguments ({0} given)rr5N) r( TypeErrorformatr8r iteritemsrVrrFr5items)rargsr<rJr"r?r*rrrr:s$" zHTTPHeaderDict.extendc CsUy|j|j}Wn)tk rB||jkr:gS|SYnX|ddSdS)zmReturns a list of all the values for the named field. Returns an empty list if the key doesn't exist.rN)rr>rNrO)rr"rPrMrrrgetlists  zHTTPHeaderDict.getlistcCs#dt|jt|jfS)Nz%s(%s))rGrrHrI)rrrr__repr__szHTTPHeaderDict.__repr__cCsYxR|D]J}|j|}t|tr7t|}|g||j|j)rrJr"r?rrrr9s   zHTTPHeaderDict._copy_fromcCs t|}|j||S)N)rGr9)rclonerrrcopy!s zHTTPHeaderDict.copyccsRxK|D]C}|j|j}x'|ddD]}|d|fVq1WqWdS)z8Iterate over all header lines, including duplicate ones.rNr)rr>)rr"rMr?rrrrY&s zHTTPHeaderDict.iteritemsccsJxC|D];}|j|j}|ddj|ddfVqWdS)z:Iterate over all headers, merging duplicate ones together.rz, rN)rr>r@)rr"r?rrrrI-s zHTTPHeaderDict.itermergedcCst|jS)N)r2rY)rrrrrZ3szHTTPHeaderDict.itemscCsd}g}x|jD]}|j|ru|sDtd|n1|d\}}||d|jf|ds    L