ó _XîTc@s,ddlmZmZyddlmZWn$ek rPddd„ƒYZnXyddlmZWn!ek rˆddlmZnXddlm Z m Z m Z dd gZ e d d d gƒZeƒZdefd „ƒYZejZejZejZejZejZd efd„ƒYZdS(iÿÿÿÿ(tMappingtMutableMapping(tRLockRcBseZd„Zd„ZRS(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 d„Zd„Zd„Zd„Z d„Z d„Z d„Z 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  cCs—t}|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ƒ||fƒS(N(t _dict_setitemtlower(RRtval((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyR&–scCs&t||jƒƒ}dj|dƒS(Ns, i(t _dict_getitemR6tjoin(RRR7((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyR™scCst||jƒƒS(N(t _dict_delitemR6(RR((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyR'scCst||jƒƒS(N(t_dict_containsR6(RR((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt __contains__ scs„tˆtƒ r$tˆdƒ r$tStˆtˆƒƒsNtˆƒˆƒ‰nt‡fd†ˆDƒƒt‡fd†ˆDƒƒkS(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||jkr3‚n|SX||=|SdS(s©D.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.pyR·s cCs#y ||=Wntk rnXdS(N(RF(RR((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pytdiscardÈs  cCsœ|jƒ}||f}t|||ƒ}||k r˜t|tƒrU|j|ƒq˜|tkr…t|||d|d|gƒq˜t|||ƒndS(sâAdds 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.pytaddÎs    $cOs=t|ƒdkr0tdjt|ƒƒƒ‚n|sEtdƒ‚n|d}t|ƒdkrk|dnd}t|tƒr¨x‰|D]}|j|||ƒq‡Wndt|dƒråxR|jƒD]}|j|||ƒqÄWn'x$|D]\}}|j||ƒqìWx*|jƒD]\}}|j||ƒqWdS( sÀGeneric 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.pyR2ès"  " cCsTyt||jƒƒ}Wntk r-gSXt|tƒrH|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|jƒƒfS(Ns%s(%s)(RCR R1t itermerged(R((s8/usr/lib/python2.7/site-packages/urllib3/_collections.pyt__repr__scCsat|ƒƒ}xK|D]C}t||ƒ}t|tƒrIt|ƒ}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|dƒfVqWdS(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|jƒƒS(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