ó AñUc@sddlmZmZyddlmZWn$ek rPdd d„ƒYZnXyddlmZWn!ek rˆddlmZnXddlm Z m Z m Z dd gZ e ƒZdefd „ƒYZejZejZejZejZejZd efd „ƒYZd S(iÿÿÿÿ(tMappingtMutableMapping(tRLockRcBseZd„Zd„ZRS(cCsdS(N((tself((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyt __enter__scCsdS(N((Rtexc_typet exc_valuet traceback((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyt__exit__ s(t__name__t __module__RR(((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyRs (t OrderedDicti(titerkeyst itervaluestPY3tRecentlyUsedContainertHTTPHeaderDictcBsbeZdZeZdd 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((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyt__init__*s  cCs7|j(|jj|ƒ}||j|<|SWdQXdS(N(RRtpop(Rtkeytitem((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyt __getitem__1s  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' cKsbtj|ƒ|dk rHt|tƒr8|j|ƒqH|j|ƒn|r^|j|ƒndS(N(tdictRR/t isinstanceRt _copy_fromtextend(Rtheaderstkwargs((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyRs  cCst||jƒ||fƒS(N(t _dict_setitemtlower(RRtval((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyR%—scCs&t||jƒƒ}dj|dƒS(Ns, i(t _dict_getitemR7tjoin(RRR8((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyRšscCst||jƒƒS(N(t _dict_delitemR7(RR((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyR&žscCst||jƒƒS(N(t_dict_containsR7(RR((sL/usr/lib/python2.7/vendor-packages/requests/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(sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pys ©sc3s|]}|ˆ|fVqdS(N((R>tk2(tother(sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pys ©s(R1RthasattrR!ttypeR0(RRA((RARsL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyt__eq__¤s  cCs|j|ƒ S(N(RD(RRA((sL/usr/lib/python2.7/vendor-packages/requests/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"((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyR¸s cCs#y ||=Wntk rnXdS(N(RF(RR((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pytdiscardÉs  cCs}|jƒ}||f}t|||ƒ}||k ryt|tƒrU|j|ƒqyt|||d|d|gƒ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(R7t_dict_setdefaultR1R*tappendR6(RRR8t key_lowertnew_valstvals((sL/usr/lib/python2.7/vendor-packages/requests/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(( Rt TypeErrortformatR1RRORBR-titems(targsR5RRARR"((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyR3æ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(R9R7RFR1ttuple(RRRN((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pytgetlists  cCs#dt|ƒjt|jƒƒfS(Ns%s(%s)(RCR R0t itermerged(R((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyt__repr__scCsRxK|D]C}t||ƒ}t|tƒr:t|ƒ}nt|||ƒqWdS(N(R9R1R*R6(RRARR8((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyR2s  cCs t|ƒƒ}|j|ƒ|S(N(RCR2(Rtclone((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pytcopys ccsHxA|D]9}t||ƒ}x!|dD]}|d|fVq'WqWdS(s8Iterate over all header lines, including duplicate ones.iiN(R9(RRRNR8((sL/usr/lib/python2.7/vendor-packages/requests/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(R9R:(RRR8((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyRV)s cCst|jƒƒS(N(R*RZ(R((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyRR/ss set-cookiecCs_||jƒƒ}xF|D]>}|j|ƒx'|j|ƒD]}|j||ƒq<W|SWdS(s4Read headers from a Python 2 httplib message object.N(RRRIt getheadersRO(tclstmessaget duplicatestretRR8((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyt from_httplib2s   N(s set-cookie($R R R.R/RR%RR&R=RDRERR,RtupdateRR R tobjectRGRRIROR3RUR[tgetallmatchingheaderstigetRWR2RYRZRVRRt classmethodR`(((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyRks>                        N((t collectionsRRt threadingRt ImportErrorR tpackages.ordered_dictt packages.sixR R Rt__all__RbRRR0R%R6RR9R&R;R=R<t setdefaultRJR(((sL/usr/lib/python2.7/vendor-packages/requests/packages/urllib3/_collections.pyts$    J