_XTc@s,ddlmZmZyddlmZWn$ek rPdddYZnXyddlmZWn!ek rddlmZnXddlm Z m Z m Z dd gZ e d d d gZeZdefd YZejZejZejZejZejZd efdYZdS(i(tMappingtMutableMapping(tRLockRcBseZdZdZRS(cCsdS(N((tself((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt __enter__scCsdS(N((Rtexc_typet exc_valuet traceback((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt__exit__ s(t__name__t __module__RR(((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyRs (t OrderedDicti(titerkeyst itervaluestPY3tRecentlyUsedContainertHTTPHeaderDicttcookies set-cookies set-cookie2cBsbeZdZeZdd dZdZdZdZ dZ dZ dZ d Z RS( s 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 i cCs1||_||_|j|_t|_dS(N(t_maxsizet dispose_funct ContainerClst _containerRtlock(RtmaxsizeR((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt__init__,s  cCs7|j(|jj|}||j|<|SWdQXdS(N(RRtpop(Rtkeytitem((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt __getitem__3s  cCst}|j]|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' cKsCtj||dk r)|j|n|r?|j|ndS(N(tdictRR0textend(Rtheaderstkwargs((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyRs   cCst||j||fS(N(t _dict_setitemtlower(RRtval((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyR&scCs&t||j}dj|dS(Ns, i(t _dict_getitemR6tjoin(RRR7((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyRscCst||jS(N(t _dict_delitemR6(RR((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyR'scCst||jS(N(t_dict_containsR6(RR((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt __contains__scstt r$td r$tSttsNtntfdDtfdDkS(NR.c3s|]}||fVqdS(N((t.0tk1(R(s8/usr/lib/python2.7/site-packages/urllib3/_collections.pys sc3s|]}||fVqdS(N((R=tk2(tother(s8/usr/lib/python2.7/site-packages/urllib3/_collections.pys s(t isinstanceRthasattrR"ttypeR1(RR@((R@Rs8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt__eq__s  cCs|j| S(N(RD(RR@((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt__ne__scCsGy||}Wn'tk r7||jkr3n|SX||=|SdS(sD.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(tKeyErrort_HTTPHeaderDict__marker(RRtdefaultR#((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyRs cCs#y ||=Wntk rnXdS(N(RF(RR((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pytdiscards  cCs|j}||f}t|||}||k rt|trU|j|q|tkrt|||d|d|gqt|||ndS(sAdds 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' iiN(R6t_dict_setdefaultRAR+tappendtMULTIPLE_HEADERS_ALLOWEDR5(RRR7t key_lowertnew_valstvals((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pytadds    $cOs=t|dkr0tdjt|n|sEtdn|d}t|dkrk|dnd}t|trx|D]}|j|||qWndt|drxR|jD]}|j|||qWn'x$|D]\}}|j||qWx*|jD]\}}|j||qWdS( sGeneric 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__ is8update() takes at most 2 positional arguments ({} given)s,update() takes at least 1 argument (0 given)iiR.N(( R t TypeErrortformatRARRPRBR.titems(targsR4RR@RR#((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyR2s"  " cCsTyt||j}Wntk r-gSXt|trH|dgS|dSdS(smReturns a list of all the values for the named field. Returns an empty list if the key doesn't exist.iN(R8R6RFRAttuple(RRRO((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pytgetlists  cCs#dt|jt|jfS(Ns%s(%s)(RCR R1t itermerged(R((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt__repr__scCsat|}xK|D]C}t||}t|trIt|}nt|||qW|S(N(RCR8RAR+R5(RtcloneRR7((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pytcopys ccsHxA|D]9}t||}x!|dD]}|d|fVq'WqWdS(s8Iterate over all header lines, including duplicate ones.iiN(R8(RRROR7((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt iteritems!s ccs@x9|D]1}t||}|ddj|dfVqWdS(s:Iterate over all headers, merging duplicate ones together.is, iN(R8R9(RRR7((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyRW(s cCst|jS(N(R+R[(R((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyRS.ss set-cookiecCs_||j}xF|D]>}|j|x'|j|D]}|j||q<W|SWdS(s4Read headers from a Python 2 httplib message object.N(RSRIt getheadersRP(tclstmessaget duplicatestretRR7((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt from_httplib1s   N(s set-cookie(#R R R/R0RR&RR'R<RDRERR-RtupdateRR R tobjectRGRRIRPR2RVR\tgetallmatchingheaderstigetRXRZR[RWRSt classmethodRa(((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyRms<                       N((t collectionsRRt threadingRt ImportErrorR tpackages.ordered_dictt packages.sixR R Rt__all__t frozensetRLRcRRR1R&R5RR8R'R:R<R;t setdefaultRJR(((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyts&    J