B `o9@sddlZddlmZddlmZddlmZmZeZGddde Z e Z dd Z ed dga Gd d d ZGd ddZGdddeeZGdddeZGdddeeZGdddeZGdddZGdddZGdddeejZGdddeejZGdd d eejZdS)!N)array)abc) MultiMappingMutableMultiMappingc@seZdZdZdZdS)istrzCase insensitive str.TN)__name__ __module__ __qualname____doc__Z __is_istr__r r r/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/multidict/_multidict_py.pyr srcCst|tstd|jjS)Nz&Parameter should be multidict or proxy) isinstance_Base TypeError_impl_version)Zmdr r r getversions rQc@s4eZdZdZddZddZejjdkr0ddZ d S) _Impl)_itemsrcCsg|_|dS)N)r incr_version)selfr r r __init__ sz_Impl.__init__cCs"t}|dd7<|d|_dS)Nrr)r)rvr r r r$sz_Impl.incr_versionpypycCst|t|jS)N)object __sizeof__sys getsizeofr)rr r r r,sz_Impl.__sizeof__N) rr r __slots__rrrimplementationnamerr r r r rs  rc@s~eZdZddZefddZefddZddZdd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZd S)rcCs|S)Nr )rkeyr r r _title1sz _Base._titlecsH||fdd|jjD}|r(|S|s8|tk r8|Std|dS)z-Return a list of all values matching the key.csg|]\}}}|kr|qSr r ).0ikr)identityr r 7sz _Base.getall..zKey not found: %rN)r$rr_markerKeyError)rr#defaultresr )r(r getall4s  z _Base.getallcCsJ||}x"|jjD]\}}}||kr|SqW|tk r:|Std|dS)z!Get first value matching the key.zKey not found: %rN)r$rrr*r+)rr#r,r(r&r'rr r r getone>s z _Base.getonecCs ||S)N)r/)rr#r r r __getitem__Jsz_Base.__getitem__NcCs |||S)zVGet first value matching the key. The method is alias for .getone(). )r/)rr#r,r r r getMsz _Base.getcCs t|S)N)iterkeys)rr r r __iter__Tsz_Base.__iter__cCs t|jjS)N)lenrr)rr r r __len__Wsz _Base.__len__cCs t|jS)z+Return a new view of the dictionary's keys.) _KeysViewr)rr r r r3Zsz _Base.keyscCs t|jS)zAReturn a new view of the dictionary's items *(key, value) pairs).) _ItemsViewr)rr r r items^sz _Base.itemscCs t|jS)z-Return a new view of the dictionary's values.) _ValuesViewr)rr r r valuesbsz _Base.valuesc Cst|tjstSt|trz|jj}|jj}t|t|kr>dSx6t||D](\\}}}\}}}||ksn||krJdSqJWdSt|jjt|krdSx,| D] \} } | | t } | | krdSqWdS)NFT) rrMappingNotImplementedrrrr5zipr9r1r*) rotherZlftZrhti1Zk2Zv1i2Zv2r'rnvr r r __eq__fs$    z _Base.__eq__cCs2||}x"|jjD]\}}}||krdSqWdS)NTF)r$rr)rr#r(r&r'rr r r __contains__zs  z_Base.__contains__cCs(ddd|D}d|jj|S)Nz, css|]\}}d||VqdS)z '{}': {!r}N)format)r%r'rr r r sz!_Base.__repr__..z<{}({})>)joinr9rE __class__r)rbodyr r r __repr__sz_Base.__repr__)N)rr r r$r*r.r/r0r1r4r6r3r9r;rCrDrJr r r r r0s  rc@s(eZdZdZddZddZddZdS) MultiDictProxyz'Read-only proxy for MultiDict instance.cCs,t|ttfs tdt||j|_dS)Nz:ctor requires MultiDict or MultiDictProxy instance, not {})r MultiDictrKrrEtyper)rargr r r rs  zMultiDictProxy.__init__cCstd|jjdS)Nzcan't pickle {} objects)rrErHr)rr r r __reduce__szMultiDictProxy.__reduce__cCs t|S)zReturn a copy of itself.)rLr9)rr r r copyszMultiDictProxy.copyN)rr r r rrOrPr r r r rKs rKc@s(eZdZdZddZddZddZdS) CIMultiDictProxyz)Read-only proxy for CIMultiDict instance.cCs,t|ttfs tdt||j|_dS)Nz>ctor requires CIMultiDict or CIMultiDictProxy instance, not {})r CIMultiDictrQrrErMr)rrNr r r rs  zCIMultiDictProxy.__init__cCs|S)N)title)rr#r r r r$szCIMultiDictProxy._titlecCs t|S)zReturn a copy of itself.)rRr9)rr r r rPszCIMultiDictProxy.copyN)rr r r rr$rPr r r r rQs rQc@seZdZdZddZejjdkr(ddZddZ d d Z d d Z d dZ ddZ e ZddZddZddZddZddZddZd,ddZefd d!ZeZefd"d#Zd$d%Zd&d'Zd(d)Zd*d+ZdS)-rLz/Dictionary with the support for duplicate keys.cOs"t|_||||jj|jdS)N)rr_extendrHr _extend_items)rargskwargsr r r rszMultiDict.__init__rcCst|t|jS)N)rrrrr)rr r r rszMultiDict.__sizeof__cCs|jt|ffS)N)rHlistr9)rr r r rOszMultiDict.__reduce__cCs|S)Nr )rr#r r r r$szMultiDict._titlecCst|tr|StddS)Nz8MultiDict keys should be either str or subclasses of str)rstrr)rr#r r r _keys zMultiDict._keycCs2||}|jj||||f|jdS)N)r$rrappendrZr)rr#valuer(r r r adds z MultiDict.addcCs|j}||S)zReturn a copy of itself.)rHr9)rclsr r r rPszMultiDict.copycOs|||d|jdS)zhExtend current MultiDict with more values. This method must be used instead of update. extendN)rTrU)rrVrWr r r r_szMultiDict.extendcst|dkr td|t||r|d}t|dttfrL|sL|jj}nt|dr^| }|r|t |}| t | g}xN|D]F}t|dkstd|| |d|d|dfqW||n|fdd| DdS) Nrz1{} takes at most 1 positional argument ({} given)rr9z3{} takes either dict or list of (key, value) tuplescs&g|]\}}|||fqSr )r$rZ)r%r#r\)rr r r)sz%MultiDict._extend..)r5rrErrLrKrrhasattrr9rXr_r[r$rZ)rrVrWr"methodrNr9itemr )rr rTs0     ,  zMultiDict._extendcCs$x|D]\}}}|||qWdS)N)r])rr9r(r#r\r r r rUszMultiDict._extend_itemscCs|jj|jdS)z Remove all items from MultiDict.N)rrclearr)rr r r rds zMultiDict.clearcCs|||dS)N)_replace)rr#r\r r r __setitem__ szMultiDict.__setitem__cCsj||}|jj}d}x6tt|dddD]}||d|kr,||=d}q,W|s\t|n |jdS)NFrrT)r$rrranger5r+r)rr#r(r9foundr&r r r __delitem__ s  zMultiDict.__delitem__NcCs>||}x"|jjD]\}}}||kr|SqW||||S)zAReturn value for key, set value to default if key is not present.)r$rrr])rr#r,r(r&r'rr r r setdefaults   zMultiDict.setdefaultcCsz||}xTtt|jjD]@}|jj|d|kr|jj|d}|jj|=|j|SqW|tkrrt|n|SdS)zRemove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised. rr`N)r$rhr5rrrr*r+)rr#r,r(r&r\r r r popone"s    zMultiDict.poponecCsd}||}g}x^tt|jjdddD]B}|jj|}|d|kr,||d|jj|=|jd}q,W|s|tkrt|q|Sn | |SdS)zRemove all occurrences of key and return the list of corresponding values. If key is not found, default is returned if given, otherwise KeyError is raised. Frrgrr`TN) r$rhr5rrr[rr*r+reverse)rr#r,rir(retr&rcr r r popall7s       zMultiDict.popallcCs<|jjr0|jjd}|j|d|dfStddS)z1Remove and return an arbitrary (key, value) pair.rrr`zempty multidictN)rrpoprr+)rr&r r r popitemRs  zMultiDict.popitemcOs|||d|jdS)z>Update the dictionary from *other*, overwriting existing keys.updateN)rT _update_items)rrVrWr r r rr[szMultiDict.updatec Cs|sdSi}x|D]\}}}||d}xvt|t|jjD]<}|jj|}|d|kr<|d||<|||f|jj|<Pqs(   Vn